############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 08/Jul/2011 16:25:40 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\main.c # # Command line = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\main.c -D X75 -D # # GUI_INTERFACE -D START_OFFLINE --preprocess # # D:\pasha\elf\_MY_PROJECT_\_NATICQ2\X75_START_OFFLINE # # \List\ -lC D:\pasha\elf\_MY_PROJECT_\_NATICQ2\X75_ST # # ART_OFFLINE\List\ -o D:\pasha\elf\_MY_PROJECT_\_NATI # # CQ2\X75_START_OFFLINE\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_\_NATICQ2\X75_START_OFFLINE # # \List\main.lst # # Object file = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\X75_START_OFFLINE # # \Obj\main.r79 # # # # # ############################################################################## D:\pasha\elf\_MY_PROJECT_\_NATICQ2\main.c 1 #include "../inc/swilib.h" 2 #include "../inc/cfg_items.h" 3 #include "../inc/pnglist.h" 4 #include "NatICQ.h" 5 #include "history.h" 6 #include "conf_loader.h" 7 #include "mainmenu.h" 8 #include "main.h" 9 #include "language.h" 10 #include "../inc/xtask_ipc.h" 11 #include "smiles.h" 12 #include "../inc/naticq_ipc.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 "revisio0.h" 21 #include "lang.h" 22 #include "smiles_loader.h" 23 //Я сделал, что мог; пусть те, кто могут, сделают лучше 24 //#ifdef GUI_INTERFACE 25 #include "externals.h" 26 //#endif 27 #include "auth.h" 28 29 #ifndef NEWSGOLD 30 #define SEND_TIMER 31 #endif 32 33 extern volatile int total_smiles; 34 extern volatile int total_xstatuses; 35 extern volatile int xstatuses_load; 36 extern volatile int pictures_max; 37 extern volatile int pictures_loaded; 38 39 extern const unsigned int IllByONCantact; 40 extern const int DEVELOP_IF; 41 42 #define USE_MLMENU 43 //#define GUI_INTERFACE //use my interface else use standart 44 45 #define TMR_SECOND 216 46 47 //IPC 48 const char ipc_my_name[32]=IPC_NATICQ_NAME; 49 const char ipc_xtask_name[]=IPC_XTASK_NAME; 50 IPC_REQ gipc; 51 52 volatile CLIST *cltop; 53 char elf_path[256]; 54 int maincsm_id; 55 int maingui_id; 56 \ In segment CODE, align 4, keep-with-next 57 void SMART_REDRAW(void) 58 { \ SMART_REDRAW: \ 00000000 10402DE9 PUSH {R4,LR} 59 int f; 60 LockSched(); \ 00000004 460100EF SWI +326 61 f=IsGuiOnTop(maingui_id); \ 00000008 1C009FE5 LDR R0,??SMART_REDRAW_0 ;; popup + 776 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 350100EF SWI +309 \ 00000014 0040A0E1 MOV R4,R0 62 UnlockSched(); \ 00000018 470100EF SWI +327 63 if (f) REDRAW(); \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} \ 00000024 720100EF SWI +370 64 } \ 00000028 1080BDE8 POP {R4,PC} ;; return \ ??SMART_REDRAW_0: \ 0000002C ........ DC32 popup + 776 65 66 //По 10 секунд 67 #define ACTIVE_TIME 360 68 69 //Максимальное количество сообщений в логе 70 #define MAXLOGMSG (20) 71 72 // Строковые описания статусов 73 74 const char S_OFFLINE[]="Offline"; 75 const char S_INVISIBLE[]="Invisible"; 76 const char S_AWAY[]="Away"; 77 const char S_NA[]="N/A"; 78 const char S_OCCUPIED[]="Occupied"; 79 const char S_DND[]="DND"; 80 const char S_ONLINE[]="Online"; 81 const char S_FFC[]="FFC"; 82 83 volatile int SENDMSGCOUNT; 84 85 int IsActiveUp = 0; 86 volatile int vibra_count; 87 88 int Is_Double_Vibra_On = 0; 89 int Is_Vibra_Enabled = 0; 90 unsigned int Is_Sounds_Enabled = 0; 91 int Is_Show_Offline = 0; 92 int Is_Show_Groups = 0; 93 int Is_POPUP_On = 1; 94 int Is_SLI_On = 1; 95 int Is_ILU_By_Online = 1; 96 int Is_Extd_Sound = 0; 97 98 int S_ICONS[TOTAL_ICONS+1]; 99 100 #define EOP -10 101 int CurrentStatus; 102 int CurrentXStatus; 103 104 int total_unread; 105 int total_unread_all;//общее кол-во непрочитанных сообщений 106 107 char last_msg_buffer[4096]; 108 extern const int IsBufferMenu; 109 WSHDR *wsBuffer; //буффер cообщений 110 111 int develop_by_unlock = 0;// показать контакт лист после разблокировки 112 #ifdef GUI_INTERFACE 113 int ShowLoadScreen=1; 114 115 static GUIMENU *clistm;//contact list 116 117 char on_off_buf[128]; //буфер для подключенных/отключенных контактов 118 int on_off_timer = 0; //таймер показа попап сообщения 119 120 /* 121 * Функция: ClrOnOffBuffer 122 * Описание: Очищаем буфер 123 * Параметры: Никаких 124 * Возвращаемое значение: Ничего не возвращает 125 */ \ In segment CODE, align 4, keep-with-next 126 int ClrOnOffBuffer() 127 { 128 int retval = 0; 129 if(on_off_timer > 0) \ ClrOnOffBuffer: \ 00000000 ........ LDR R2,??DataTable22 ;; popup \ 00000004 00402DE9 PUSH {LR} \ 00000008 501392E5 LDR R1,[R2, #+848] \ 0000000C 0000A0E3 MOV R0,#+0 \ 00000010 010051E3 CMP R1,#+1 \ 00000014 0080BDB8 POPLT {PC} 130 { 131 on_off_timer = 0; \ 00000018 500382E5 STR R0,[R2, #+848] 132 zeromem(on_off_buf,sizeof(on_off_buf)); \ 0000001C 8010A0E3 MOV R1,#+128 \ 00000020 0800A0E3 MOV R0,#+8 \ 00000024 5C0D80E3 ORR R0,R0,#0x1700 \ 00000028 020080E0 ADD R0,R0,R2 \ 0000002C 1D0100EF SWI +285 133 retval = 1; \ 00000030 0100A0E3 MOV R0,#+1 134 } 135 return retval; \ 00000034 0080BDE8 POP {PC} ;; return 136 } 137 138 139 int online_contact;//кол-во онлайн 140 int total_contact;//общее кол-во контактов в списке 141 142 int isonline; \ In segment DATA_Z, align 4, align-sorted 143 void *canvasdata; \ canvasdata: \ 00000000 DS8 4 144 145 int DoRefreshCL=0;//Если нада обновить КЛ \ In segment CODE, align 4, keep-with-next 146 void RefreshCL() 147 { 148 DoRefreshCL=1; \ RefreshCL: \ 00000000 08009FE5 LDR R0,??RefreshCL_0 ;; popup + 864 \ 00000004 0110A0E3 MOV R1,#+1 \ 00000008 001080E5 STR R1,[R0, #+0] 149 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??RefreshCL_0: \ 00000010 ........ DC32 popup + 864 150 151 #endif 152 153 int CountMessage[2];//кол-во сообщений,отправленных и принятых 154 int blocked_spam = 0;//кол-во блокированных спамов 155 156 int LongPressTimer=0;//таймер для лонг пресс действия,чтоб была задержка при удержании кнопки 157 158 char prmsg[256];//вывод попап сообщения в контакт листе 159 int PrintTimer=0;//время попап,секунды 160 161 162 /* 163 * Функция: PrintMessage 164 * Описание: Выводить сообщение в контакт листе 165 * Параметры: 166 * char *s - сообщение 167 * int sec - сколько секунд показывать сообщение до его закрытия 168 * Возвращаемое значение: Ничего не возвращает 169 */ \ In segment CODE, align 4, keep-with-next 170 void PrintMessage(char *s,int sec) 171 { \ PrintMessage: \ 00000000 30402DE9 PUSH {R4,R5,LR} 172 #ifdef GUI_INTERFACE 173 strcpy(prmsg,s); \ 00000004 ........ LDR R5,??DataTable22 ;; popup \ 00000008 0140A0E1 MOV R4,R1 \ 0000000C 0010A0E1 MOV R1,R0 \ 00000010 E800A0E3 MOV R0,#+232 \ 00000014 500E80E3 ORR R0,R0,#0x500 \ 00000018 050080E0 ADD R0,R0,R5 \ 0000001C 1A0000EF SWI +26 174 PrintTimer = sec; \ 00000020 6C4385E5 STR R4,[R5, #+876] 175 #else 176 LockSched(); 177 ShowMSG(1,(int)s); 178 UnlockSched(); 179 #endif 180 } \ 00000024 3080BDE8 POP {R4,R5,PC} ;; return 181 182 /* 183 * Функция: ClrPrintMess 184 * Описание: Очистить буфер и такймер сообщения 185 * Параметры: Никаких 186 * Возвращаемое значение: Ничего не возвращает 187 */ \ In segment CODE, align 4, keep-with-next 188 int ClrPrintMess() 189 { \ ClrPrintMess: \ 00000000 70402DE9 PUSH {R4-R6,LR} 190 int retval=0; 191 if(PrintTimer > 0 && strlen(prmsg)) \ 00000004 ........ LDR R5,??DataTable22 ;; popup \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C 6C0395E5 LDR R0,[R5, #+876] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 0C0000BA BLT ??ClrPrintMess_0 \ 00000018 E860A0E3 MOV R6,#+232 \ 0000001C 506E86E3 ORR R6,R6,#0x500 \ 00000020 050086E0 ADD R0,R6,R5 \ 00000024 1B0000EF SWI +27 \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 0600000A BEQ ??ClrPrintMess_0 192 { 193 PrintTimer=0; \ 00000030 0000A0E3 MOV R0,#+0 \ 00000034 6C0385E5 STR R0,[R5, #+876] 194 LongPressTimer=0; \ 00000038 680385E5 STR R0,[R5, #+872] 195 zeromem(prmsg,256); \ 0000003C 401FA0E3 MOV R1,#+256 \ 00000040 050086E0 ADD R0,R6,R5 \ 00000044 1D0100EF SWI +285 196 retval=1; \ 00000048 0140A0E3 MOV R4,#+1 197 } 198 return retval; \ ??ClrPrintMess_0: \ 0000004C 0400A0E1 MOV R0,R4 \ 00000050 7080BDE8 POP {R4-R6,PC} ;; return 199 } 200 201 WSHDR *ews; 202 203 extern const unsigned int UIN; 204 extern const char PASS[]; 205 206 //static const char * const icons_names[TOTAL_ICONS]= 207 const char *icons_names[TOTAL_ICONS]= 208 { 209 "offline.png", 210 "invisible.png", 211 "away.png", 212 "na.png", 213 "occupied.png", 214 "dnd.png", 215 "depression.png", 216 "evil.png", 217 "home.png", 218 "lunch.png", 219 "work.png", 220 "online.png", 221 "ffc.png", 222 "message.png", 223 "unknown.png", 224 "groupon.png", 225 "groupoff.png", 226 "null.png", 227 "addcont.png", 228 "head.png", 229 "logo.png", 230 "ping.png", 231 "settings.png", 232 "vis1.png", 233 "vis2.png", 234 "vis3.png", 235 "vis4.png", 236 "vis5.png", 237 "check.png", 238 "uncheck.png", 239 "bg.png" 240 }; 241 242 extern const char ICON_PATH[]; 243 244 \ In segment CODE, align 4, keep-with-next 245 void setup_ICONS(void) 246 { \ setup_ICONS: \ 00000000 30402DE9 PUSH {R4,R5,LR} 247 int i=0; \ 00000004 0040A0E3 MOV R4,#+0 248 do 249 { 250 if (!S_ICONS[i]) S_ICONS[i]=(int)MakeGlobalString(ICON_PATH,'\\',icons_names[i]); \ ??setup_ICONS_0: \ 00000008 ........ LDR R0,??DataTable22 ;; popup \ 0000000C 045180E0 ADD R5,R0,R4, LSL #+2 \ 00000010 380295E5 LDR R0,[R5, #+568] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0400001A BNE ??setup_ICONS_1 \ 0000001C 1C009FE5 LDR R0,??setup_ICONS_2 ;; ICON_PATH \ 00000020 742395E5 LDR R2,[R5, #+884] \ 00000024 5C10A0E3 MOV R1,#+92 \ 00000028 ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 0000002C 380285E5 STR R0,[R5, #+568] 251 i++; \ ??setup_ICONS_1: \ 00000030 014084E2 ADD R4,R4,#+1 252 } 253 while(i` \ 0000000C 9800A0E3 MOV R0,#+152 \ 00000010 640D80E3 ORR R0,R0,#0x1900 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 400080E3 ORR R0,R0,#0x40 \ 0000001C 046080E0 ADD R6,R0,R4 \ 00000020 ........ LDR R0,??DataTable18 ;; AUTO_ENGADE \ 00000024 08D04DE2 SUB SP,SP,#+8 \ 00000028 007090E5 LDR R7,[R0, #+0] \ 0000002C 080494E5 LDR R0,[R4, #+1032] \ 00000030 0C10A0E3 MOV R1,#+12 \ 00000034 910702E0 MUL R2,R1,R7 \ 00000038 020050E1 CMP R0,R2 \ 0000003C 1A00001A BNE ??away_timer_0 478 { 479 GetDateTime(NULL,&tt); \ 00000040 0D10A0E1 MOV R1,SP \ 00000044 0000A0E3 MOV R0,#+0 \ 00000048 B40000EF SWI +180 480 sprintf(away_msg_time_dace, "%02d:%02d", tt.hour, tt.min); \ 0000004C 0130DDE5 LDRB R3,[SP, #+1] \ 00000050 0020DDE5 LDRB R2,[SP, #+0] \ 00000054 0810A0E1 MOV R1,R8 \ 00000058 0600A0E1 MOV R0,R6 \ 0000005C 160000EF SWI +22 481 sprintf(away_msg_time, "Отсутствую примерно с %02d:%02d",tt.hour, tt.min/*,((AUTO_ENGADE) + (msg_away_timer*5)/60) */); \ 00000060 0130DDE5 LDRB R3,[SP, #+1] \ 00000064 0020DDE5 LDRB R2,[SP, #+0] \ 00000068 0C1088E2 ADD R1,R8,#+12 \ 0000006C 0500A0E1 MOV R0,R5 \ 00000070 160000EF SWI +22 482 away_m=1; 483 484 if(CurrentStatus!=2 && CurrentStatus!=isAutoStatusOn) \ 00000074 FC0394E5 LDR R0,[R4, #+1020] \ 00000078 0190A0E3 MOV R9,#+1 \ 0000007C 0C9484E5 STR R9,[R4, #+1036] \ 00000080 020050E3 CMP R0,#+2 \ 00000084 0800000A BEQ ??away_timer_0 \ 00000088 DC109FE5 LDR R1,??away_timer_1 ;; isAutoStatusOn \ 0000008C 001091E5 LDR R1,[R1, #+0] \ 00000090 010050E1 CMP R0,R1 \ 00000094 0400000A BEQ ??away_timer_0 485 { 486 status_rem=CurrentStatus; \ 00000098 100484E5 STR R0,[R4, #+1040] 487 CurrentStatus=2; \ 0000009C 0200A0E3 MOV R0,#+2 \ 000000A0 FC0384E5 STR R0,[R4, #+1020] 488 set_my_status(); \ 000000A4 ........ BL set_my_status 489 change_back_status=1; \ 000000A8 149484E5 STR R9,[R4, #+1044] 490 } 491 } 492 493 if( (IsOnNAStatus) && (msg_away_timer==(AUTO_ENGADE*12)+(NAStatusTime*12)) )//Переключение на недоступен,в минутах \ ??away_timer_0: \ 000000AC BC009FE5 LDR R0,??away_timer_1+0x4 ;; IsOnNAStatus \ 000000B0 000090E5 LDR R0,[R0, #+0] \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 1A00000A BEQ ??away_timer_2 \ 000000BC B0109FE5 LDR R1,??away_timer_1+0x8 ;; NAStatusTime \ 000000C0 080494E5 LDR R0,[R4, #+1032] \ 000000C4 001091E5 LDR R1,[R1, #+0] \ 000000C8 0C20A0E3 MOV R2,#+12 \ 000000CC 071081E0 ADD R1,R1,R7 \ 000000D0 920101E0 MUL R1,R2,R1 \ 000000D4 010050E1 CMP R0,R1 \ 000000D8 1200001A BNE ??away_timer_2 494 { 495 GetDateTime(NULL,&tt); \ 000000DC 0D10A0E1 MOV R1,SP \ 000000E0 0000A0E3 MOV R0,#+0 \ 000000E4 B40000EF SWI +180 496 sprintf(away_msg_time_dace, "%02d:%02d", tt.hour, tt.min); \ 000000E8 0130DDE5 LDRB R3,[SP, #+1] \ 000000EC 0020DDE5 LDRB R2,[SP, #+0] \ 000000F0 0810A0E1 MOV R1,R8 \ 000000F4 0600A0E1 MOV R0,R6 \ 000000F8 160000EF SWI +22 497 sprintf(away_msg_time, "Недоступен примерно с %02d:%02d",tt.hour, tt.min/*,((AUTO_ENGADE) + (NAStatusTime) + (msg_away_timer*5)/60)*/); \ 000000FC 0130DDE5 LDRB R3,[SP, #+1] \ 00000100 0020DDE5 LDRB R2,[SP, #+0] \ 00000104 2C1088E2 ADD R1,R8,#+44 \ 00000108 0500A0E1 MOV R0,R5 \ 0000010C 160000EF SWI +22 498 if(CurrentStatus != 3) \ 00000110 FC0394E5 LDR R0,[R4, #+1020] \ 00000114 030050E3 CMP R0,#+3 \ 00000118 0200000A BEQ ??away_timer_2 499 { 500 CurrentStatus = 3; \ 0000011C 0300A0E3 MOV R0,#+3 \ 00000120 FC0384E5 STR R0,[R4, #+1020] 501 set_my_status(); \ 00000124 ........ BL set_my_status 502 } 503 } 504 505 if(Auto_Status && connect_state == 3) msg_away_timer++; \ ??away_timer_2: \ 00000128 ........ LDR R0,??DataTable9 ;; Auto_Status \ 0000012C 000090E5 LDR R0,[R0, #+0] \ 00000130 000050E3 CMP R0,#+0 \ 00000134 0400000A BEQ ??away_timer_3 \ 00000138 340494E5 LDR R0,[R4, #+1076] \ 0000013C 030050E3 CMP R0,#+3 \ 00000140 08049405 LDREQ R0,[R4, #+1032] \ 00000144 01008002 ADDEQ R0,R0,#+1 \ 00000148 08048405 STREQ R0,[R4, #+1032] 506 GBS_StartTimerProc(&away_tmr, 216*5, away_timer); \ ??away_timer_3: \ 0000014C 24209FE5 LDR R2,??away_timer_1+0xC ;; away_timer \ 00000150 3810A0E3 MOV R1,#+56 \ 00000154 401E81E3 ORR R1,R1,#0x400 \ 00000158 E800A0E3 MOV R0,#+232 \ 0000015C 640D80E3 ORR R0,R0,#0x1900 \ 00000160 040080E0 ADD R0,R0,R4 \ 00000164 4D0000EF SWI +77 507 } \ 00000168 F383BDE8 POP {R0,R1,R4-R9,PC} ;; return \ ??away_timer_1: \ 0000016C ........ DC32 isAutoStatusOn \ 00000170 ........ DC32 IsOnNAStatus \ 00000174 ........ DC32 NAStatusTime \ 00000178 ........ DC32 away_timer 508 509 510 511 //----------------------- reminder timer ------------------------// 512 513 514 GBSTMR remind_tmr; 515 void Reminder_timer(); 516 int double_on; 517 518 /* 519 * Функция: Remind & Reminder_timer 520 * Описание: При включенной опции "Напоминание" дергает виброй при не отвеченных сообщениях с интервалом в 30 сек. 521 * Параметры: Никаких 522 * Возвращаемое значение: Ничего не возвращает 523 */ 524 \ In segment CODE, align 4, keep-with-next 525 void Remind() 526 { \ Remind: \ 00000000 10402DE9 PUSH {R4,LR} 527 double_on = 0; \ 00000004 ........ LDR R4,??DataTable22 ;; popup \ 00000008 0000A0E3 MOV R0,#+0 \ 0000000C 180484E5 STR R0,[R4, #+1048] 528 if(total_unread && Is_Double_Vibra_On) \ 00000010 380394E5 LDR R0,[R4, #+824] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 18039415 LDRNE R0,[R4, #+792] \ 0000001C 00005013 CMPNE R0,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} 529 { 530 vibra_count = 2; \ 00000024 0200A0E3 MOV R0,#+2 \ 00000028 140384E5 STR R0,[R4, #+788] 531 double_on = 1; \ 0000002C 0100A0E3 MOV R0,#+1 \ 00000030 180484E5 STR R0,[R4, #+1048] 532 start_vibra(); \ 00000034 ........ BL start_vibra 533 GBS_StartTimerProc(&remind_tmr, 216*30, Remind); \ 00000038 ........ LDR R2,??DataTable13 ;; Remind \ 0000003C 5010A0E3 MOV R1,#+80 \ 00000040 641D81E3 ORR R1,R1,#0x1900 \ 00000044 A80081E3 ORR R0,R1,#0xA8 \ 00000048 040080E0 ADD R0,R0,R4 \ 0000004C 4D0000EF SWI +77 534 } 535 } \ 00000050 1080BDE8 POP {R4,PC} ;; return 536 \ In segment CODE, align 4, keep-with-next 537 void Reminder_timer() 538 { 539 double_on = 0; \ Reminder_timer: \ 00000000 ........ LDR R0,??DataTable22 ;; popup 540 GBS_StartTimerProc(&remind_tmr, 216*30, Remind); \ 00000004 ........ LDR R2,??DataTable13 ;; Remind \ 00000008 00402DE9 PUSH {LR} \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 181480E5 STR R1,[R0, #+1048] \ 00000014 5010A0E3 MOV R1,#+80 \ 00000018 641D81E3 ORR R1,R1,#0x1900 \ 0000001C A83081E3 ORR R3,R1,#0xA8 \ 00000020 000083E0 ADD R0,R3,R0 \ 00000024 4D0000EF SWI +77 541 } \ 00000028 0080BDE8 POP {PC} ;; return 542 543 544 //---------------------- uptime -----------------------// 545 546 TTime uptime; 547 548 /* 549 * Функция: UpTime 550 * Описание: Время проведенное в онлайн 551 * Параметры: Никаких 552 * Возвращаемое значение: Ничего не возвращает 553 */ \ In segment CODE, align 4, keep-with-next 554 void UpTime() 555 { 556 if(connect_state==3) \ UpTime: \ 00000000 ........ LDR R1,??DataTable22 ;; popup \ 00000004 30002DE9 PUSH {R4,R5} \ 00000008 344491E5 LDR R4,[R1, #+1076] \ 0000000C E100A0E3 MOV R0,#+225 \ 00000010 400E80E3 ORR R0,R0,#0x400 \ 00000014 0120D0E7 LDRB R2,[R0, +R1] \ 00000018 013080E2 ADD R3,R0,#+1 \ 0000001C 01C0D3E7 LDRB R12,[R3, +R1] \ 00000020 030054E3 CMP R4,#+3 \ 00000024 0C00001A BNE ??UpTime_0 557 { 558 uptime.sec++; \ 00000028 01C08CE2 ADD R12,R12,#+1 559 if(uptime.sec==60) \ 0000002C FFC00CE2 AND R12,R12,#0xFF \ 00000030 3C005CE3 CMP R12,#+60 560 { 561 uptime.sec=0; \ 00000034 00C0A003 MOVEQ R12,#+0 562 uptime.min++; \ 00000038 01208202 ADDEQ R2,R2,#+1 563 } 564 if(uptime.min==60) \ 0000003C FF2002E2 AND R2,R2,#0xFF \ 00000040 3C0052E3 CMP R2,#+60 \ 00000044 0400001A BNE ??UpTime_0 565 { 566 uptime.min=0; 567 uptime.hour++; \ 00000048 4E4EA0E3 MOV R4,#+1248 \ 0000004C 0150D4E7 LDRB R5,[R4, +R1] \ 00000050 0020A0E3 MOV R2,#+0 \ 00000054 015085E2 ADD R5,R5,#+1 \ 00000058 0150C4E7 STRB R5,[R4, +R1] \ ??UpTime_0: \ 0000005C 01C0C3E7 STRB R12,[R3, +R1] \ 00000060 0120C0E7 STRB R2,[R0, +R1] 568 } 569 } 570 } \ 00000064 3000BDE8 POP {R4,R5} \ 00000068 1EFF2FE1 BX LR ;; return 571 572 573 char ContactT9Key[32]; 574 575 /* 576 * Функция: LongPressActionOnChat 577 * Описание: Запускает действие в контакт листе по длинному нажатию клавиши 578 * Параметры: 579 * CLIST *t - Структура контакт листа 580 * int i - номер действия 581 * Возвращаемое значение: Возвращает 0 582 */ \ In segment CODE, align 4, keep-with-next 583 int LongPressActionOnChat(CLIST *t,int i) 584 { \ LongPressActionOnChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 585 switch(i) \ 00000004 ........ LDR R7,??DataTable15 ;; WriteDefSettings \ 00000008 ........ LDR R9,??DataTable16 ;; Canvas \ 0000000C ........ LDR R5,??DataTable22 ;; popup \ 00000010 04D04DE2 SUB SP,SP,#+4 \ 00000014 B4BFA0E3 MOV R11,#+720 \ 00000018 E880A0E3 MOV R8,#+232 \ 0000001C 608E88E3 ORR R8,R8,#0x600 \ 00000020 0160A0E3 MOV R6,#+1 \ 00000024 404F48E2 SUB R4,R8,#+256 \ 00000028 00A0A0E3 MOV R10,#+0 \ 0000002C 011041E2 SUB R1,R1,#+1 \ 00000030 0C0051E3 CMP R1,#+12 \ 00000034 CD00008A BHI ??LongPressActionOnChat_1 \ 00000038 012F8FE2 ADR R2,??LongPressActionOnChat_0 \ 0000003C 0120D2E7 LDRB R2,[R2, R1] \ 00000040 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??LongPressActionOnChat_0: \ 00000044 03111F32 DC8 +3,+17,+31,+50 \ 00000048 3D556A79 DC8 +61,+85,+106,+121 \ 0000004C 899DB8C1 DC8 +137,+157,+184,+193 \ 00000050 C7000000 DC8 +199,+0,+0,+0 586 { 587 case 1: 588 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??LongPressActionOnChat_2: \ 00000054 200395E5 LDR R0,[R5, #+800] \ 00000058 000050E3 CMP R0,#+0 \ 0000005C 0060A013 MOVNE R6,#+0 \ 00000060 206385E5 STR R6,[R5, #+800] 589 PrintMessage(Is_Sounds_Enabled?"Sound 0n":"Sound Off",3); \ 00000064 000056E3 CMP R6,#+0 \ 00000068 14108912 ADDNE R1,R9,#+20 \ 0000006C 20108902 ADDEQ R1,R9,#+32 \ 00000070 050084E0 ADD R0,R4,R5 \ 00000074 1A0000EF SWI +26 \ 00000078 0300A0E3 MOV R0,#+3 \ 0000007C 6C0385E5 STR R0,[R5, #+876] 590 SUBPROC((void*)WriteDefSettings); \ 00000080 0700A0E1 MOV R0,R7 \ 00000084 710100EF SWI +369 \ 00000088 1E0000EA B ??LongPressActionOnChat_3 591 break; 592 case 2: 593 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??LongPressActionOnChat_4: \ 0000008C 1C0395E5 LDR R0,[R5, #+796] \ 00000090 000050E3 CMP R0,#+0 \ 00000094 0060A013 MOVNE R6,#+0 \ 00000098 1C6385E5 STR R6,[R5, #+796] 594 SUBPROC((void*)WriteDefSettings); \ 0000009C 0700A0E1 MOV R0,R7 \ 000000A0 710100EF SWI +369 595 PrintMessage(Is_Vibra_Enabled?"Vibra On":"Vibra Off",3); \ 000000A4 1C0395E5 LDR R0,[R5, #+796] \ 000000A8 000050E3 CMP R0,#+0 \ 000000AC 2C108912 ADDNE R1,R9,#+44 \ 000000B0 38108902 ADDEQ R1,R9,#+56 \ ??LongPressActionOnChat_5: \ 000000B4 050084E0 ADD R0,R4,R5 \ 000000B8 1A0000EF SWI +26 \ 000000BC 0300A0E3 MOV R0,#+3 \ ??LongPressActionOnChat_6: \ 000000C0 0F0000EA B ??LongPressActionOnChat_7 596 break; 597 case 3: 598 if(CurrentPrivateStatus!=/*1*/2) \ ??LongPressActionOnChat_8: \ 000000C4 040495E5 LDR R0,[R5, #+1028] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC 0600000A BEQ ??LongPressActionOnChat_9 599 { 600 SetPrivateStatus(2/*1*/);//Инвиз \ 000000D0 0200A0E3 MOV R0,#+2 \ 000000D4 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 601 PrintMessage("Инвиз включен",2); \ 000000D8 441089E2 ADD R1,R9,#+68 \ 000000DC 050084E0 ADD R0,R4,R5 \ 000000E0 1A0000EF SWI +26 \ 000000E4 0200A0E3 MOV R0,#+2 \ 000000E8 050000EA B ??LongPressActionOnChat_7 602 } 603 else 604 { 605 SetPrivateStatus(3); \ ??LongPressActionOnChat_9: \ 000000EC 0300A0E3 MOV R0,#+3 \ 000000F0 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 606 PrintMessage("Инвиз выключен",2); \ 000000F4 541089E2 ADD R1,R9,#+84 \ ??LongPressActionOnChat_10: \ 000000F8 050084E0 ADD R0,R4,R5 \ 000000FC 1A0000EF SWI +26 \ 00000100 0200A0E3 MOV R0,#+2 \ ??LongPressActionOnChat_7: \ 00000104 6C0385E5 STR R0,[R5, #+876] \ ??LongPressActionOnChat_3: \ 00000108 0000A0E3 MOV R0,#+0 \ 0000010C F28FBDE8 POP {R1,R4-R11,PC} 607 } 608 break; 609 case 4: 610 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??LongPressActionOnChat_11: \ 00000110 180395E5 LDR R0,[R5, #+792] \ 00000114 000050E3 CMP R0,#+0 \ 00000118 0060A013 MOVNE R6,#+0 \ 0000011C 186385E5 STR R6,[R5, #+792] 611 SUBPROC((void*)WriteDefSettings); \ 00000120 0700A0E1 MOV R0,R7 \ 00000124 710100EF SWI +369 612 PrintMessage(Is_Double_Vibra_On?"Vibra rem On":"Vibra rem Off",3); \ 00000128 180395E5 LDR R0,[R5, #+792] \ 0000012C 000050E3 CMP R0,#+0 \ 00000130 64108912 ADDNE R1,R9,#+100 \ 00000134 74108902 ADDEQ R1,R9,#+116 \ 00000138 DDFFFFEA B ??LongPressActionOnChat_5 613 break; 614 case 5: 615 { 616 CLIST *cl; 617 cl=(CLIST *)(&cltop); \ ??LongPressActionOnChat_12: \ 0000013C C06F85E2 ADD R6,R5,#+768 \ 00000140 060000EA B ??LongPressActionOnChat_13 618 while(cl=(CLIST *)(cl->next)) 619 { 620 if(cl->log) \ ??LongPressActionOnChat_14: \ 00000144 680096E5 LDR R0,[R6, #+104] \ 00000148 000050E3 CMP R0,#+0 \ 0000014C 0300000A BEQ ??LongPressActionOnChat_13 621 { 622 FreeLOGQ(&cl->log); \ 00000150 680086E2 ADD R0,R6,#+104 \ 00000154 ........ BL FreeLOGQ 623 cl->msg_count=0; \ 00000158 78A086E5 STR R10,[R6, #+120] 624 cl->isactive=0; \ 0000015C 74A086E5 STR R10,[R6, #+116] 625 } 626 } \ ??LongPressActionOnChat_13: \ 00000160 006096E5 LDR R6,[R6, #+0] \ 00000164 000056E3 CMP R6,#+0 \ 00000168 F5FFFF1A BNE ??LongPressActionOnChat_14 627 if(strlen(ContactT9Key)) ClearContactT9Key(); \ 0000016C 050088E0 ADD R0,R8,R5 \ 00000170 1B0000EF SWI +27 \ 00000174 000050E3 CMP R0,#+0 \ 00000178 0200000A BEQ ??LongPressActionOnChat_15 \ 0000017C 2010A0E3 MOV R1,#+32 \ 00000180 050088E0 ADD R0,R8,R5 \ 00000184 1D0100EF SWI +285 628 RecountMenu(NULL,1); \ ??LongPressActionOnChat_15: \ 00000188 0110A0E3 MOV R1,#+1 \ 0000018C 0000A0E3 MOV R0,#+0 \ 00000190 ........ BL RecountMenu 629 PrintMessage("All chat clear!",2); \ 00000194 841089E2 ADD R1,R9,#+132 \ 00000198 D6FFFFEA B ??LongPressActionOnChat_10 630 break; 631 } 632 case 6: 633 if(!away_m) \ ??LongPressActionOnChat_16: \ 0000019C 0C0495E5 LDR R0,[R5, #+1036] \ 000001A0 000050E3 CMP R0,#+0 \ 000001A4 0700001A BNE ??LongPressActionOnChat_17 634 { 635 away_m=!away_m; \ 000001A8 0C6485E5 STR R6,[R5, #+1036] 636 GBS_StopTimer(&away_tmr); \ 000001AC 500D84E2 ADD R0,R4,#+5120 \ 000001B0 050080E0 ADD R0,R0,R5 \ 000001B4 440100EF SWI +324 637 msg_away_timer=AUTO_ENGADE; \ 000001B8 ........ LDR R0,??DataTable18 ;; AUTO_ENGADE \ 000001BC 000090E5 LDR R0,[R0, #+0] \ 000001C0 080485E5 STR R0,[R5, #+1032] \ 000001C4 CFFFFFEA B ??LongPressActionOnChat_3 638 } 639 else 640 { 641 msg_away_timer=0; 642 away_m=!away_m; 643 if(change_back_status) \ ??LongPressActionOnChat_17: \ 000001C8 140495E5 LDR R0,[R5, #+1044] \ 000001CC 08A485E5 STR R10,[R5, #+1032] \ 000001D0 0CA485E5 STR R10,[R5, #+1036] \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 F28FBD08 POPEQ {R1,R4-R11,PC} 644 { 645 CurrentStatus=status_rem; \ 000001DC 100495E5 LDR R0,[R5, #+1040] \ 000001E0 FC0385E5 STR R0,[R5, #+1020] 646 set_my_status(); \ 000001E4 ........ BL set_my_status 647 change_back_status=0; \ 000001E8 14A485E5 STR R10,[R5, #+1044] \ 000001EC C5FFFFEA B ??LongPressActionOnChat_3 648 } 649 } 650 break; 651 case 7: 652 { 653 WSHDR *ws; 654 ws=AllocWS(150); \ ??LongPressActionOnChat_18: \ 000001F0 9600A0E3 MOV R0,#+150 \ 000001F4 250100EF SWI +293 \ 000001F8 0040A0E1 MOV R4,R0 655 str_2ws(ws,successed_config_filename,128); \ 000001FC ........ LDR R0,??DataTable19 ;; successed_config_filename \ 00000200 8020A0E3 MOV R2,#+128 \ 00000204 001090E5 LDR R1,[R0, #+0] \ 00000208 0400A0E1 MOV R0,R4 \ 0000020C 6C0100EF SWI +364 656 ExecuteFile(ws,0,0); \ 00000210 0020A0E3 MOV R2,#+0 \ 00000214 0210A0E1 MOV R1,R2 \ 00000218 0400A0E1 MOV R0,R4 \ 0000021C 940000EF SWI +148 657 FreeWS(ws); \ 00000220 0400A0E1 MOV R0,R4 \ 00000224 290100EF SWI +297 \ 00000228 B6FFFFEA B ??LongPressActionOnChat_3 658 } 659 break; 660 case 8://ping 661 { 662 TPKT *p; 663 p=malloc(sizeof(PKT)+sizeof(TTime)); \ ??LongPressActionOnChat_19: \ 0000022C 1000A0E3 MOV R0,#+16 \ 00000230 140000EF SWI +20 \ 00000234 0040A0E1 MOV R4,R0 664 GetDateTime(NULL,(TTime *)p->data); \ 00000238 081084E2 ADD R1,R4,#+8 \ 0000023C 0000A0E3 MOV R0,#+0 \ 00000240 B40000EF SWI +180 665 p->pkt.uin=0; \ 00000244 00A084E5 STR R10,[R4, #+0] 666 p->pkt.type=T_ECHO; \ 00000248 1200A0E3 MOV R0,#+18 \ 0000024C B400C4E1 STRH R0,[R4, #+4] 667 p->pkt.data_len=sizeof(TTime); \ 00000250 0800A0E3 MOV R0,#+8 \ 00000254 B600C4E1 STRH R0,[R4, #+6] 668 SUBPROC((void *)SendAnswer,0,p); \ 00000258 ........ LDR R0,??DataTable20 ;; SendAnswer \ 0000025C 0420A0E1 MOV R2,R4 \ 00000260 0A10A0E1 MOV R1,R10 \ 00000264 710100EF SWI +369 \ 00000268 A6FFFFEA B ??LongPressActionOnChat_3 669 } 670 break; 671 case 9://go to idle 672 { 673 ClearContactT9Key(); \ ??LongPressActionOnChat_20: \ 0000026C 2010A0E3 MOV R1,#+32 \ 00000270 050088E0 ADD R0,R8,R5 \ 00000274 1D0100EF SWI +285 674 RecountMenu(NULL,1); \ 00000278 0110A0E3 MOV R1,#+1 \ 0000027C 0A00A0E1 MOV R0,R10 \ 00000280 ........ BL RecountMenu 675 silenthide=1; \ 00000284 F46385E5 STR R6,[R5, #+1012] 676 gipc.name_to=ipc_xtask_name; \ 00000288 A30F89E2 ADD R0,R9,#+652 \ 0000028C 05008BE7 STR R0,[R11, +R5] 677 gipc.name_from=ipc_my_name; \ 00000290 9B0F89E2 ADD R0,R9,#+620 \ 00000294 D40285E5 STR R0,[R5, #+724] 678 gipc.data=0; \ 00000298 D8A285E5 STR R10,[R5, #+728] 679 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 0000029C 05308BE0 ADD R3,R11,R5 \ 000002A0 0620A0E1 MOV R2,R6 \ 000002A4 F210A0E3 MOV R1,#+242 \ 000002A8 C01F81E3 ORR R1,R1,#0x300 \ 000002AC 0900A0E3 MOV R0,#+9 \ 000002B0 420C80E3 ORR R0,R0,#0x4200 \ 000002B4 000100EF SWI +256 \ 000002B8 92FFFFEA B ??LongPressActionOnChat_3 680 } 681 break; 682 case 10://hide & lock 683 { 684 if(DEVELOP_IF == 3) develop_by_unlock = 1;//залочили клаву и поставили флаг 6.11.2009 \ ??LongPressActionOnChat_21: \ 000002BC ........ LDR R0,??DataTable21 ;; DEVELOP_IF 685 686 ClearContactT9Key(); \ 000002C0 2010A0E3 MOV R1,#+32 \ 000002C4 000090E5 LDR R0,[R0, #+0] \ 000002C8 030050E3 CMP R0,#+3 \ 000002CC 44638505 STREQ R6,[R5, #+836] \ 000002D0 050088E0 ADD R0,R8,R5 \ 000002D4 1D0100EF SWI +285 687 RecountMenu(NULL,1); \ 000002D8 0110A0E3 MOV R1,#+1 \ 000002DC 0A00A0E1 MOV R0,R10 \ 000002E0 ........ BL RecountMenu 688 gipc.name_to=ipc_xtask_name; \ 000002E4 A30F89E2 ADD R0,R9,#+652 \ 000002E8 05008BE7 STR R0,[R11, +R5] 689 gipc.name_from=ipc_my_name; \ 000002EC 9B0F89E2 ADD R0,R9,#+620 \ 000002F0 D40285E5 STR R0,[R5, #+724] 690 gipc.data=0; \ 000002F4 D8A285E5 STR R10,[R5, #+728] 691 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 000002F8 05308BE0 ADD R3,R11,R5 \ 000002FC 0620A0E1 MOV R2,R6 \ 00000300 F210A0E3 MOV R1,#+242 \ 00000304 C01F81E3 ORR R1,R1,#0x300 \ 00000308 0900A0E3 MOV R0,#+9 \ 0000030C 420C80E3 ORR R0,R0,#0x4200 \ 00000310 000100EF SWI +256 692 if (IsUnlocked()) \ 00000314 430000EF SWI +67 \ 00000318 000050E3 CMP R0,#+0 \ 0000031C F28FBD08 POPEQ {R1,R4-R11,PC} 693 { 694 KbdLock(); \ 00000320 A90000EF SWI +169 \ 00000324 77FFFFEA B ??LongPressActionOnChat_3 695 } 696 } 697 break; 698 case 11: //offline contacts 699 { 700 extern void ChangeShowOfflineMode(void); 701 ChangeShowOfflineMode(); \ ??LongPressActionOnChat_22: \ 00000328 ........ _BLF ChangeShowOfflineMode,??ChangeShowOfflineMode??rA 702 PrintMessage(Is_Show_Offline?"Оффлайн контакты\nвключены":"Оффлайн контакты\nотключены",1); \ 0000032C 240395E5 LDR R0,[R5, #+804] \ 00000330 000050E3 CMP R0,#+0 \ 00000334 94108912 ADDNE R1,R9,#+148 \ 00000338 B0108902 ADDEQ R1,R9,#+176 \ ??LongPressActionOnChat_23: \ 0000033C 050084E0 ADD R0,R4,R5 \ 00000340 1A0000EF SWI +26 \ 00000344 6C6385E5 STR R6,[R5, #+876] \ 00000348 6EFFFFEA B ??LongPressActionOnChat_3 703 } 704 break; 705 case 12: //group mode 706 { 707 extern void ChangeShowGroupsMode(void); 708 ChangeShowGroupsMode(); \ ??LongPressActionOnChat_24: \ 0000034C ........ _BLF ChangeShowGroupsMode,??ChangeShowGroupsMode??rA 709 PrintMessage(Is_Show_Groups?"Группы включены":"Группы отключены",1); \ 00000350 280395E5 LDR R0,[R5, #+808] \ 00000354 000050E3 CMP R0,#+0 \ 00000358 DC108902 ADDEQ R1,R9,#+220 \ 0000035C CC108912 ADDNE R1,R9,#+204 \ 00000360 F5FFFFEA B ??LongPressActionOnChat_23 710 } 711 break; 712 case 13: // action by * 713 { 714 int FindMessage(CLIST* ); 715 LongPressTimer=0; \ ??LongPressActionOnChat_25: \ 00000364 68A385E5 STR R10,[R5, #+872] 716 return FindMessage(t); \ 00000368 ........ BL FindMessage \ 0000036C F28FBDE8 POP {R1,R4-R11,PC} 717 } 718 //break; 719 default : LongPressTimer=0; break; \ ??LongPressActionOnChat_1: \ 00000370 68A385E5 STR R10,[R5, #+872] 720 }//switch() 721 return 0; \ 00000374 0000A0E3 MOV R0,#+0 \ 00000378 F28FBDE8 POP {R1,R4-R11,PC} ;; return 722 } 723 724 //{"Без действия","Звук","Вибра","Инвиз","Реж.напоминания","Очистить чаты","Автоответчик","Конфиг","Пинг","Заблокировать","На гэ"} 725 726 /* 727 * Функция: LongPressAction 728 * Описание: Выборка нажатой клавиши в контакт листе, и вызов назначенной на эту клавишу функции. Функция указана в конфиге. 729 * Параметры: 730 * CLIST *t - Структура контакт листа 731 * int key - нажатая клавиша 732 * Возвращаемое значение: Ничего не возвращает 733 */ \ In segment CODE, align 4, keep-with-next 734 void LongPressAction(CLIST *t,int key) 735 { 736 LongPressTimer = 2; \ LongPressAction: \ 00000000 ........ LDR R2,??DataTable22 ;; popup \ 00000004 00402DE9 PUSH {LR} \ 00000008 0230A0E3 MOV R3,#+2 \ 0000000C 683382E5 STR R3,[R2, #+872] 737 switch(key) \ 00000010 231041E2 SUB R1,R1,#+35 \ 00000014 160051E3 CMP R1,#+22 \ 00000018 2400008A BHI ??LongPressAction_1 \ 0000001C 013F8FE2 ADR R3,??LongPressAction_0 \ 00000020 0130D3E7 LDRB R3,[R3, R1] \ 00000024 03F18FE0 ADD PC,PC,R3, LSL #+2 \ ??LongPressAction_0: \ 00000028 1F212121 DC8 +31,+33,+33,+33 \ 0000002C 2121211D DC8 +33,+33,+33,+29 \ 00000030 21212121 DC8 +33,+33,+33,+33 \ 00000034 2105070B DC8 +33,+5,+7,+11 \ 00000038 0F111315 DC8 +15,+17,+19,+21 \ 0000003C 17191B00 DC8 +23,+25,+27,+0 738 { 739 case '0': LongPressActionOnChat(t,longAct_0); break; \ ??LongPressAction_2: \ 00000040 ........ LDR R1,??DataTable23 ;; longAct_0 \ 00000044 040000EA B ??LongPressAction_3 740 case '1': LongPressActionOnChat(t,longAct_1); break; \ ??LongPressAction_4: \ 00000048 ........ LDR R1,??DataTable24 ;; longAct_1 \ 0000004C 001091E5 LDR R1,[R1, #+0] \ 00000050 ........ BL LongPressActionOnChat \ 00000054 0080BDE8 POP {PC} 741 case '2': LongPressActionOnChat(t,longAct_2); break; \ ??LongPressAction_5: \ 00000058 ........ LDR R1,??DataTable25 ;; longAct_2 \ ??LongPressAction_3: \ 0000005C 001091E5 LDR R1,[R1, #+0] \ 00000060 ........ BL LongPressActionOnChat \ 00000064 0080BDE8 POP {PC} 742 case '3': LongPressActionOnChat(t,longAct_3); break; \ ??LongPressAction_6: \ 00000068 ........ LDR R1,??DataTable26 ;; longAct_3 \ 0000006C FAFFFFEA B ??LongPressAction_3 743 case '4': LongPressActionOnChat(t,longAct_4); break; \ ??LongPressAction_7: \ 00000070 ........ LDR R1,??DataTable27 ;; longAct_4 \ 00000074 F8FFFFEA B ??LongPressAction_3 744 case '5': LongPressActionOnChat(t,longAct_5); break; \ ??LongPressAction_8: \ 00000078 ........ LDR R1,??DataTable28 ;; longAct_5 \ 0000007C F6FFFFEA B ??LongPressAction_3 745 case '6': LongPressActionOnChat(t,longAct_6); break; \ ??LongPressAction_9: \ 00000080 ........ LDR R1,??DataTable29 ;; longAct_6 \ 00000084 F4FFFFEA B ??LongPressAction_3 746 case '7': LongPressActionOnChat(t,longAct_7); break; \ ??LongPressAction_10: \ 00000088 ........ LDR R1,??DataTable30 ;; longAct_7 \ 0000008C F2FFFFEA B ??LongPressAction_3 747 case '8': LongPressActionOnChat(t,longAct_8); break; \ ??LongPressAction_11: \ 00000090 ........ LDR R1,??DataTable31 ;; longAct_8 \ 00000094 F0FFFFEA B ??LongPressAction_3 748 case '9': LongPressActionOnChat(t,longAct_9); break; \ ??LongPressAction_12: \ 00000098 ........ LDR R1,??DataTable32 ;; longAct_9 \ 0000009C EEFFFFEA B ??LongPressAction_3 749 case '*': LongPressActionOnChat(t,longAct_10); break; \ ??LongPressAction_13: \ 000000A0 ........ LDR R1,??DataTable33 ;; longAct_10 \ 000000A4 ECFFFFEA B ??LongPressAction_3 750 case '#': LongPressActionOnChat(t,longAct_11); break; \ ??LongPressAction_14: \ 000000A8 ........ LDR R1,??DataTable34 ;; longAct_11 \ 000000AC EAFFFFEA B ??LongPressAction_3 751 default : LongPressTimer=0;break; \ ??LongPressAction_1: \ 000000B0 0000A0E3 MOV R0,#+0 \ 000000B4 680382E5 STR R0,[R2, #+872] 752 } 753 } \ 000000B8 0080BDE8 POP {PC} ;; return 754 755 756 757 //-------------------------------------------------------------------------------- 758 759 760 /* 761 * Функция: DrwImage 762 * Описание: Отрисовка картинки 763 * Параметры: 764 * IMGHDR *img - картинка для отрисовки 765 * int x - начальная координата Х 766 * int y - начальная координата У 767 * int rettype - возвращаемое значение 768 * Возвращаемое значение: 769 * rettype = 0 - возратить высоту у 770 * rettype = 1 - возвратить ширину Х 771 */ \ In segment CODE, align 4, keep-with-next 772 int DrwImage(IMGHDR *img, int x, int y,int rettype) 773 { \ DrwImage: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0350A0E1 MOV R5,R3 774 if(!img) return 0; \ 00000010 000054E3 CMP R4,#+0 \ 00000014 0000A003 MOVEQ R0,#+0 \ 00000018 1D00000A BEQ ??DrwImage_0 775 RECT rc; 776 DRWOBJ drwobj; 777 StoreXYWHtoRECT(&rc,x,y,img->w,img->h); \ 0000001C 0100D4E5 LDRB R0,[R4, #+1] \ 00000020 01002DE9 PUSH {R0} \ 00000024 0030D4E5 LDRB R3,[R4, #+0] \ 00000028 04008DE2 ADD R0,SP,#+4 \ 0000002C 330100EF SWI +307 778 SetPropTo_Obj5(&drwobj,&rc,0,img); \ 00000030 0430A0E1 MOV R3,R4 \ 00000034 0020A0E3 MOV R2,#+0 \ 00000038 04108DE2 ADD R1,SP,#+4 \ 0000003C 0C008DE2 ADD R0,SP,#+12 \ 00000040 510100EF SWI +337 779 SetColor(&drwobj,0,0); \ 00000044 0020A0E3 MOV R2,#+0 \ 00000048 0010A0E3 MOV R1,#+0 \ 0000004C 0C008DE2 ADD R0,SP,#+12 \ 00000050 4B0100EF SWI +331 780 DrawObject(&drwobj); \ 00000054 0C008DE2 ADD R0,SP,#+12 \ 00000058 2A0100EF SWI +298 781 return ( rettype==RET_X ? ((img->w > 32) ? 32 : img->w ) : ((img->h > ScreenH()-1) ? 1 : img->h) ); \ 0000005C 010055E3 CMP R5,#+1 \ 00000060 04D08DE2 ADD SP,SP,#+4 \ 00000064 0400001A BNE ??DrwImage_1 \ 00000068 0010D4E5 LDRB R1,[R4, #+0] \ 0000006C 210051E3 CMP R1,#+33 \ 00000070 0600003A BCC ??DrwImage_2 \ 00000074 2010A0E3 MOV R1,#+32 \ 00000078 040000EA B ??DrwImage_2 \ ??DrwImage_1: \ 0000007C 898100EF SWI +33161 \ 00000080 0110D4E5 LDRB R1,[R4, #+1] \ 00000084 010040E2 SUB R0,R0,#+1 \ 00000088 010050E1 CMP R0,R1 \ 0000008C 0110A0B3 MOVLT R1,#+1 \ ??DrwImage_2: \ 00000090 0100A0E1 MOV R0,R1 \ ??DrwImage_0: \ 00000094 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 00000098 3080BDE8 POP {R4,R5,PC} ;; return 782 } 783 784 785 786 //------------- Попап месаже для подключившегося контакта -----------// 787 788 789 typedef struct 790 { 791 char name[64]; 792 int timer; 793 GBSTMR tmr; 794 // int icon; 795 ///int xicon; 796 IMGHDR *icon; 797 IMGHDR *xicon; 798 int xiconf; 799 }POPUP; 800 801 #define POPUP_ON 0 802 #define POPUP_OFF 1 803 #define POPUP_MSG 2 804 805 #define POPUP_TMR 15 806 #define POPUP_N 20 807 808 POPUP popup[3]; 809 810 int FIRST_START = 0;//флаг,проверяющий подключание,чтобы не показывать попапы,не мигать контактами не играть звуки при первом показе кл, а то подвисает сцука 811 812 813 /* 814 * Функция: IsNoJavaRun 815 * Описание: Проверяет активно ли чейчас ява-приложение либо простой процесс 816 * Параметры: Никаких 817 * Возвращаемое значение: 818 * 0 - запущенный процесс ява 819 * 1 - запущенный процесс не ява 820 */ \ In segment CODE, align 4, keep-with-next 821 int IsNoJavaRun() 822 { \ IsNoJavaRun: \ 00000000 00402DE9 PUSH {LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 823 824 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; \ 00000008 068100EF SWI +33030 \ 0000000C 080090E5 LDR R0,[R0, #+8] 825 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000010 2C209FE5 LDR R2,??IsNoJavaRun_0 ;; `?` \ 00000014 0C0090E5 LDR R0,[R0, #+12] \ 00000018 081092E8 LDM R2,{R3,R12} \ 0000001C 080090E5 LDR R0,[R0, #+8] \ 00000020 0D10A0E1 MOV R1,SP \ 00000024 040090E5 LDR R0,[R0, #+4] \ 00000028 081081E8 STM R1,{R3,R12} \ 0000002C 010040E2 SUB R0,R0,#+1 826 if((memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8))) return 1; \ 00000030 0820A0E3 MOV R2,#+8 \ 00000034 1C0100EF SWI +284 \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 0100A013 MOVNE R0,#+1 827 return 0; \ 00000040 0680BDE8 POP {R1,R2,PC} ;; return \ ??IsNoJavaRun_0: \ 00000044 ........ DC32 `?` 828 } 829 830 831 /* 832 * Функция: show_on_contact 833 * Описание: Показывает попап с именем подключенного контакта 834 * Параметры: Никаких 835 * Возвращаемое значение: Ничего не возвращает 836 */ \ In segment CODE, align 4, keep-with-next 837 void show_on_contact() 838 { \ show_on_contact: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 839 if(FIRST_START)//Если загружаем контакт лист первый раз, то не делаем попапы \ 00000004 ........ LDR R4,??DataTable41 ;; popup \ 00000008 1C0494E5 LDR R0,[R4, #+1052] \ 0000000C 000050E3 CMP R0,#+0 840 { 841 popup[POPUP_ON].timer=0; \ 00000010 0000A013 MOVNE R0,#+0 \ 00000014 40008415 STRNE R0,[R4, #+64] 842 return; \ 00000018 F087BD18 POPNE {R4-R10,PC} 843 } 844 845 if(popup[POPUP_ON].timer > 0) \ 0000001C 400094E5 LDR R0,[R4, #+64] \ 00000020 010050E3 CMP R0,#+1 \ 00000024 F087BDB8 POPLT {R4-R10,PC} 846 { 847 /* int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; 848 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; 849 if((memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8)))*/ 850 if(IsNoJavaRun()) \ 00000028 ........ BL IsNoJavaRun \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 5000000A BEQ ??show_on_contact_0 851 { 852 WSHDR *ws=AllocWS(64); 853 ascii2ws(ws,popup[POPUP_ON].name); 854 popup[POPUP_ON].timer--; 855 856 int x=0; 857 #ifdef GUI_INTERFACE 858 if(popup[POPUP_ON].icon) x = popup[POPUP_ON].icon->w; 859 if(popup[POPUP_ON].xicon && popup[POPUP_ON].xiconf) x += popup[POPUP_ON].xicon->w; 860 #endif 861 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+x+5,GetFontYSIZE(PopupFont)+5,0,PopupOnlineCl,PopupBGCl); \ 00000034 50819FE5 LDR R8,??show_on_contact_1 ;; PopupOnlineCl \ 00000038 4000A0E3 MOV R0,#+64 \ 0000003C 250100EF SWI +293 \ 00000040 0050A0E1 MOV R5,R0 \ 00000044 0410A0E1 MOV R1,R4 \ 00000048 ........ _BLF ascii2ws,??ascii2ws??rA \ 0000004C 400094E5 LDR R0,[R4, #+64] \ 00000050 0060A0E3 MOV R6,#+0 \ 00000054 010040E2 SUB R0,R0,#+1 \ 00000058 400084E5 STR R0,[R4, #+64] \ 0000005C 540094E5 LDR R0,[R4, #+84] \ 00000060 000050E3 CMP R0,#+0 \ 00000064 0060D015 LDRBNE R6,[R0, #+0] \ 00000068 580094E5 LDR R0,[R4, #+88] \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 5C109415 LDRNE R1,[R4, #+92] \ 00000074 00005113 CMPNE R1,#+0 \ 00000078 0000D015 LDRBNE R0,[R0, #+0] \ 0000007C 06608010 ADDNE R6,R0,R6 \ 00000080 ........ LDR R0,??DataTable42 ;; PopupFont \ 00000084 007090E5 LDR R7,[R0, #+0] \ 00000088 0700A0E1 MOV R0,R7 \ 0000008C C50100EF SWI +453 \ 00000090 0090A0E1 MOV R9,R0 \ 00000094 0710A0E1 MOV R1,R7 \ 00000098 0500A0E1 MOV R0,R5 \ 0000009C 080200EF SWI +520 \ 000000A0 ........ LDR R1,??DataTable43 ;; PopupBGCl \ 000000A4 053089E2 ADD R3,R9,#+5 \ 000000A8 02002DE9 PUSH {R1} \ 000000AC 000086E0 ADD R0,R6,R0 \ 000000B0 052080E2 ADD R2,R0,#+5 \ 000000B4 0000A0E3 MOV R0,#+0 \ 000000B8 0810A0E1 MOV R1,R8 \ 000000BC 02002DE9 PUSH {R1} \ 000000C0 0010A0E3 MOV R1,#+0 \ 000000C4 02002DE9 PUSH {R1} \ 000000C8 B40100EF SWI +436 862 #ifdef GUI_INTERFACE 863 if(popup[POPUP_ON].icon) \ 000000CC 540094E5 LDR R0,[R4, #+84] \ 000000D0 0CD08DE2 ADD SP,SP,#+12 \ 000000D4 000050E3 CMP R0,#+0 \ 000000D8 0D00000A BEQ ??show_on_contact_2 864 { 865 DrwImage(popup[POPUP_ON].icon,2,3,0); \ 000000DC 0030A0E3 MOV R3,#+0 \ 000000E0 0320A0E3 MOV R2,#+3 \ 000000E4 0210A0E3 MOV R1,#+2 \ 000000E8 ........ BL DrwImage 866 if(popup[POPUP_ON].xiconf) DrwImage(popup[POPUP_ON].xicon,4 + popup[POPUP_ON].icon->w,3,0); \ 000000EC 5C0094E5 LDR R0,[R4, #+92] \ 000000F0 000050E3 CMP R0,#+0 \ 000000F4 0600000A BEQ ??show_on_contact_2 \ 000000F8 540094E5 LDR R0,[R4, #+84] \ 000000FC 0030A0E3 MOV R3,#+0 \ 00000100 0000D0E5 LDRB R0,[R0, #+0] \ 00000104 0320A0E3 MOV R2,#+3 \ 00000108 041080E2 ADD R1,R0,#+4 \ 0000010C 580094E5 LDR R0,[R4, #+88] \ 00000110 ........ BL DrwImage 867 } 868 #endif 869 DrawString(ws,x+3,2, 3+Get_WS_width(ws,PopupFont)+x ,1+GetFontYSIZE(PopupFont),PopupFont,0,PopupOnlineCl,GetPaletteAdrByColorIndex(23)); \ ??show_on_contact_2: \ 00000114 1700A0E3 MOV R0,#+23 \ 00000118 2E0100EF SWI +302 \ 0000011C 00A0A0E1 MOV R10,R0 \ 00000120 0700A0E1 MOV R0,R7 \ 00000124 C50100EF SWI +453 \ 00000128 0090A0E1 MOV R9,R0 \ 0000012C 0710A0E1 MOV R1,R7 \ 00000130 0500A0E1 MOV R0,R5 \ 00000134 080200EF SWI +520 \ 00000138 00042DE9 PUSH {R10} \ 0000013C 00012DE9 PUSH {R8} \ 00000140 0010A0E3 MOV R1,#+0 \ 00000144 02002DE9 PUSH {R1} \ 00000148 80002DE9 PUSH {R7} \ 0000014C 000086E0 ADD R0,R6,R0 \ 00000150 011089E2 ADD R1,R9,#+1 \ 00000154 02002DE9 PUSH {R1} \ 00000158 033080E2 ADD R3,R0,#+3 \ 0000015C 0220A0E3 MOV R2,#+2 \ 00000160 0500A0E1 MOV R0,R5 \ 00000164 031086E2 ADD R1,R6,#+3 \ 00000168 4C0100EF SWI +332 870 FreeWS(ws); \ 0000016C 0500A0E1 MOV R0,R5 \ 00000170 290100EF SWI +297 \ 00000174 14D08DE2 ADD SP,SP,#+20 871 } 872 GBS_StartTimerProc(&popup[POPUP_ON].tmr, POPUP_TMR, show_on_contact); \ ??show_on_contact_0: \ 00000178 10209FE5 LDR R2,??show_on_contact_1+0x4 ;; show_on_contact \ 0000017C 0F10A0E3 MOV R1,#+15 \ 00000180 440084E2 ADD R0,R4,#+68 \ 00000184 4D0000EF SWI +77 \ 00000188 F087BDE8 POP {R4-R10,PC} ;; return \ ??show_on_contact_1: \ 0000018C ........ DC32 PopupOnlineCl \ 00000190 ........ DC32 show_on_contact 873 } 874 } 875 876 /* 877 * Функция: show_off_contact 878 * Описание: Показываем попапы с именем отключенного контакта 879 * Параметры: Никаких 880 * Возвращаемое значение: Ничего не возвращает 881 */ \ In segment CODE, align 4, keep-with-next 882 void show_off_contact() 883 { 884 if(!isPopupOff) return; \ show_off_contact: \ 00000000 ........ LDR R0,??DataTable38 ;; isPopupOff \ 00000004 F04F2DE9 PUSH {R4-R11,LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 F08FBD08 POPEQ {R4-R11,PC} 885 if(FIRST_START) \ 00000014 ........ LDR R4,??DataTable41 ;; popup \ 00000018 1C0494E5 LDR R0,[R4, #+1052] \ 0000001C 000050E3 CMP R0,#+0 886 { 887 popup[POPUP_OFF].timer=0; \ 00000020 0000A013 MOVNE R0,#+0 \ 00000024 A0008415 STRNE R0,[R4, #+160] 888 return; \ 00000028 F08FBD18 POPNE {R4-R11,PC} 889 } 890 //if(!Is_POPUP_On) popup[POPUP_OFF].timer=0; 891 if(popup[POPUP_OFF].timer>0/* && IsNoJava()*/) \ 0000002C A00094E5 LDR R0,[R4, #+160] \ 00000030 010050E3 CMP R0,#+1 \ 00000034 F08FBDB8 POPLT {R4-R11,PC} 892 { 893 /* int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; 894 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; 895 if((memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8)))*/ 896 if(IsNoJavaRun()) \ 00000038 ........ BL IsNoJavaRun \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 4D00000A BEQ ??show_off_contact_0 897 { 898 WSHDR *ws=AllocWS(64); 899 ascii2ws(ws,popup[POPUP_OFF].name); 900 popup[POPUP_OFF].timer--; 901 #ifdef GUI_INTERFACE 902 DrawRectangle(ScreenW()-Get_WS_width(ws,PopupFont)-4-popup[POPUP_OFF].icon->w,0,ScreenW()-1,GetFontYSIZE(PopupFont)+4,0,PopupOffCl,PopupOffBGCl); \ 00000044 44719FE5 LDR R7,??show_off_contact_1 ;; PopupOffCl \ 00000048 4000A0E3 MOV R0,#+64 \ 0000004C 250100EF SWI +293 \ 00000050 0050A0E1 MOV R5,R0 \ 00000054 601084E2 ADD R1,R4,#+96 \ 00000058 ........ _BLF ascii2ws,??ascii2ws??rA \ 0000005C A00094E5 LDR R0,[R4, #+160] \ 00000060 010040E2 SUB R0,R0,#+1 \ 00000064 A00084E5 STR R0,[R4, #+160] \ 00000068 ........ LDR R0,??DataTable42 ;; PopupFont \ 0000006C 006090E5 LDR R6,[R0, #+0] \ 00000070 0600A0E1 MOV R0,R6 \ 00000074 C50100EF SWI +453 \ 00000078 0080A0E1 MOV R8,R0 \ 0000007C 888100EF SWI +33160 \ 00000080 0090A0E1 MOV R9,R0 \ 00000084 888100EF SWI +33160 \ 00000088 00A0A0E1 MOV R10,R0 \ 0000008C 0610A0E1 MOV R1,R6 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 080200EF SWI +520 \ 00000098 F4109FE5 LDR R1,??show_off_contact_1+0x4 ;; PopupOffBGCl \ 0000009C 043088E2 ADD R3,R8,#+4 \ 000000A0 02002DE9 PUSH {R1} \ 000000A4 012049E2 SUB R2,R9,#+1 \ 000000A8 00004AE0 SUB R0,R10,R0 \ 000000AC 040040E2 SUB R0,R0,#+4 \ 000000B0 0710A0E1 MOV R1,R7 \ 000000B4 02002DE9 PUSH {R1} \ 000000B8 0010A0E3 MOV R1,#+0 \ 000000BC 02002DE9 PUSH {R1} \ 000000C0 B48094E5 LDR R8,[R4, #+180] \ 000000C4 0080D8E5 LDRB R8,[R8, #+0] \ 000000C8 080040E0 SUB R0,R0,R8 \ 000000CC B40100EF SWI +436 903 DrwImage(popup[POPUP_OFF].icon,ScreenW()-Get_WS_width(ws,PopupFont)-2-popup[POPUP_OFF].icon->w,3,0); \ 000000D0 888100EF SWI +33160 \ 000000D4 0080A0E1 MOV R8,R0 \ 000000D8 0610A0E1 MOV R1,R6 \ 000000DC 0500A0E1 MOV R0,R5 \ 000000E0 080200EF SWI +520 \ 000000E4 0010A0E1 MOV R1,R0 \ 000000E8 B40094E5 LDR R0,[R4, #+180] \ 000000EC 011048E0 SUB R1,R8,R1 \ 000000F0 0080D0E5 LDRB R8,[R0, #+0] \ 000000F4 0030A0E3 MOV R3,#+0 \ 000000F8 0320A0E3 MOV R2,#+3 \ 000000FC 021041E2 SUB R1,R1,#+2 \ 00000100 081041E0 SUB R1,R1,R8 \ 00000104 ........ BL DrwImage 904 #else 905 DrawRectangle(ScreenW()-Get_WS_width(ws,PopupFont)-4,0,ScreenW()-1,GetFontYSIZE(PopupFont)+4,0,PopupOffCl,PopupOffBGCl); 906 #endif 907 DrawString(ws,ScreenW()-Get_WS_width(ws,PopupFont)-3,2,ScreenW()-1,GetFontYSIZE(PopupFont)+2,PopupFont,TEXT_ALIGNRIGHT,PopupOffCl,GetPaletteAdrByColorIndex(23)); \ 00000108 1700A0E3 MOV R0,#+23 \ 0000010C 2E0100EF SWI +302 \ 00000110 0080A0E1 MOV R8,R0 \ 00000114 0600A0E1 MOV R0,R6 \ 00000118 C50100EF SWI +453 \ 0000011C 0090A0E1 MOV R9,R0 \ 00000120 888100EF SWI +33160 \ 00000124 00A0A0E1 MOV R10,R0 \ 00000128 888100EF SWI +33160 \ 0000012C 00B0A0E1 MOV R11,R0 \ 00000130 0610A0E1 MOV R1,R6 \ 00000134 0500A0E1 MOV R0,R5 \ 00000138 080200EF SWI +520 \ 0000013C 00012DE9 PUSH {R8} \ 00000140 80002DE9 PUSH {R7} \ 00000144 0410A0E3 MOV R1,#+4 \ 00000148 02002DE9 PUSH {R1} \ 0000014C 40002DE9 PUSH {R6} \ 00000150 01304AE2 SUB R3,R10,#+1 \ 00000154 021089E2 ADD R1,R9,#+2 \ 00000158 02002DE9 PUSH {R1} \ 0000015C 0220A0E3 MOV R2,#+2 \ 00000160 00004BE0 SUB R0,R11,R0 \ 00000164 031040E2 SUB R1,R0,#+3 \ 00000168 0500A0E1 MOV R0,R5 \ 0000016C 4C0100EF SWI +332 908 FreeWS(ws); \ 00000170 0500A0E1 MOV R0,R5 \ 00000174 290100EF SWI +297 \ 00000178 20D08DE2 ADD SP,SP,#+32 909 } 910 GBS_StartTimerProc(&popup[POPUP_OFF].tmr, POPUP_TMR, show_off_contact); \ ??show_off_contact_0: \ 0000017C 14209FE5 LDR R2,??show_off_contact_1+0x8 ;; show_off_contact \ 00000180 0F10A0E3 MOV R1,#+15 \ 00000184 A40084E2 ADD R0,R4,#+164 \ 00000188 4D0000EF SWI +77 \ 0000018C F08FBDE8 POP {R4-R11,PC} ;; return \ ??show_off_contact_1: \ 00000190 ........ DC32 PopupOffCl \ 00000194 ........ DC32 PopupOffBGCl \ 00000198 ........ DC32 show_off_contact 911 } 912 } 913 914 //---------------------------- popup message ---------------------------// 915 916 917 918 /* 919 * Функция: show_pp_sender 920 * Описание: попап с именем контакта от которого пришло сообщение 921 * Параметры: Никаких 922 * Возвращаемое значение: Ничего не возвращает 923 */ \ In segment CODE, align 4, keep-with-next 924 void show_pp_sender() 925 { \ show_pp_sender: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 926 if(FIRST_START) \ 00000004 ........ LDR R4,??DataTable41 ;; popup \ 00000008 406FA0E3 MOV R6,#+256 \ 0000000C 1C0494E5 LDR R0,[R4, #+1052] \ 00000010 000050E3 CMP R0,#+0 927 { 928 popup[POPUP_MSG].timer=0; \ 00000014 0000A013 MOVNE R0,#+0 \ 00000018 04008617 STRNE R0,[R6, +R4] 929 return; \ 0000001C F087BD18 POPNE {R4-R10,PC} 930 } 931 // if(!Is_POPUP_On) popup[POPUP_MSG].timer=0; 932 if(popup[POPUP_MSG].timer > 0/* && IsNoJava()*/) \ 00000020 040096E7 LDR R0,[R6, +R4] \ 00000024 010050E3 CMP R0,#+1 \ 00000028 F087BDB8 POPLT {R4-R10,PC} 933 { 934 /* int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; 935 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; 936 if((memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8)))*/ 937 if(IsNoJavaRun()) \ 0000002C ........ BL IsNoJavaRun \ 00000030 000050E3 CMP R0,#+0 \ 00000034 4300000A BEQ ??show_pp_sender_0 938 { 939 WSHDR *ws=AllocWS(256); 940 ascii2ws(ws,popup[POPUP_MSG].name); 941 popup[POPUP_MSG].timer--; 942 #ifdef GUI_INTERFACE 943 popup[POPUP_MSG].icon = GetIconByItem(IS_MSG); 944 DrawRectangle(0,0,Get_WS_width(ws,PopupFont)+6+popup[POPUP_MSG].icon->w,GetFontYSIZE(PopupFont)+4,0,PopupMsgCl,PopupBGCl); \ 00000038 1C819FE5 LDR R8,??show_pp_sender_1 ;; PopupMsgCl \ 0000003C 400FA0E3 MOV R0,#+256 \ 00000040 250100EF SWI +293 \ 00000044 0050A0E1 MOV R5,R0 \ 00000048 C01084E2 ADD R1,R4,#+192 \ 0000004C ........ _BLF ascii2ws,??ascii2ws??rA \ 00000050 040096E7 LDR R0,[R6, +R4] \ 00000054 010040E2 SUB R0,R0,#+1 \ 00000058 040086E7 STR R0,[R6, +R4] \ 0000005C 456FA0E3 MOV R6,#+276 \ 00000060 0D00A0E3 MOV R0,#+13 \ 00000064 ........ _BLF GetIconByItem,??GetIconByItem??rA \ 00000068 040086E7 STR R0,[R6, +R4] \ 0000006C ........ LDR R0,??DataTable42 ;; PopupFont \ 00000070 007090E5 LDR R7,[R0, #+0] \ 00000074 0700A0E1 MOV R0,R7 \ 00000078 C50100EF SWI +453 \ 0000007C 0090A0E1 MOV R9,R0 \ 00000080 0710A0E1 MOV R1,R7 \ 00000084 0500A0E1 MOV R0,R5 \ 00000088 080200EF SWI +520 \ 0000008C ........ LDR R1,??DataTable43 ;; PopupBGCl \ 00000090 043089E2 ADD R3,R9,#+4 \ 00000094 02002DE9 PUSH {R1} \ 00000098 0810A0E1 MOV R1,R8 \ 0000009C 02002DE9 PUSH {R1} \ 000000A0 0010A0E3 MOV R1,#+0 \ 000000A4 02002DE9 PUSH {R1} \ 000000A8 041096E7 LDR R1,[R6, +R4] \ 000000AC 0010D1E5 LDRB R1,[R1, #+0] \ 000000B0 000081E0 ADD R0,R1,R0 \ 000000B4 062080E2 ADD R2,R0,#+6 \ 000000B8 0010A0E3 MOV R1,#+0 \ 000000BC 0100A0E1 MOV R0,R1 \ 000000C0 B40100EF SWI +436 945 DrwImage(popup[POPUP_MSG].icon,2,2,0); \ 000000C4 040096E7 LDR R0,[R6, +R4] \ 000000C8 0030A0E3 MOV R3,#+0 \ 000000CC 0220A0E3 MOV R2,#+2 \ 000000D0 0210A0E1 MOV R1,R2 \ 000000D4 ........ BL DrwImage 946 DrawString(ws,popup[POPUP_MSG].icon->w+4,1,popup[POPUP_MSG].icon->w+Get_WS_width(ws,PopupFont)+4,1+GetFontYSIZE(PopupFont),PopupFont,0,PopupMsgCl,GetPaletteAdrByColorIndex(23)); \ 000000D8 1700A0E3 MOV R0,#+23 \ 000000DC 2E0100EF SWI +302 \ 000000E0 0090A0E1 MOV R9,R0 \ 000000E4 0700A0E1 MOV R0,R7 \ 000000E8 C50100EF SWI +453 \ 000000EC 00A0A0E1 MOV R10,R0 \ 000000F0 0710A0E1 MOV R1,R7 \ 000000F4 0500A0E1 MOV R0,R5 \ 000000F8 080200EF SWI +520 \ 000000FC 041096E7 LDR R1,[R6, +R4] \ 00000100 00022DE9 PUSH {R9} \ 00000104 00012DE9 PUSH {R8} \ 00000108 0020A0E3 MOV R2,#+0 \ 0000010C 04002DE9 PUSH {R2} \ 00000110 80002DE9 PUSH {R7} \ 00000114 01208AE2 ADD R2,R10,#+1 \ 00000118 04002DE9 PUSH {R2} \ 0000011C 0020D1E5 LDRB R2,[R1, #+0] \ 00000120 020080E0 ADD R0,R0,R2 \ 00000124 043080E2 ADD R3,R0,#+4 \ 00000128 0000D1E5 LDRB R0,[R1, #+0] \ 0000012C 0120A0E3 MOV R2,#+1 \ 00000130 041080E2 ADD R1,R0,#+4 \ 00000134 0500A0E1 MOV R0,R5 \ 00000138 4C0100EF SWI +332 947 #else 948 DrawString(ws,4,1,Get_WS_width(ws,PopupFont)+4,1+GetFontYSIZE(PopupFont),PopupFont,0,PopupMsgCl,GetPaletteAdrByColorIndex(23)); 949 #endif 950 FreeWS(ws); \ 0000013C 0500A0E1 MOV R0,R5 \ 00000140 290100EF SWI +297 \ 00000144 20D08DE2 ADD SP,SP,#+32 951 } 952 GBS_StartTimerProc(&popup[POPUP_MSG].tmr, POPUP_TMR, show_pp_sender); \ ??show_pp_sender_0: \ 00000148 10209FE5 LDR R2,??show_pp_sender_1+0x4 ;; show_pp_sender \ 0000014C 0F10A0E3 MOV R1,#+15 \ 00000150 410F84E2 ADD R0,R4,#+260 \ 00000154 4D0000EF SWI +77 \ 00000158 F087BDE8 POP {R4-R10,PC} ;; return \ ??show_pp_sender_1: \ 0000015C ........ DC32 PopupMsgCl \ 00000160 ........ DC32 show_pp_sender 953 } 954 } 955 956 957 //=================================================================== 958 const char def_setting[]="%sdef_settings_%d"; 959 int ExtSndModeIndivd; 960 \ In segment CODE, align 4, keep-with-next 961 void ReadDefSettings(void) 962 { 963 DEF_SETTINGS def_set; 964 int f; 965 unsigned int err; 966 char str[128]; 967 snprintf(str,127,def_setting,elf_path,UIN); \ ReadDefSettings: \ 00000000 ........ LDR R0,??DataTable47 ;; UIN \ 00000004 ........ LDR R2,??DataTable48 ;; def_setting \ 00000008 30402DE9 PUSH {R4,R5,LR} \ 0000000C ........ LDR R4,??DataTable62 ;; popup \ 00000010 88D04DE2 SUB SP,SP,#+136 \ 00000014 000090E5 LDR R0,[R0, #+0] \ 00000018 7F10A0E3 MOV R1,#+127 \ 0000001C 01002DE9 PUSH {R0} \ 00000020 E800A0E3 MOV R0,#+232 \ 00000024 400E80E3 ORR R0,R0,#0x400 \ 00000028 043080E0 ADD R3,R0,R4 \ 0000002C 0C008DE2 ADD R0,SP,#+12 \ 00000030 1B0100EF SWI +283 968 if(get_file_size(str) != sizeof(DEF_SETTINGS)) unlink(str,&err); \ 00000034 0C008DE2 ADD R0,SP,#+12 \ 00000038 ........ _BLF get_file_size,??get_file_size??rA \ 0000003C 040050E3 CMP R0,#+4 \ 00000040 04D08DE2 ADD SP,SP,#+4 \ 00000044 0200000A BEQ ??ReadDefSettings_0 \ 00000048 04108DE2 ADD R1,SP,#+4 \ 0000004C 08008DE2 ADD R0,SP,#+8 \ 00000050 6B0100EF SWI +363 969 if ((f=fopen(str,A_ReadOnly+A_BIN,P_READ,&err))!=-1) \ ??ReadDefSettings_0: \ 00000054 04308DE2 ADD R3,SP,#+4 \ 00000058 8020A0E3 MOV R2,#+128 \ 0000005C 801CA0E3 MOV R1,#+32768 \ 00000060 08008DE2 ADD R0,SP,#+8 \ 00000064 0A0000EF SWI +10 \ 00000068 0050A0E1 MOV R5,R0 \ 0000006C 010075E3 CMN R5,#+1 \ 00000070 2E00000A BEQ ??ReadDefSettings_1 970 { 971 fread(f,&def_set,sizeof(DEF_SETTINGS),&err); \ 00000074 04308DE2 ADD R3,SP,#+4 \ 00000078 0420A0E3 MOV R2,#+4 \ 0000007C 0D10A0E1 MOV R1,SP \ 00000080 0B0000EF SWI +11 972 fclose(f,&err); \ 00000084 04108DE2 ADD R1,SP,#+4 \ 00000088 0500A0E1 MOV R0,R5 \ 0000008C 0D0000EF SWI +13 973 Is_Vibra_Enabled = def_set.vibra_status; \ 00000090 0000DDE5 LDRB R0,[SP, #+0] \ 00000094 010000E2 AND R0,R0,#0x1 \ 00000098 1C0384E5 STR R0,[R4, #+796] 974 Is_Sounds_Enabled = def_set.sound_status; \ 0000009C 0000DDE5 LDRB R0,[SP, #+0] \ 000000A0 020000E2 AND R0,R0,#0x2 \ 000000A4 A000A0E1 LSR R0,R0,#+1 \ 000000A8 200384E5 STR R0,[R4, #+800] 975 Is_Show_Offline = def_set.off_contacts; \ 000000AC 0000DDE5 LDRB R0,[SP, #+0] \ 000000B0 040000E2 AND R0,R0,#0x4 \ 000000B4 2001A0E1 LSR R0,R0,#+2 \ 000000B8 240384E5 STR R0,[R4, #+804] 976 Is_Show_Groups = def_set.show_groups; \ 000000BC 0000DDE5 LDRB R0,[SP, #+0] \ 000000C0 080000E2 AND R0,R0,#0x8 \ 000000C4 A001A0E1 LSR R0,R0,#+3 \ 000000C8 280384E5 STR R0,[R4, #+808] 977 CurrentStatus = def_set.def_status + 1; \ 000000CC 0100DDE5 LDRB R0,[SP, #+1] \ 000000D0 010080E2 ADD R0,R0,#+1 \ 000000D4 FC0384E5 STR R0,[R4, #+1020] 978 CurrentXStatus = def_set.def_xstatus; \ 000000D8 0200DDE5 LDRB R0,[SP, #+2] \ 000000DC 000484E5 STR R0,[R4, #+1024] 979 IsActiveUp = def_set.ActiveUp; \ 000000E0 0300DDE5 LDRB R0,[SP, #+3] \ 000000E4 011000E2 AND R1,R0,#0x1 \ 000000E8 101384E5 STR R1,[R4, #+784] 980 #ifdef ELKA 981 Is_SLI_On = def_set.sli_state; 982 #endif 983 Is_POPUP_On = def_set.popup_state; \ 000000EC 021000E2 AND R1,R0,#0x2 \ 000000F0 A110A0E1 LSR R1,R1,#+1 \ 000000F4 2C1384E5 STR R1,[R4, #+812] 984 Is_Double_Vibra_On = def_set.remind_state; \ 000000F8 041000E2 AND R1,R0,#0x4 \ 000000FC 2111A0E1 LSR R1,R1,#+2 \ 00000100 181384E5 STR R1,[R4, #+792] 985 Is_ILU_Mode = def_set.ilu_mode; \ 00000104 081000E2 AND R1,R0,#0x8 \ 00000108 A111A0E1 LSR R1,R1,#+3 986 Is_ILU_By_Online = def_set.ilu_online; \ 0000010C 102000E2 AND R2,R0,#0x10 \ 00000110 2222A0E1 LSR R2,R2,#+4 987 Is_Extd_Sound = def_set.extsnd_mode; \ 00000114 203000E2 AND R3,R0,#0x20 \ 00000118 A332A0E1 LSR R3,R3,#+5 988 ExtSndModeIndivd = def_set.extsnd_flag; \ 0000011C 405000E2 AND R5,R0,#0x40 \ 00000120 2553A0E1 LSR R5,R5,#+6 989 CurrentPrivateStatus = def_set.def_private_status; \ 00000124 A003A0E1 LSR R0,R0,#+7 \ 00000128 040484E5 STR R0,[R4, #+1028] \ 0000012C 110000EA B ??ReadDefSettings_2 990 } 991 else 992 { 993 Is_Vibra_Enabled = 1; \ ??ReadDefSettings_1: \ 00000130 0100A0E3 MOV R0,#+1 \ 00000134 1C0384E5 STR R0,[R4, #+796] 994 Is_Sounds_Enabled = 0; \ 00000138 0010A0E3 MOV R1,#+0 \ 0000013C 201384E5 STR R1,[R4, #+800] 995 Is_Show_Offline = 0; \ 00000140 241384E5 STR R1,[R4, #+804] 996 Is_Show_Groups = 0; \ 00000144 281384E5 STR R1,[R4, #+808] 997 CurrentStatus = IS_ONLINE; \ 00000148 0B20A0E3 MOV R2,#+11 \ 0000014C FC2384E5 STR R2,[R4, #+1020] 998 CurrentXStatus = 0; \ 00000150 001484E5 STR R1,[R4, #+1024] 999 CurrentPrivateStatus = PL_VISLIST_CAN_SEE; \ 00000154 0220A0E3 MOV R2,#+2 \ 00000158 042484E5 STR R2,[R4, #+1028] 1000 1001 IsActiveUp = 1; \ 0000015C 100384E5 STR R0,[R4, #+784] 1002 1003 #ifdef ELKA 1004 Is_SLI_On = 1; 1005 #endif 1006 Is_POPUP_On = 1; \ 00000160 2C0384E5 STR R0,[R4, #+812] 1007 Is_Double_Vibra_On = 0; \ 00000164 181384E5 STR R1,[R4, #+792] 1008 Is_ILU_Mode = 1; \ 00000168 0110A0E3 MOV R1,#+1 1009 Is_ILU_By_Online = 1; \ 0000016C 0020A0E1 MOV R2,R0 1010 Is_Extd_Sound = 0; \ 00000170 0030A0E3 MOV R3,#+0 1011 ExtSndModeIndivd = 0; \ 00000174 0350A0E1 MOV R5,R3 \ ??ReadDefSettings_2: \ 00000178 205484E5 STR R5,[R4, #+1056] \ 0000017C 343384E5 STR R3,[R4, #+820] \ 00000180 302384E5 STR R2,[R4, #+816] \ 00000184 F01384E5 STR R1,[R4, #+1008] 1012 1013 } 1014 } \ 00000188 88D08DE2 ADD SP,SP,#+136 \ 0000018C 3080BDE8 POP {R4,R5,PC} ;; return 1015 \ In segment CODE, align 4, keep-with-next 1016 void WriteDefSettings(void) 1017 { 1018 DEF_SETTINGS def_set; 1019 int f; 1020 unsigned int err; 1021 char str[128]; 1022 snprintf(str,127,def_setting,elf_path,UIN); \ WriteDefSettings: \ 00000000 ........ LDR R0,??DataTable47 ;; UIN \ 00000004 ........ LDR R2,??DataTable48 ;; def_setting \ 00000008 30402DE9 PUSH {R4,R5,LR} \ 0000000C ........ LDR R4,??DataTable62 ;; popup \ 00000010 88D04DE2 SUB SP,SP,#+136 \ 00000014 000090E5 LDR R0,[R0, #+0] \ 00000018 7F10A0E3 MOV R1,#+127 \ 0000001C 01002DE9 PUSH {R0} \ 00000020 E800A0E3 MOV R0,#+232 \ 00000024 400E80E3 ORR R0,R0,#0x400 \ 00000028 043080E0 ADD R3,R0,R4 \ 0000002C 0C008DE2 ADD R0,SP,#+12 \ 00000030 1B0100EF SWI +283 1023 if ((f=fopen(str,A_WriteOnly+A_BIN+A_Create+A_Truncate,P_WRITE,&err))!=-1) \ 00000034 08308DE2 ADD R3,SP,#+8 \ 00000038 402FA0E3 MOV R2,#+256 \ 0000003C 0110A0E3 MOV R1,#+1 \ 00000040 831C81E3 ORR R1,R1,#0x8300 \ 00000044 0C008DE2 ADD R0,SP,#+12 \ 00000048 0A0000EF SWI +10 \ 0000004C 0050A0E1 MOV R5,R0 \ 00000050 010075E3 CMN R5,#+1 \ 00000054 04D08DE2 ADD SP,SP,#+4 \ 00000058 3400000A BEQ ??WriteDefSettings_0 1024 { 1025 def_set.vibra_status=Is_Vibra_Enabled; 1026 def_set.sound_status=Is_Sounds_Enabled; 1027 def_set.off_contacts=Is_Show_Offline; 1028 def_set.show_groups=Is_Show_Groups; \ 0000005C 0010DDE5 LDRB R1,[SP, #+0] \ 00000060 1C2394E5 LDR R2,[R4, #+796] \ 00000064 F01001E2 AND R1,R1,#0xF0 \ 00000068 012002E2 AND R2,R2,#0x1 \ 0000006C 011082E1 ORR R1,R2,R1 \ 00000070 202394E5 LDR R2,[R4, #+800] \ 00000074 0230A0E3 MOV R3,#+2 \ 00000078 822003E0 AND R2,R3,R2, LSL #+1 \ 0000007C 011082E1 ORR R1,R2,R1 \ 00000080 242394E5 LDR R2,[R4, #+804] \ 00000084 0430A0E3 MOV R3,#+4 \ 00000088 022103E0 AND R2,R3,R2, LSL #+2 \ 0000008C 011082E1 ORR R1,R2,R1 \ 00000090 282394E5 LDR R2,[R4, #+808] \ 00000094 0830A0E3 MOV R3,#+8 \ 00000098 822103E0 AND R2,R3,R2, LSL #+3 \ 0000009C 011082E1 ORR R1,R2,R1 \ 000000A0 0010CDE5 STRB R1,[SP, #+0] 1029 def_set.def_status=CurrentStatus-1; \ 000000A4 FC1394E5 LDR R1,[R4, #+1020] 1030 def_set.def_xstatus=CurrentXStatus; 1031 def_set.ActiveUp = IsActiveUp; 1032 #ifdef ELKA 1033 def_set.sli_state=Is_SLI_On; 1034 #endif 1035 def_set.popup_state=Is_POPUP_On; 1036 def_set.remind_state=Is_Double_Vibra_On; 1037 def_set.ilu_mode = Is_ILU_Mode; 1038 def_set.ilu_online = Is_ILU_By_Online; 1039 def_set.extsnd_mode = Is_Extd_Sound; 1040 def_set.extsnd_flag = ExtSndModeIndivd; 1041 def_set.def_private_status = CurrentPrivateStatus; 1042 fwrite(f,&def_set,sizeof(DEF_SETTINGS),&err); \ 000000A8 04308DE2 ADD R3,SP,#+4 \ 000000AC 011041E2 SUB R1,R1,#+1 \ 000000B0 0110CDE5 STRB R1,[SP, #+1] \ 000000B4 001494E5 LDR R1,[R4, #+1024] \ 000000B8 0210CDE5 STRB R1,[SP, #+2] \ 000000BC 101394E5 LDR R1,[R4, #+784] \ 000000C0 2C2394E5 LDR R2,[R4, #+812] \ 000000C4 FD1001E2 AND R1,R1,#0xFD \ 000000C8 821081E1 ORR R1,R1,R2, LSL #+1 \ 000000CC 182394E5 LDR R2,[R4, #+792] \ 000000D0 FB1001E2 AND R1,R1,#0xFB \ 000000D4 021181E1 ORR R1,R1,R2, LSL #+2 \ 000000D8 F02394E5 LDR R2,[R4, #+1008] \ 000000DC F71001E2 AND R1,R1,#0xF7 \ 000000E0 821181E1 ORR R1,R1,R2, LSL #+3 \ 000000E4 302394E5 LDR R2,[R4, #+816] \ 000000E8 EF1001E2 AND R1,R1,#0xEF \ 000000EC 021281E1 ORR R1,R1,R2, LSL #+4 \ 000000F0 342394E5 LDR R2,[R4, #+820] \ 000000F4 DF1001E2 AND R1,R1,#0xDF \ 000000F8 821281E1 ORR R1,R1,R2, LSL #+5 \ 000000FC 202494E5 LDR R2,[R4, #+1056] \ 00000100 BF1001E2 AND R1,R1,#0xBF \ 00000104 021381E1 ORR R1,R1,R2, LSL #+6 \ 00000108 042494E5 LDR R2,[R4, #+1028] \ 0000010C 7F1001E2 AND R1,R1,#0x7F \ 00000110 821381E1 ORR R1,R1,R2, LSL #+7 \ 00000114 0310CDE5 STRB R1,[SP, #+3] \ 00000118 0420A0E3 MOV R2,#+4 \ 0000011C 0D10A0E1 MOV R1,SP \ 00000120 0C0000EF SWI +12 1043 fclose(f,&err); \ 00000124 04108DE2 ADD R1,SP,#+4 \ 00000128 0500A0E1 MOV R0,R5 \ 0000012C 0D0000EF SWI +13 1044 } 1045 } \ ??WriteDefSettings_0: \ 00000130 88D08DE2 ADD SP,SP,#+136 ;; stack cleaning \ 00000134 3080BDE8 POP {R4,R5,PC} ;; return 1046 //by KreN 27.09.2007 1047 //=================================================================== 1048 extern S_SMILES *s_top; 1049 extern DYNPNGICONLIST *SmilesImgList; 1050 extern DYNPNGICONLIST *XStatusesImgList; 1051 1052 //=============================Проигрывание звука======================= 1053 extern const char sndStartup[]; 1054 extern const char sndSrvMsg[]; 1055 extern const char sndGlobal[]; 1056 extern const char sndMsg[]; 1057 extern const char sndMsgSent[]; 1058 extern const unsigned int sndVolume; 1059 1060 1061 int ExtSndMode_flag=0; 1062 1063 /* 1064 * Функция: GetExtSnd 1065 * Описание: Ищет звукойвой файл, проверяет 2 разных формата, mp3, wav, amr 1066 * Параметры: const char *extsng - путь + имя звукового файла, который нужно искать, имя - это UIN контакта 1067 * Возвращаемое значение: Полный путь до файла, если таковой существует, или NULL 1068 */ \ In segment CODE, align 4, keep-with-next 1069 char *GetExtSnd(const char *extsnd)//получить звук с нужным расширением 1070 { \ GetExtSnd: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 1071 char *mp3,*wav,*amr; 1072 mp3 = MakeGlobalString(extsnd,'.',"mp3"); \ 00000008 1B2F8FE2 ADR R2,??GetExtSnd_0 ;; "mp3" \ 0000000C 2E10A0E3 MOV R1,#+46 \ 00000010 ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 00000014 0050A0E1 MOV R5,R0 1073 wav = MakeGlobalString(extsnd,'.',"wav"); \ 00000018 182F8FE2 ADR R2,??GetExtSnd_0+0x4 ;; "wav" \ 0000001C 2E10A0E3 MOV R1,#+46 \ 00000020 0400A0E1 MOV R0,R4 \ 00000024 ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 00000028 0060A0E1 MOV R6,R0 1074 amr = MakeGlobalString(extsnd,'.',"amr"); \ 0000002C 142F8FE2 ADR R2,??GetExtSnd_0+0x8 ;; "amr" \ 00000030 2E10A0E3 MOV R1,#+46 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 0000003C 0040A0E1 MOV R4,R0 1075 if(get_file_size(mp3)) return mp3; \ 00000040 0500A0E1 MOV R0,R5 \ 00000044 ........ _BLF get_file_size,??get_file_size??rA \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0500A011 MOVNE R0,R5 \ 00000050 7080BD18 POPNE {R4-R6,PC} 1076 else 1077 if(get_file_size(wav)) return wav; \ 00000054 0600A0E1 MOV R0,R6 \ 00000058 ........ _BLF get_file_size,??get_file_size??rA \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 0600A011 MOVNE R0,R6 \ 00000064 7080BD18 POPNE {R4-R6,PC} 1078 else 1079 if(get_file_size(amr)) return amr; \ 00000068 0400A0E1 MOV R0,R4 \ 0000006C ........ _BLF get_file_size,??get_file_size??rA \ 00000070 000050E3 CMP R0,#+0 \ 00000074 0400A011 MOVNE R0,R4 1080 return NULL; \ 00000078 7080BDE8 POP {R4-R6,PC} ;; return \ ??GetExtSnd_0: \ 0000007C 6D703300 DC8 "mp3" \ 00000080 77617600 DC8 "wav" \ 00000084 616D7200 DC8 "amr" 1081 } 1082 \ In segment CODE, align 4, keep-with-next 1083 void Play(const char *fname) 1084 { \ Play: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 CCD04DE2 SUB SP,SP,#+204 \ 00000008 0040A0E1 MOV R4,R0 1085 if ((!IsCalling()) && ( Is_Sounds_Enabled || ExtSndMode_flag)) \ 0000000C 6E0000EF SWI +110 \ 00000010 000050E3 CMP R0,#+0 \ 00000014 4300001A BNE ??Play_0 \ 00000018 ........ LDR R0,??DataTable62 ;; popup \ 0000001C 201390E5 LDR R1,[R0, #+800] \ 00000020 000051E3 CMP R1,#+0 \ 00000024 24149005 LDREQ R1,[R0, #+1060] \ 00000028 00005103 CMPEQ R1,#+0 \ 0000002C 3D00000A BEQ ??Play_0 1086 { 1087 ExtSndMode_flag = 0; \ 00000030 0050A0E3 MOV R5,#+0 \ 00000034 245480E5 STR R5,[R0, #+1060] 1088 FSTATS fstats; 1089 unsigned int err; 1090 if (GetFileStats(fname,&fstats,&err)!=-1) \ 00000038 0D20A0E1 MOV R2,SP \ 0000003C A4108DE2 ADD R1,SP,#+164 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 840000EF SWI +132 \ 00000048 010070E3 CMN R0,#+1 \ 0000004C 3500000A BEQ ??Play_0 1091 { 1092 PLAYFILE_OPT _sfo1; 1093 WSHDR* sndPath=AllocWS(128); \ 00000050 8000A0E3 MOV R0,#+128 \ 00000054 250100EF SWI +293 \ 00000058 0060A0E1 MOV R6,R0 1094 WSHDR* sndFName=AllocWS(128); \ 0000005C 8000A0E3 MOV R0,#+128 \ 00000060 250100EF SWI +293 \ 00000064 0070A0E1 MOV R7,R0 1095 char s[128]; 1096 const char *p=strrchr(fname,'\\')+1; \ 00000068 5C10A0E3 MOV R1,#+92 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 170100EF SWI +279 \ 00000074 018080E2 ADD R8,R0,#+1 1097 str_2ws(sndFName,p,128); \ 00000078 8020A0E3 MOV R2,#+128 \ 0000007C 0810A0E1 MOV R1,R8 \ 00000080 0700A0E1 MOV R0,R7 \ 00000084 6C0100EF SWI +364 1098 strncpy(s,fname,p-fname); \ 00000088 048048E0 SUB R8,R8,R4 \ 0000008C 0820A0E1 MOV R2,R8 \ 00000090 0410A0E1 MOV R1,R4 \ 00000094 24008DE2 ADD R0,SP,#+36 \ 00000098 160100EF SWI +278 1099 s[p-fname]='\0'; \ 0000009C 24008DE2 ADD R0,SP,#+36 \ 000000A0 0050C8E7 STRB R5,[R8, +R0] 1100 str_2ws(sndPath,s,128); \ 000000A4 8020A0E3 MOV R2,#+128 \ 000000A8 24108DE2 ADD R1,SP,#+36 \ 000000AC 0600A0E1 MOV R0,R6 \ 000000B0 6C0100EF SWI +364 1101 1102 zeromem(&_sfo1,sizeof(PLAYFILE_OPT)); \ 000000B4 2010A0E3 MOV R1,#+32 \ 000000B8 04008DE2 ADD R0,SP,#+4 \ 000000BC 1D0100EF SWI +285 1103 _sfo1.repeat_num=1; 1104 _sfo1.time_between_play=0; 1105 _sfo1.play_first=0; 1106 _sfo1.volume=sndVolume; \ 000000C0 68209FE5 LDR R2,??Play_1 ;; sndVolume \ 000000C4 0100A0E3 MOV R0,#+1 \ 000000C8 B400CDE1 STRH R0,[SP, #+4] \ 000000CC 08508DE5 STR R5,[SP, #+8] \ 000000D0 0C508DE5 STR R5,[SP, #+12] \ 000000D4 002092E5 LDR R2,[R2, #+0] \ 000000D8 10208DE5 STR R2,[SP, #+16] 1107 #ifdef NEWSGOLD 1108 _sfo1.unk6=1; 1109 _sfo1.unk7=1; 1110 _sfo1.unk9=2; 1111 PlayFile(0x10, sndPath, sndFName, GBS_GetCurCepid(), MSG_PLAYFILE_REPORT, &_sfo1); 1112 #else 1113 #ifdef X75 1114 _sfo1.unk4=0x80000000; \ 000000DC 8024A0E3 MOV R2,#-2147483648 \ 000000E0 14208DE5 STR R2,[SP, #+20] 1115 _sfo1.unk5=1; \ 000000E4 18008DE5 STR R0,[SP, #+24] 1116 PlayFile(0xC, sndPath, sndFName, 0,GBS_GetCurCepid(), MSG_PLAYFILE_REPORT, &_sfo1); \ 000000E8 450100EF SWI +325 \ 000000EC 04108DE2 ADD R1,SP,#+4 \ 000000F0 02002DE9 PUSH {R1} \ 000000F4 0030A0E3 MOV R3,#+0 \ 000000F8 0720A0E1 MOV R2,R7 \ 000000FC 5D1FA0E3 MOV R1,#+372 \ 00000100 02002DE9 PUSH {R1} \ 00000104 01002DE9 PUSH {R0} \ 00000108 0610A0E1 MOV R1,R6 \ 0000010C 0C00A0E3 MOV R0,#+12 \ 00000110 4A0000EF SWI +74 1117 #else 1118 _sfo1.unk5=1; 1119 PlayFile(0xC, sndPath, sndFName, GBS_GetCurCepid(), MSG_PLAYFILE_REPORT, &_sfo1); 1120 #endif 1121 #endif 1122 FreeWS(sndPath); \ 00000114 0600A0E1 MOV R0,R6 \ 00000118 290100EF SWI +297 1123 FreeWS(sndFName); \ 0000011C 0700A0E1 MOV R0,R7 \ 00000120 290100EF SWI +297 \ 00000124 0CD08DE2 ADD SP,SP,#+12 1124 } 1125 } 1126 } \ ??Play_0: \ 00000128 CCD08DE2 ADD SP,SP,#+204 ;; stack cleaning \ 0000012C F081BDE8 POP {R4-R8,PC} ;; return \ ??Play_1: \ 00000130 ........ DC32 sndVolume 1127 1128 GBSTMR tmr_vibra; 1129 \ In segment CODE, align 4, keep-with-next 1130 void start_vibra(void) 1131 { \ start_vibra: \ 00000000 10402DE9 PUSH {R4,LR} 1132 extern const int VIBR_TYPE; 1133 void stop_vibra(void); 1134 if((Is_Vibra_Enabled || (Is_Double_Vibra_On && double_on))&&(!IsCalling())) \ 00000004 ........ LDR R4,??DataTable62 ;; popup \ 00000008 1C0394E5 LDR R0,[R4, #+796] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0400001A BNE ??start_vibra_0 \ 00000014 180394E5 LDR R0,[R4, #+792] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 18049415 LDRNE R0,[R4, #+1048] \ 00000020 00005013 CMPNE R0,#+0 \ 00000024 1080BD08 POPEQ {R4,PC} \ ??start_vibra_0: \ 00000028 6E0000EF SWI +110 \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 1080BD18 POPNE {R4,PC} 1135 { 1136 extern const unsigned int vibraPower; 1137 SetVibration(vibraPower); \ 00000034 38009FE5 LDR R0,??start_vibra_1 ;; vibraPower \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C 7C0000EF SWI +124 1138 if(VIBR_TYPE) \ 00000040 ........ LDR R1,??DataTable54 ;; VIBR_TYPE \ 00000044 2C209FE5 LDR R2,??start_vibra_1+0x4 ;; stop_vibra \ 00000048 001091E5 LDR R1,[R1, #+0] \ 0000004C 0800A0E3 MOV R0,#+8 \ 00000050 680D80E3 ORR R0,R0,#0x1A00 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 000051E3 CMP R1,#+0 \ 0000005C 0100000A BEQ ??start_vibra_2 1139 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>2,stop_vibra); \ 00000060 3610A0E3 MOV R1,#+54 \ 00000064 000000EA B ??start_vibra_3 1140 else 1141 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra); \ ??start_vibra_2: \ 00000068 6C10A0E3 MOV R1,#+108 \ ??start_vibra_3: \ 0000006C 4D0000EF SWI +77 1142 } 1143 } \ 00000070 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra_1: \ 00000074 ........ DC32 vibraPower \ 00000078 ........ DC32 stop_vibra 1144 \ In segment CODE, align 4, keep-with-next 1145 void stop_vibra(void) 1146 { \ stop_vibra: \ 00000000 00402DE9 PUSH {LR} 1147 extern const int VIBR_TYPE; 1148 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1149 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable62 ;; popup \ 00000010 141390E5 LDR R1,[R0, #+788] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 141380E5 STR R1,[R0, #+788] \ 0000001C 0080BD08 POPEQ {PC} 1150 { 1151 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000024 0810A0E3 MOV R1,#+8 \ 00000028 681D81E3 ORR R1,R1,#0x1A00 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable54 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra_1 1152 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND/40,start_vibra); \ 00000040 0510A0E3 MOV R1,#+5 \ 00000044 000000EA B ??stop_vibra_2 1153 else 1154 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra); \ ??stop_vibra_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra_2: \ 0000004C 4D0000EF SWI +77 1155 } 1156 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra_0: \ 00000054 ........ DC32 start_vibra 1157 /* 1158 void ChangeVibra(void) 1159 { 1160 if (!(Is_Vibra_Enabled=!(Is_Vibra_Enabled))) 1161 ShowMSG(1,(int)lgpData[LGP_MsgVibraDis]); 1162 else 1163 ShowMSG(1,(int)lgpData[LGP_MsgVibraEna]); 1164 } 1165 1166 void ChangeSound(void) 1167 { 1168 if (!(Is_Sounds_Enabled=!(Is_Sounds_Enabled))) 1169 ShowMSG(1,(int)lgpData[LGP_MsgSndDis]); 1170 else 1171 ShowMSG(1,(int)lgpData[LGP_MsgSndEna]); 1172 } 1173 */ 1174 //=================================================================== 1175 //Templates 1176 char *templates_chars; //Собственно файл 1177 char **templates_lines; //Массив указателей на строки 1178 \ In segment CODE, align 4, keep-with-next 1179 void FreeTemplates(void) 1180 { \ FreeTemplates: \ 00000000 10402DE9 PUSH {R4,LR} 1181 if (templates_lines) mfree(templates_lines); \ 00000004 ........ LDR R4,??DataTable62 ;; popup \ 00000008 2C0494E5 LDR R0,[R4, #+1068] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0000000A BEQ ??FreeTemplates_0 \ 00000014 150000EF SWI +21 1182 if (templates_chars) mfree(templates_chars); \ ??FreeTemplates_0: \ 00000018 280494E5 LDR R0,[R4, #+1064] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0100000A BEQ ??FreeTemplates_1 \ 00000024 150000EF SWI +21 1183 templates_lines=NULL; \ 00000028 0000A0E3 MOV R0,#+0 \ ??FreeTemplates_1: \ 0000002C 2C0484E5 STR R0,[R4, #+1068] 1184 templates_chars=NULL; \ 00000030 280484E5 STR R0,[R4, #+1064] 1185 } \ 00000034 1080BDE8 POP {R4,PC} ;; return 1186 1187 extern const char TEMPLATES_PATH[]; 1188 \ In segment CODE, align 4, keep-with-next 1189 int LoadTemplates(unsigned int uin) 1190 { \ LoadTemplates: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 1191 FSTATS stat; 1192 char fn[256]; 1193 int f; 1194 unsigned int ul; 1195 int i; 1196 int fsize; 1197 char *p; 1198 char *pp; 1199 int c; 1200 FreeTemplates(); 1201 strcpy(fn,TEMPLATES_PATH); 1202 i=strlen(fn); 1203 sprintf(fn+i,"\\%d.txt",uin); \ 00000004 7C619FE5 LDR R6,??LoadTemplates_0 ;; `?` \ 00000008 4BDF4DE2 SUB SP,SP,#+300 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ BL FreeTemplates \ 00000014 ........ LDR R1,??DataTable70 ;; 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 1204 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 1205 if ((fsize=stat.size)<=0) goto L1; \ 00000060 08709DE5 LDR R7,[SP, #+8] \ 00000064 010057E3 CMP R7,#+1 \ 00000068 070000BA BLT ??LoadTemplates_1 1206 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 1207 { 1208 L1: 1209 strcpy(fn+i,"\\0.txt"); \ ??LoadTemplates_1: \ 0000008C 081086E2 ADD R1,R6,#+8 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 1A0000EF SWI +26 1210 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 1211 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 1212 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 1213 } 1214 if (f==-1) return 0; \ ??LoadTemplates_2: \ 000000E0 040058E1 CMP R8,R4 \ 000000E4 F1FFFF0A BEQ ??LoadTemplates_4 1215 p=templates_chars=malloc(fsize+1); \ 000000E8 ........ LDR R4,??DataTable62 ;; popup \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 280484E5 STR R0,[R4, #+1064] \ 000000F8 0060A0E1 MOV R6,R0 1216 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] 1217 fclose(f,&ul); \ 00000118 0D10A0E1 MOV R1,SP \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 0D0000EF SWI +13 1218 i=0; \ 00000124 0070A0E3 MOV R7,#+0 1219 pp=p; \ 00000128 0680A0E1 MOV R8,R6 \ 0000012C 020000EA B ??LoadTemplates_6 1220 for(;;) 1221 { 1222 c=*p; 1223 if (c<32) 1224 { 1225 if (pp&&(pp!=p)) 1226 { 1227 templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 1228 templates_lines[i++]=pp; 1229 } 1230 pp=NULL; 1231 if (!c) break; 1232 *p=0; 1233 } 1234 else 1235 { 1236 if (pp==NULL) pp=p; \ ??LoadTemplates_7: \ 00000130 000058E3 CMP R8,#+0 \ 00000134 0680A001 MOVEQ R8,R6 1237 } 1238 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 2C0494E5 LDR R0,[R4, #+1068] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 2C0484E5 STR R0,[R4, #+1068] \ 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 1239 } 1240 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 `?` 1241 } 1242 1243 1244 //=================================================================== 1245 1246 int RXstate=EOP; //-sizeof(RXpkt)..-1 - receive header, 0..RXpkt.data_len - receive data 1247 \ In segment DATA_Z, align 4, align-sorted 1248 TPKT RXbuf; \ RXbuf: \ 00000000 DS8 16392 \ In segment DATA_Z, align 4, align-sorted 1249 TPKT TXbuf; \ TXbuf: \ 00000000 DS8 16392 1250 1251 int connect_state=0; 1252 1253 int sock=-1; 1254 1255 volatile unsigned long TOTALRECEIVED; 1256 volatile unsigned long TOTALSENDED; 1257 volatile unsigned long ALLTOTALRECEIVED; //by BoBa 10.07 1258 volatile unsigned long ALLTOTALSENDED; 1259 1260 volatile int sendq_l=0; //Длинна очереди для send 1261 volatile void *sendq_p=NULL; //указатель очереди 1262 1263 volatile int is_gprs_online=1; 1264 1265 GBSTMR reconnect_tmr; 1266 1267 extern void kill_data(void *p,void (*func_p)(void *)); 1268 \ In segment CODE, align 4, keep-with-next 1269 void ElfKiller(void) 1270 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 1271 extern void *ELF_BEGIN; 1272 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 1273 } 1274 1275 1276 //=============================================================================================== 1277 #pragma inline 1278 void patch_rect(RECT*rc,int x,int y, int x2, int y2) 1279 { 1280 rc->x=x; 1281 rc->y=y; 1282 rc->x2=x2; 1283 rc->y2=y2; 1284 } 1285 1286 #pragma inline 1287 void patch_header(const HEADER_DESC* head) 1288 { 1289 ((HEADER_DESC*)head)->rc.x=0; 1290 ((HEADER_DESC*)head)->rc.y=YDISP; 1291 ((HEADER_DESC*)head)->rc.x2=ScreenW()-1; 1292 ((HEADER_DESC*)head)->rc.y2=HeaderH()+YDISP-1; 1293 } 1294 #pragma inline 1295 void patch_input(const INPUTDIA_DESC* inp) 1296 { 1297 ((INPUTDIA_DESC*)inp)->rc.x=0; 1298 ((INPUTDIA_DESC*)inp)->rc.y=HeaderH()+1+YDISP; 1299 ((INPUTDIA_DESC*)inp)->rc.x2=ScreenW()-1; 1300 ((INPUTDIA_DESC*)inp)->rc.y2=ScreenH()-SoftkeyH()-1; 1301 } 1302 //=============================================================================================== 1303 1304 1305 volatile unsigned int GROUP_CACHE; //Текущая группа для добавления 1306 \ In segment DATA_Z, align 4, align-sorted 1307 volatile int contactlist_menu_id; \ contactlist_menu_id: \ 00000000 DS8 4 1308 1309 GBSTMR tmr_active; 1310 1311 volatile int edchat_id; 1312 1313 //Применяется для добавления сообщений 1314 //CLIST *edcontact; 1315 //void *edgui_data; 1316 1317 \ In segment DATA_Z, align 4, align-sorted 1318 char clm_hdr_text[48]; \ clm_hdr_text: \ 00000000 DS8 48 1319 static char def_clm_hdr_text[32] = "";//LgpData[LGP_ClTitle]; 1320 static char key_clm_hdr_text[32] = "";//LgpData[LGP_ClT9Inp]; 1321 1322 char clmenu_sk_r[16]; 1323 static char def_clmenu_sk_r[32] = ""; 1324 static char key_clmenu_sk_r[32] = ""; 1325 1326 static const int menusoftkeys[] = {0,1,2}; 1327 1328 static SOFTKEY_DESC menu_sk[] = 1329 { 1330 {0x0018, 0x0000, NULL/*(char*) lgpData[LGP_Select]*/}, 1331 {0x0001, 0x0000, NULL/*(char*) lgpData[LGP_Back]*/}, 1332 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1333 }; 1334 \ In segment CODE, align 4, keep-with-next 1335 void lgpUpdateClHdr() 1336 { \ lgpUpdateClHdr: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1337 strcpy(def_clm_hdr_text, (char*) lgpData[LGP_ClTitle]); \ 00000004 ........ LDR R4,??DataTable62 ;; popup \ 00000008 ........ LDR R5,??DataTable59 ;; lgpData \ 0000000C 3800A0E3 MOV R0,#+56 \ 00000010 041095E5 LDR R1,[R5, #+4] \ 00000014 680D80E3 ORR R0,R0,#0x1A00 \ 00000018 040080E0 ADD R0,R0,R4 \ 0000001C 1A0000EF SWI +26 1338 strcpy(key_clm_hdr_text, (char*) lgpData[LGP_ClT9Inp]); \ 00000020 081095E5 LDR R1,[R5, #+8] \ 00000024 5800A0E3 MOV R0,#+88 \ 00000028 680D80E3 ORR R0,R0,#0x1A00 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 1A0000EF SWI +26 1339 strcpy(def_clmenu_sk_r, (char*) lgpData[LGP_Close]); \ 00000034 201095E5 LDR R1,[R5, #+32] \ 00000038 8800A0E3 MOV R0,#+136 \ 0000003C 680D80E3 ORR R0,R0,#0x1A00 \ 00000040 040080E0 ADD R0,R0,R4 \ 00000044 1A0000EF SWI +26 1340 strcpy(key_clmenu_sk_r, (char*) lgpData[LGP_Clear]); \ 00000048 241095E5 LDR R1,[R5, #+36] \ 0000004C A800A0E3 MOV R0,#+168 \ 00000050 680D80E3 ORR R0,R0,#0x1A00 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 1A0000EF SWI +26 1341 } \ 0000005C 3080BDE8 POP {R4,R5,PC} ;; return 1342 1343 const SOFTKEYSTAB menu_skt = 1344 { 1345 menu_sk, 0 1346 }; 1347 1348 //------------------------------------------------------ 1349 1350 //GBSTMR tmr_ping; 1351 int tenseconds_to_ping; 1352 \ In segment CODE, align 4, keep-with-next 1353 LOGQ *NewLOGQ(const char *s) 1354 { \ NewLOGQ: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1355 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 1356 zeromem(p,sizeof(LOGQ)); \ 00000018 6010A0E3 MOV R1,#+96 \ 0000001C 1D0100EF SWI +285 1357 strcpy(p->text,s); \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 600085E2 ADD R0,R5,#+96 \ 00000028 1A0000EF SWI +26 1358 return p; \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 3080BDE8 POP {R4,R5,PC} ;; return 1359 } 1360 \ In segment CODE, align 4, keep-with-next 1361 LOGQ *LastLOGQ(LOGQ **pp) 1362 { 1363 LOGQ *q=*pp; \ LastLOGQ: \ 00000000 000090E5 LDR R0,[R0, #+0] 1364 if (q) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 1EFF2F01 BXEQ LR \ 0000000C 000000EA B ??LastLOGQ_0 1365 { 1366 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 1367 } 1368 return(q); \ 00000020 1EFF2FE1 BX LR ;; return 1369 } 1370 1371 //Уничтожить лог \ In segment CODE, align 4, keep-with-next 1372 void FreeLOGQ(LOGQ **pp) 1373 { \ FreeLOGQ: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0010A0E1 MOV R1,R0 1374 LOGQ *p=*pp; \ 00000008 000091E5 LDR R0,[R1, #+0] 1375 *pp=NULL; //Сразу обрежем \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 002081E5 STR R2,[R1, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 1376 while(p) 1377 { 1378 LOGQ *np=p->next; \ ??FreeLOGQ_0: \ 0000001C 004090E5 LDR R4,[R0, #+0] 1379 mfree(p); \ 00000020 150000EF SWI +21 1380 p=np; \ 00000024 0400B0E1 MOVS R0,R4 1381 } \ 00000028 FBFFFF1A BNE ??FreeLOGQ_0 1382 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 1383 1384 //Удалить элемент из лога \ In segment CODE, align 4, keep-with-next 1385 void RemoveLOGQ(LOGQ **queue, LOGQ *p) 1386 { \ RemoveLOGQ: \ 00000000 00402DE9 PUSH {LR} 1387 LOGQ *q=(LOGQ *)queue; \ 00000004 000000EA B ??RemoveLOGQ_0 1388 LOGQ *qp; 1389 while(qp=q->next) 1390 { 1391 if (qp==p) 1392 { 1393 q->next=p->next; 1394 break; 1395 } 1396 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] 1397 } 1398 mfree(p); //Если элемент вообще не в логе \ ??RemoveLOGQ_2: \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 150000EF SWI +21 1399 } \ 00000030 0080BDE8 POP {PC} ;; return 1400 1401 //Добавить элемент в лог \ In segment CODE, align 4, keep-with-next 1402 int AddLOGQ(LOGQ **queue, LOGQ *p) 1403 { 1404 LOGQ *q=(LOGQ *)queue; 1405 LOGQ *qp; 1406 int i=0; \ AddLOGQ: \ 00000000 0020A0E3 MOV R2,#+0 \ 00000004 000000EA B ??AddLOGQ_0 1407 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 1408 p->next=NULL; \ 0000001C 003081E5 STR R3,[R1, #+0] 1409 q->next=p; \ 00000020 001080E5 STR R1,[R0, #+0] 1410 return(i+1); //Теперь всего в логе элементов \ 00000024 0200A0E1 MOV R0,R2 \ 00000028 1EFF2FE1 BX LR ;; return 1411 } 1412 1413 //Получаем последний полученный X-статус \ In segment CODE, align 4, keep-with-next 1414 char *GetLastXTextLOGQ(CLIST *t) 1415 { 1416 LOGQ *p = t->log; \ GetLastXTextLOGQ: \ 00000000 681090E5 LDR R1,[R0, #+104] 1417 char *s = 0; \ 00000004 0000A0E3 MOV R0,#+0 1418 if(!p) return 0; \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0500001A BNE ??GetLastXTextLOGQ_0 \ 00000010 1EFF2FE1 BX LR 1419 while(p->next) 1420 { 1421 if((p->type&0x0F)==3) \ ??GetLastXTextLOGQ_1: \ 00000014 0C3091E5 LDR R3,[R1, #+12] \ 00000018 0F3003E2 AND R3,R3,#0xF \ 0000001C 030053E3 CMP R3,#+3 1422 s = p->text; \ 00000020 60008102 ADDEQ R0,R1,#+96 1423 p = p->next; \ 00000024 0210A0E1 MOV R1,R2 1424 } \ ??GetLastXTextLOGQ_0: \ 00000028 002091E5 LDR R2,[R1, #+0] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 F7FFFF1A BNE ??GetLastXTextLOGQ_1 1425 if((p->type&0x0F)==3) \ 00000034 0C2091E5 LDR R2,[R1, #+12] \ 00000038 0F2002E2 AND R2,R2,#0xF \ 0000003C 030052E3 CMP R2,#+3 1426 s = p->text; \ 00000040 60008102 ADDEQ R0,R1,#+96 1427 return s; \ 00000044 1EFF2FE1 BX LR ;; return 1428 } 1429 \ In segment CODE, align 4, keep-with-next 1430 int GetIconIndex(CLIST *t) 1431 { 1432 unsigned short s; 1433 if (t) \ GetIconIndex: \ 00000000 000050E3 CMP R0,#+0 \ 00000004 3400000A BEQ ??GetIconIndex_0 1434 { 1435 s=t->state; 1436 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 1437 if (t->isunread) \ 0000001C 5C0090E5 LDR R0,[R0, #+92] \ 00000020 000050E3 CMP R0,#+0 1438 return(IS_MSG); \ 00000024 0D00A013 MOVNE R0,#+13 \ 00000028 1EFF2F11 BXNE LR 1439 else 1440 { 1441 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 1442 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 1443 if ((s&0xF000)==0x3000) return (IS_EVIL); \ 0000004C C00D52E3 CMP R2,#+12288 \ 00000050 0700A003 MOVEQ R0,#+7 \ 00000054 1EFF2F01 BXEQ LR 1444 if ((s&0xF000)==0x4000) return (IS_DEPRESSION); \ 00000058 400C52E3 CMP R2,#+16384 \ 0000005C 0600A003 MOVEQ R0,#+6 \ 00000060 1EFF2F01 BXEQ LR 1445 if ((s&0xF000)==0x5000) return (IS_HOME); \ 00000064 500C52E3 CMP R2,#+20480 \ 00000068 0800A003 MOVEQ R0,#+8 \ 0000006C 1EFF2F01 BXEQ LR 1446 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 1447 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 1448 if (s & 0x0001) return(IS_AWAY); \ ??GetIconIndex_1: \ 00000090 010011E3 TST R1,#0x1 \ 00000094 0200A013 MOVNE R0,#+2 \ 00000098 1EFF2F11 BXNE LR 1449 if (s & 0x0005) return(IS_NA); \ 0000009C 050011E3 TST R1,#0x5 \ 000000A0 0300A013 MOVNE R0,#+3 \ 000000A4 1EFF2F11 BXNE LR 1450 if (s & 0x0011) return(IS_OCCUPIED); \ 000000A8 110011E3 TST R1,#0x11 \ 000000AC 0400A013 MOVNE R0,#+4 \ 000000B0 1EFF2F11 BXNE LR 1451 if (s & 0x0013) return(IS_DND); \ 000000B4 130011E3 TST R1,#0x13 \ 000000B8 0500A013 MOVNE R0,#+5 \ 000000BC 1EFF2F11 BXNE LR 1452 if (s & 0x0002) return(IS_FFC); \ 000000C0 020011E3 TST R1,#0x2 \ 000000C4 EFFFFF1A BNE ??GetIconIndex_2 1453 if (s & 0x0100) return(IS_INVISIBLE); \ 000000C8 400F11E3 TST R1,#0x100 \ 000000CC 0100A013 MOVNE R0,#+1 \ 000000D0 1EFF2F11 BXNE LR 1454 } 1455 } 1456 else 1457 { 1458 return(IS_UNKNOWN); 1459 } 1460 return(IS_ONLINE); \ 000000D4 0B00A0E3 MOV R0,#+11 \ 000000D8 1EFF2FE1 BX LR \ ??GetIconIndex_0: \ 000000DC 0E00A0E3 MOV R0,#+14 \ 000000E0 1EFF2FE1 BX LR ;; return 1461 } 1462 \ In segment CODE, align 4, keep-with-next 1463 LOGQ *FindContactLOGQByAck(TPKT *p) 1464 { \ FindContactLOGQByAck: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1465 CLIST *t; 1466 LockSched(); \ 00000008 460100EF SWI +326 1467 t=FindContactByUin(p->pkt.uin); \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000014 0050A0E1 MOV R5,R0 1468 UnlockSched(); \ 00000018 470100EF SWI +327 1469 unsigned int id=*((unsigned short*)(p->data)); \ 0000001C B840D4E1 LDRH R4,[R4, #+8] 1470 LOGQ *q; 1471 if (!t) return NULL; \ 00000020 000055E3 CMP R5,#+0 \ 00000024 0000A003 MOVEQ R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 1472 LockSched(); \ 0000002C 460100EF SWI +326 1473 q=t->log; \ 00000030 685095E5 LDR R5,[R5, #+104] \ 00000034 000000EA B ??FindContactLOGQByAck_0 1474 while(q) 1475 { 1476 if (q->ID==id) break; 1477 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 1478 } 1479 UnlockSched(); \ 0000004C 470100EF SWI +327 1480 return q; \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return 1481 } 1482 \ In segment CODE, align 4, keep-with-next 1483 void ClearContactT9Key(void) 1484 { 1485 zeromem(ContactT9Key,sizeof(ContactT9Key)); \ ClearContactT9Key: \ 00000000 ........ LDR R0,??DataTable60 ;; popup + 1768 \ 00000004 00402DE9 PUSH {LR} \ 00000008 2010A0E3 MOV R1,#+32 \ 0000000C 1D0100EF SWI +285 1486 } \ 00000010 0080BDE8 POP {PC} ;; return 1487 \ In segment CODE, align 4, keep-with-next 1488 void AddContactT9Key(int chr) 1489 { \ AddContactT9Key: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1490 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R5,??DataTable62 ;; popup \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C E800A0E3 MOV R0,#+232 \ 00000010 600E80E3 ORR R0,R0,#0x600 \ 00000014 050080E0 ADD R0,R0,R5 \ 00000018 1B0000EF SWI +27 1491 if (l<(sizeof(ContactT9Key)-1)) \ 0000001C 1F0050E3 CMP R0,#+31 1492 { 1493 ContactT9Key[l]=chr; \ 00000020 05008030 ADDCC R0,R0,R5 \ 00000024 E846C035 STRBCC R4,[R0, #+1768] 1494 } 1495 } \ 00000028 3080BDE8 POP {R4,R5,PC} ;; return 1496 \ In segment CODE, align 4, keep-with-next 1497 void BackSpaceContactT9(void) 1498 { \ BackSpaceContactT9: \ 00000000 10402DE9 PUSH {R4,LR} 1499 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R4,??DataTable62 ;; popup \ 00000008 E800A0E3 MOV R0,#+232 \ 0000000C 600E80E3 ORR R0,R0,#0x600 \ 00000010 040080E0 ADD R0,R0,R4 \ 00000014 1B0000EF SWI +27 1500 if (l) \ 00000018 000050E3 CMP R0,#+0 1501 { 1502 l--; 1503 ContactT9Key[l]=0; \ 0000001C 04008010 ADDNE R0,R0,R4 \ 00000020 0010A013 MOVNE R1,#+0 \ 00000024 E716C015 STRBNE R1,[R0, #+1767] 1504 } 1505 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 1506 1507 1508 \ In segment CODE, align 4, keep-with-next 1509 void GetOnTotalContact(int group_id,int *_onlinetotal) 1510 { 1511 CLIST *t; 1512 t=(CLIST *)&cltop; \ GetOnTotalContact: \ 00000000 ........ LDR R2,??DataTable63 ;; popup + 768 \ 00000004 30002DE9 PUSH {R4,R5} 1513 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 1514 while((t=t->next)) 1515 { 1516 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 1517 { 1518 total++; 1519 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 1520 } 1521 } \ ??GetOnTotalContact_0: \ 00000040 002092E5 LDR R2,[R2, #+0] \ 00000044 000052E3 CMP R2,#+0 \ 00000048 F3FFFF1A BNE ??GetOnTotalContact_1 1522 _onlinetotal[0]=online; \ 0000004C 003081E5 STR R3,[R1, #+0] 1523 _onlinetotal[1]=total; \ 00000050 04C081E5 STR R12,[R1, #+4] 1524 } \ 00000054 3000BDE8 POP {R4,R5} \ 00000058 1EFF2FE1 BX LR ;; return 1525 1526 1527 //------------------------------------------------------ 1528 1529 1530 //=============================================================================================== 1531 int DNR_ID=0; 1532 int DNR_TRIES=3; 1533 1534 extern const char NATICQ_HOST[]; 1535 extern const unsigned int NATICQ_PORT; 1536 extern const unsigned int RECONNECT_TIME; 1537 char hostname[128]; 1538 int host_counter = 0; 1539 1540 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 1541 const char *GetHost(int cnt, const char *str, char *buf) 1542 { 1543 const char *tmp = str, *begin, *end; \ GetHost: \ 00000000 0130A0E1 MOV R3,R1 1544 if(cnt) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0100001A BNE ??GetHost_0 \ 0000000C 180000EA B ??GetHost_1 1545 { 1546 for(;cnt;cnt--) 1547 { 1548 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 1549 if(!*str) str = tmp; \ 00000030 00005CE3 CMP R12,#+0 \ 00000034 0200001A BNE ??GetHost_3 \ 00000038 0310A0E1 MOV R1,R3 \ 0000003C 000000EA B ??GetHost_3 1550 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 1551 if(!*str) str = tmp; \ ??GetHost_5: \ 00000064 00005CE3 CMP R12,#+0 \ 00000068 0310A001 MOVEQ R1,R3 1552 } \ 0000006C 010050E2 SUBS R0,R0,#+1 \ 00000070 E7FFFF1A BNE ??GetHost_0 1553 } 1554 tmp = buf; \ ??GetHost_1: \ 00000074 0200A0E1 MOV R0,R2 1555 begin = str; \ 00000078 0130A0E1 MOV R3,R1 \ 0000007C 000000EA B ??GetHost_6 1556 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 1557 end = str; 1558 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 1570 } 1571 } 1572 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 1573 int GetPort(int cnt, const char *str) 1574 { \ GetPort: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 1575 const char *tmp = str; \ 00000008 01C0A0E1 MOV R12,R1 1576 char numbuf[6], numcnt = 0; \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 0030A0E3 MOV R3,#+0 1577 if(cnt) \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0100001A BNE ??GetPort_0 \ 0000001C 180000EA B ??GetPort_1 1578 { 1579 for(;cnt;cnt--) 1580 { 1581 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 1582 if(!*str) str = tmp; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 0200001A BNE ??GetPort_3 \ 00000048 0C10A0E1 MOV R1,R12 \ 0000004C 000000EA B ??GetPort_3 1583 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 1584 if(!*str) str = tmp; \ ??GetPort_5: \ 00000074 000054E3 CMP R4,#+0 \ 00000078 0C10A001 MOVEQ R1,R12 1585 } \ 0000007C 010050E2 SUBS R0,R0,#+1 \ 00000080 E7FFFF1A BNE ??GetPort_0 1586 } 1587 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 1588 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} 1589 str++; 1590 numbuf[5] = 0; \ 000000BC 0520CDE5 STRB R2,[SP, #+5] \ 000000C0 030000EA B ??GetPort_7 1591 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 1592 numbuf[numcnt] = 0; \ ??GetPort_9: \ 00000100 0020C0E5 STRB R2,[R0, #+0] 1593 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 1594 1595 } 1596 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 1597 int GetHostsCount(const char *str) 1598 { 1599 char cnt = 1; \ GetHostsCount: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 000000EA B ??GetHostsCount_0 1600 for(;cnt;cnt++) 1601 { 1602 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 1603 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 1604 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 1605 if(!*str) return cnt; \ ??GetHostsCount_5: \ 0000005C 000052E3 CMP R2,#+0 \ 00000060 F2FFFF0A BEQ ??GetHostsCount_3 1606 } \ 00000064 011081E2 ADD R1,R1,#+1 \ 00000068 FF1011E2 ANDS R1,R1,#0xFF \ 0000006C E6FFFF1A BNE ??GetHostsCount_0 1607 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 1EFF2FE1 BX LR ;; return 1608 1609 } 1610 //--------------------------------------------------------------------------- 1611 \ In segment CODE, align 4, keep-with-next 1612 void create_connect(void) 1613 { \ create_connect: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 1614 char hostbuf[128]; 1615 int hostport; 1616 int ***p_res=NULL; 1617 void do_reconnect(void); 1618 SOCK_ADDR sa; 1619 //Устанавливаем соединение 1620 connect_state = 0; \ 00000004 ........ LDR R5,??DataTable74 ;; popup 1621 int err; 1622 unsigned int ip; 1623 GBS_DelTimer(&reconnect_tmr); 1624 if (!IsGPRSEnabled()) \ 00000008 E8829FE5 LDR R8,??create_connect_0 ;; `?` \ 0000000C 98D04DE2 SUB SP,SP,#+152 \ 00000010 0040A0E3 MOV R4,#+0 \ 00000014 00408DE5 STR R4,[SP, #+0] \ 00000018 344485E5 STR R4,[R5, #+1076] \ 0000001C 1800A0E3 MOV R0,#+24 \ 00000020 680D80E3 ORR R0,R0,#0x1A00 \ 00000024 056080E0 ADD R6,R0,R5 \ 00000028 0600A0E1 MOV R0,R6 \ 0000002C 8C0100EF SWI +396 \ 00000030 8800A0E3 MOV R0,#+136 \ 00000034 5C0D80E3 ORR R0,R0,#0x1700 \ 00000038 057080E0 ADD R7,R0,R5 \ 0000003C A70000EF SWI +167 \ 00000040 000050E3 CMP R0,#+0 \ 00000044 0400001A BNE ??create_connect_1 1625 { 1626 is_gprs_online=0; \ 00000048 544485E5 STR R4,[R5, #+1108] 1627 strcpy(logmsg,LG_GRWAITFORGPRS); \ 0000004C 0810A0E1 MOV R1,R8 \ 00000050 0700A0E1 MOV R0,R7 \ 00000054 1A0000EF SWI +26 1628 SMART_REDRAW(); \ 00000058 840000EA B ??create_connect_2 1629 return; 1630 } 1631 DNR_ID=0; 1632 *socklasterr()=0; 1633 1634 if(host_counter > GetHostsCount(NATICQ_HOST)-1) host_counter = 0; \ ??create_connect_1: \ 0000005C 98929FE5 LDR R9,??create_connect_0+0x4 ;; NATICQ_HOST 1635 GetHost(host_counter, NATICQ_HOST, hostbuf); 1636 hostport = GetPort(host_counter, NATICQ_HOST); 1637 host_counter++; 1638 1639 sprintf(hostname, "%s:%d", hostbuf, hostport); 1640 1641 SMART_REDRAW(); 1642 1643 ip=str2ip(hostbuf); \ 00000060 ........ LDR R10,??DataTable65 ;; do_reconnect \ 00000064 644485E5 STR R4,[R5, #+1124] \ 00000068 7C8100EF SWI +33148 \ 0000006C 004080E5 STR R4,[R0, #+0] \ 00000070 0900A0E1 MOV R0,R9 \ 00000074 ........ BL GetHostsCount \ 00000078 6C1495E5 LDR R1,[R5, #+1132] \ 0000007C 010040E2 SUB R0,R0,#+1 \ 00000080 010050E1 CMP R0,R1 \ 00000084 6C4485B5 STRLT R4,[R5, #+1132] \ 00000088 6C0495E5 LDR R0,[R5, #+1132] \ 0000008C 18208DE2 ADD R2,SP,#+24 \ 00000090 0910A0E1 MOV R1,R9 \ 00000094 ........ BL GetHost \ 00000098 6C0495E5 LDR R0,[R5, #+1132] \ 0000009C 0910A0E1 MOV R1,R9 \ 000000A0 ........ BL GetPort \ 000000A4 0090A0E1 MOV R9,R0 \ 000000A8 6C0495E5 LDR R0,[R5, #+1132] \ 000000AC C810A0E3 MOV R1,#+200 \ 000000B0 010080E2 ADD R0,R0,#+1 \ 000000B4 6C0485E5 STR R0,[R5, #+1132] \ 000000B8 681D81E3 ORR R1,R1,#0x1A00 \ 000000BC 051081E0 ADD R1,R1,R5 \ 000000C0 04108DE5 STR R1,[SP, #+4] \ 000000C4 04009DE5 LDR R0,[SP, #+4] \ 000000C8 0930A0E1 MOV R3,R9 \ 000000CC 18208DE2 ADD R2,SP,#+24 \ 000000D0 181088E2 ADD R1,R8,#+24 \ 000000D4 160000EF SWI +22 \ 000000D8 ........ BL SMART_REDRAW \ 000000DC 18008DE2 ADD R0,SP,#+24 \ 000000E0 B70100EF SWI +439 \ 000000E4 04B0E0E1 MVN R11,R4 \ 000000E8 0B0050E1 CMP R0,R11 \ 000000EC 0500000A BEQ ??create_connect_3 1644 if (ip!=0xFFFFFFFF) 1645 { 1646 sa.ip=ip; \ 000000F0 0C008DE5 STR R0,[SP, #+12] 1647 strcpy(logmsg,"Connect by IP!"); \ 000000F4 201088E2 ADD R1,R8,#+32 \ 000000F8 0700A0E1 MOV R0,R7 \ 000000FC 1A0000EF SWI +26 1648 SMART_REDRAW(); \ 00000100 ........ BL SMART_REDRAW 1649 goto L_CONNECT; \ 00000104 320000EA B ??create_connect_4 1650 } 1651 strcpy(logmsg,LG_GRSENDDNR); \ ??create_connect_3: \ 00000108 301088E2 ADD R1,R8,#+48 \ 0000010C 0700A0E1 MOV R0,R7 \ 00000110 1A0000EF SWI +26 1652 SMART_REDRAW(); \ 00000114 ........ BL SMART_REDRAW 1653 err=async_gethostbyname(hostbuf,&p_res,&DNR_ID); //03461351 3<70<19<81 \ 00000118 6400A0E3 MOV R0,#+100 \ 0000011C 400E80E3 ORR R0,R0,#0x400 \ 00000120 052080E0 ADD R2,R0,R5 \ 00000124 0D10A0E1 MOV R1,SP \ 00000128 18008DE2 ADD R0,SP,#+24 \ 0000012C B60100EF SWI +438 \ 00000130 0030B0E1 MOVS R3,R0 1654 if (err) \ 00000134 1600000A BEQ ??create_connect_5 1655 { 1656 if ((err==0xC9)||(err==0xD6)) \ 00000138 C90053E3 CMP R3,#+201 \ 0000013C D6005313 CMPNE R3,#+214 \ 00000140 0600001A BNE ??create_connect_6 1657 { 1658 if (DNR_ID) \ 00000144 640495E5 LDR R0,[R5, #+1124] \ 00000148 000050E3 CMP R0,#+0 \ 0000014C 1000000A BEQ ??create_connect_5 1659 { 1660 host_counter--; \ 00000150 6C0495E5 LDR R0,[R5, #+1132] \ 00000154 010040E2 SUB R0,R0,#+1 \ 00000158 6C0485E5 STR R0,[R5, #+1132] 1661 return; //Ждем готовности DNR \ 0000015C 440000EA B ??create_connect_7 1662 } 1663 } 1664 else 1665 { 1666 snprintf(logmsg,255,LG_GRDNRERROR,err); \ ??create_connect_6: \ 00000160 3C2088E2 ADD R2,R8,#+60 \ 00000164 FF10A0E3 MOV R1,#+255 \ 00000168 0700A0E1 MOV R0,R7 \ 0000016C 1B0100EF SWI +283 1667 SMART_REDRAW(); \ 00000170 ........ BL SMART_REDRAW 1668 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ ??create_connect_8: \ 00000174 ........ LDR R0,??DataTable66 ;; RECONNECT_TIME \ 00000178 0A20A0E1 MOV R2,R10 \ 0000017C 000090E5 LDR R0,[R0, #+0] \ 00000180 D830A0E3 MOV R3,#+216 \ 00000184 930001E0 MUL R1,R3,R0 \ 00000188 0600A0E1 MOV R0,R6 \ 0000018C 4D0000EF SWI +77 1669 return; \ 00000190 370000EA B ??create_connect_7 1670 } 1671 } 1672 if (p_res) \ ??create_connect_5: \ 00000194 00009DE5 LDR R0,[SP, #+0] \ 00000198 000050E3 CMP R0,#+0 \ 0000019C 4A00000A BEQ ??create_connect_9 1673 { 1674 if (p_res[3]) \ 000001A0 0C0090E5 LDR R0,[R0, #+12] \ 000001A4 000050E3 CMP R0,#+0 \ 000001A8 5000000A BEQ ??create_connect_10 1675 { 1676 strcpy(logmsg,LG_GRDNROK); \ 000001AC 4C1088E2 ADD R1,R8,#+76 \ 000001B0 0700A0E1 MOV R0,R7 \ 000001B4 1A0000EF SWI +26 1677 SMART_REDRAW(); \ 000001B8 ........ BL SMART_REDRAW 1678 DNR_TRIES=0; \ 000001BC 684485E5 STR R4,[R5, #+1128] 1679 sa.ip=p_res[3][0][0]; \ 000001C0 00109DE5 LDR R1,[SP, #+0] \ 000001C4 0C1091E5 LDR R1,[R1, #+12] \ 000001C8 001091E5 LDR R1,[R1, #+0] \ 000001CC 001091E5 LDR R1,[R1, #+0] \ 000001D0 0C108DE5 STR R1,[SP, #+12] 1680 L_CONNECT: 1681 sprintf(hostname, "%s:%d\n(IP: %d.%d.%d.%d)", hostbuf, hostport, 1682 sa.ip&0xFF, (sa.ip>>8)&0xFF, (sa.ip>>16)&0xFF, (sa.ip>>24)&0xFF); \ ??create_connect_4: \ 000001D4 0C009DE5 LDR R0,[SP, #+12] \ 000001D8 0930A0E1 MOV R3,R9 \ 000001DC 201CA0E1 LSR R1,R0,#+24 \ 000001E0 02002DE9 PUSH {R1} \ 000001E4 FF10A0E3 MOV R1,#+255 \ 000001E8 201801E0 AND R1,R1,R0, LSR #+16 \ 000001EC 02002DE9 PUSH {R1} \ 000001F0 FF10A0E3 MOV R1,#+255 \ 000001F4 201401E0 AND R1,R1,R0, LSR #+8 \ 000001F8 02002DE9 PUSH {R1} \ 000001FC FF0000E2 AND R0,R0,#0xFF \ 00000200 01002DE9 PUSH {R0} \ 00000204 14009DE5 LDR R0,[SP, #+20] \ 00000208 28208DE2 ADD R2,SP,#+40 \ 0000020C 641088E2 ADD R1,R8,#+100 \ 00000210 160000EF SWI +22 1683 1684 sock=socket(1,1,0); \ 00000214 0020A0E3 MOV R2,#+0 \ 00000218 0110A0E3 MOV R1,#+1 \ 0000021C 0100A0E1 MOV R0,R1 \ 00000220 730100EF SWI +371 \ 00000224 380485E5 STR R0,[R5, #+1080] 1685 if (sock!=-1) \ 00000228 0B0050E1 CMP R0,R11 \ 0000022C 10D08DE2 ADD SP,SP,#+16 \ 00000230 1B00000A BEQ ??create_connect_11 1686 { 1687 sa.family=1; \ 00000234 0170A0E3 MOV R7,#+1 \ 00000238 B870CDE1 STRH R7,[SP, #+8] 1688 sa.port=htons(hostport); \ 0000023C 0908A0E1 MOV R0,R9, LSL #+16 \ 00000240 2008A0E1 MOV R0,R0, LSR #+16 \ 00000244 7A0100EF SWI +378 \ 00000248 BA00CDE1 STRH R0,[SP, #+10] 1689 // sa.ip=htonl(IP_ADDR(82,207,89,182)); 1690 if (connect(sock,&sa,sizeof(sa))!=-1) \ 0000024C 380495E5 LDR R0,[R5, #+1080] \ 00000250 1020A0E3 MOV R2,#+16 \ 00000254 08108DE2 ADD R1,SP,#+8 \ 00000258 740100EF SWI +372 \ 0000025C 0B0050E1 CMP R0,R11 \ 00000260 0500000A BEQ ??create_connect_12 1691 { 1692 connect_state=1; \ 00000264 347485E5 STR R7,[R5, #+1076] 1693 TOTALRECEIVED=0; \ 00000268 3C4485E5 STR R4,[R5, #+1084] 1694 TOTALSENDED=0; \ 0000026C 404485E5 STR R4,[R5, #+1088] 1695 SMART_REDRAW(); \ ??create_connect_2: \ 00000270 ........ BL SMART_REDRAW \ ??create_connect_7: \ 00000274 98D08DE2 ADD SP,SP,#+152 \ 00000278 F08FBDE8 POP {R4-R11,PC} 1696 } 1697 else 1698 { 1699 closesocket(sock); \ ??create_connect_12: \ 0000027C 380495E5 LDR R0,[R5, #+1080] \ 00000280 760100EF SWI +374 1700 sock=-1; \ 00000284 38B485E5 STR R11,[R5, #+1080] 1701 LockSched(); \ 00000288 460100EF SWI +326 1702 ShowMSG(1,(int)lgpData[LGP_MsgCantConn]); \ 0000028C 6C009FE5 LDR R0,??create_connect_0+0x8 ;; lgpData + 320 \ 00000290 001090E5 LDR R1,[R0, #+0] \ 00000294 0100A0E3 MOV R0,#+1 \ 00000298 480100EF SWI +328 1703 UnlockSched(); \ 0000029C 470100EF SWI +327 1704 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 000002A0 B3FFFFEA B ??create_connect_8 1705 } 1706 } 1707 else 1708 { 1709 LockSched(); \ ??create_connect_11: \ 000002A4 460100EF SWI +326 1710 ShowMSG(1,(int)lgpData[LGP_MsgCantCrSc]); \ 000002A8 54009FE5 LDR R0,??create_connect_0+0xC ;; lgpData + 324 \ 000002AC 001090E5 LDR R1,[R0, #+0] \ 000002B0 0100A0E3 MOV R0,#+1 \ 000002B4 480100EF SWI +328 1711 UnlockSched(); \ 000002B8 470100EF SWI +327 1712 //Не осилили создания сокета, закрываем GPRS-сессию 1713 GPRS_OnOff(0,1); \ 000002BC 0110A0E3 MOV R1,#+1 \ 000002C0 0000A0E3 MOV R0,#+0 \ 000002C4 8E0100EF SWI +398 \ 000002C8 E9FFFFEA B ??create_connect_7 1714 } 1715 } 1716 } 1717 else 1718 { 1719 DNR_TRIES--; \ ??create_connect_9: \ 000002CC 680495E5 LDR R0,[R5, #+1128] \ 000002D0 010040E2 SUB R0,R0,#+1 \ 000002D4 680485E5 STR R0,[R5, #+1128] 1720 LockSched(); \ 000002D8 460100EF SWI +326 1721 ShowMSG(1,(int)lgpData[LGP_MsgHostNFnd]); \ 000002DC 24009FE5 LDR R0,??create_connect_0+0x10 ;; lgpData + 328 \ 000002E0 001090E5 LDR R1,[R0, #+0] \ 000002E4 0100A0E3 MOV R0,#+1 \ 000002E8 480100EF SWI +328 1722 UnlockSched(); \ 000002EC 470100EF SWI +327 \ ??create_connect_10: \ 000002F0 98D08DE2 ADD SP,SP,#+152 ;; stack cleaning \ 000002F4 F08FBDE8 POP {R4-R11,PC} ;; return \ ??create_connect_0: \ 000002F8 ........ DC32 `?` \ 000002FC ........ DC32 NATICQ_HOST \ 00000300 ........ DC32 lgpData + 320 \ 00000304 ........ DC32 lgpData + 324 \ 00000308 ........ DC32 lgpData + 328 1723 } 1724 } 1725 1726 #ifdef SEND_TIMER 1727 GBSTMR send_tmr; 1728 #endif 1729 \ In segment CODE, align 4, keep-with-next 1730 void ClearSendQ(void) 1731 { \ ClearSendQ: \ 00000000 10402DE9 PUSH {R4,LR} 1732 mfree((void *)sendq_p); \ 00000004 ........ LDR R4,??DataTable74 ;; popup \ 00000008 500494E5 LDR R0,[R4, #+1104] \ 0000000C 150000EF SWI +21 1733 sendq_p=NULL; \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 500484E5 STR R0,[R4, #+1104] 1734 sendq_l=NULL; \ 00000018 4C0484E5 STR R0,[R4, #+1100] 1735 #ifdef GUI_INTERFACE 1736 SMART_REDRAW(); \ 0000001C ........ BL SMART_REDRAW 1737 #endif 1738 #ifdef SEND_TIMER 1739 GBS_DelTimer(&send_tmr); \ 00000020 4800A0E3 MOV R0,#+72 \ 00000024 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000028 040080E0 ADD R0,R0,R4 \ 0000002C 8C0100EF SWI +396 1740 #endif 1741 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 1742 1743 1744 /* 1745 int Is_Pleer_Run() 1746 { 1747 #ifdef ELKA 1748 #define HOBJ_LOC 0x54 1749 #else 1750 #define HOBJ_LOC 0x50 1751 #endif 1752 1753 unsigned int playercsmid=0; 1754 void *playercsmadr=NULL; 1755 //el=A087B454 e=A087109C 1756 char CSMADR[9]; 1757 int hobj=0; 1758 CSM_RAM *csmp; 1759 char *phone = Get_Phone_Info(PI_MODEL); 1760 1761 zeromem(CSMADR,9); 1762 1763 if(!strcmp_nocase(phone,"E71")) strcpy(CSMADR,"A087109C"); 1764 if(!strcmp_nocase(phone,"EL71")) strcpy(CSMADR,"A087B454"); 1765 1766 playercsmadr=(void *)strtoul(CSMADR,NULL,16); 1767 1768 CSM_RAM *p=CSM_root()->csm_q->csm.first; 1769 while(p) 1770 { 1771 if (p->constr==playercsmadr) break; 1772 p=p->next; 1773 } 1774 if (p) 1775 { 1776 playercsmid=p->id; 1777 csmp=FindCSMbyID(playercsmid); 1778 } 1779 1780 if(playercsmid) 1781 { 1782 hobj = ((int*)csmp)[HOBJ_LOC/4]; 1783 if (hobj) return 1; 1784 } 1785 return 0; 1786 } 1787 */ \ In segment CODE, align 4, keep-with-next 1788 void end_socket(void) 1789 { \ end_socket: \ 00000000 10402DE9 PUSH {R4,LR} 1790 if (sock>=0) \ 00000004 ........ LDR R4,??DataTable74 ;; popup \ 00000008 380494E5 LDR R0,[R4, #+1080] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0300004A BMI ??end_socket_0 1791 { 1792 shutdown(sock,2); \ 00000014 0210A0E3 MOV R1,#+2 \ 00000018 770100EF SWI +375 1793 closesocket(sock); \ 0000001C 380494E5 LDR R0,[R4, #+1080] \ 00000020 760100EF SWI +374 1794 } 1795 1796 // if(!Is_Pleer_Run()) 1797 Play(sndLostConn); \ ??end_socket_0: \ 00000024 14009FE5 LDR R0,??end_socket_1 ;; sndLostConn \ 00000028 ........ BL Play 1798 #ifdef SEND_TIMER 1799 GBS_DelTimer(&send_tmr); \ 0000002C 4800A0E3 MOV R0,#+72 \ 00000030 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 8C0100EF SWI +396 1800 #endif 1801 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??end_socket_1: \ 00000040 ........ DC32 sndLostConn 1802 1803 #ifdef SEND_TIMER \ In segment CODE, align 4, keep-with-next 1804 static void resend(void) 1805 { 1806 void SendAnswer(int dummy, TPKT *p); 1807 SUBPROC((void*)SendAnswer,0,0); \ resend: \ 00000000 ........ LDR R0,??DataTable73 ;; SendAnswer \ 00000004 00402DE9 PUSH {LR} \ 00000008 0020A0E3 MOV R2,#+0 \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 710100EF SWI +369 1808 } \ 00000014 0080BDE8 POP {PC} ;; return 1809 #endif 1810 1811 #define ac 35 1812 #define af 36 1813 /* 1814 void _SendAnswer(int dummy, TPKT *p); 1815 void SendAnswer(int dummy, TPKT *p){ 1816 if(p->pkt.type==T_SETCLIENT_ID) 1817 { 1818 char rev[9]="Sie_3565"; //??? ???? ?????? ?????? auth.r79 1819 memcpy(p->data,rev,8); 1820 } 1821 if(p->pkt.type==T_REQLOGIN 1822 ||p->pkt.type==T_SETCLIENT_ID 1823 ||p->pkt.type==35) 1824 { 1825 _SendAnswer(0,p); 1826 } 1827 } 1828 1829 void Send_36(){ 1830 TPKT *p=malloc(sizeof(PKT)+1); 1831 zeromem(p,sizeof(PKT)+1); 1832 p->pkt.type=36; 1833 p->pkt.data_len=1; 1834 SUBPROC((void *)_SendAnswer,0,p); 1835 } 1836 */ 1837 \ In segment CODE, align 4, keep-with-next 1838 char *get_rev() 1839 { 1840 char rev[9] = ""; 1841 char txt[4]; 1842 int f; 1843 unsigned int err; 1844 char fn[64]; 1845 1846 1847 strcpy(fn,TEMPLATES_PATH); \ get_rev: \ 00000000 ........ LDR R1,??DataTable70 ;; TEMPLATES_PATH \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 88409FE5 LDR R4,??get_rev_0 ;; `?_1` \ 0000000C 54D04DE2 SUB SP,SP,#+84 \ 00000010 2C0094E8 LDM R4,{R2,R3,R5} \ 00000014 08008DE2 ADD R0,SP,#+8 \ 00000018 2C0080E8 STM R0,{R2,R3,R5} \ 0000001C 14008DE2 ADD R0,SP,#+20 \ 00000020 1A0000EF SWI +26 1848 strcat(fn,"\\rev.txt"); \ 00000024 0C1084E2 ADD R1,R4,#+12 \ 00000028 14008DE2 ADD R0,SP,#+20 \ 0000002C 170000EF SWI +23 1849 f = fopen(fn,A_ReadOnly + A_BIN,P_READ, &err ); \ 00000030 04308DE2 ADD R3,SP,#+4 \ 00000034 8020A0E3 MOV R2,#+128 \ 00000038 801CA0E3 MOV R1,#+32768 \ 0000003C 14008DE2 ADD R0,SP,#+20 \ 00000040 0A0000EF SWI +10 \ 00000044 0050A0E1 MOV R5,R0 1850 1851 if( f != -1) \ 00000048 010075E3 CMN R5,#+1 \ 0000004C 0600000A BEQ ??get_rev_1 1852 { 1853 fread(f, txt, 4, &err); \ 00000050 04308DE2 ADD R3,SP,#+4 \ 00000054 0420A0E3 MOV R2,#+4 \ 00000058 0D10A0E1 MOV R1,SP \ 0000005C 0B0000EF SWI +11 1854 snprintf(rev,8,"Sie_%s",txt); \ 00000060 0D30A0E1 MOV R3,SP \ 00000064 182084E2 ADD R2,R4,#+24 \ 00000068 010000EA B ??get_rev_2 1855 } 1856 else 1857 snprintf(rev,8,"Sie_3689",txt); \ ??get_rev_1: \ 0000006C 0D30A0E1 MOV R3,SP \ 00000070 202084E2 ADD R2,R4,#+32 \ ??get_rev_2: \ 00000074 0810A0E3 MOV R1,#+8 \ 00000078 08008DE2 ADD R0,SP,#+8 \ 0000007C 1B0100EF SWI +283 1858 1859 fclose(f,&err); \ 00000080 04108DE2 ADD R1,SP,#+4 \ 00000084 0500A0E1 MOV R0,R5 \ 00000088 0D0000EF SWI +13 1860 rev[8] = 0; 1861 return rev; ^ Warning[Pe1056]: returning pointer to local variable \ 0000008C 08008DE2 ADD R0,SP,#+8 \ 00000090 54D08DE2 ADD SP,SP,#+84 \ 00000094 3080BDE8 POP {R4,R5,PC} ;; return \ ??get_rev_0: \ 00000098 ........ DC32 `?_1` 1862 } 1863 1864 \ In segment CODE, align 4, keep-with-next 1865 void SendAnswer(int dummy, TPKT *p) 1866 { \ SendAnswer: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 0CD04DE2 SUB SP,SP,#+12 1867 if(p->pkt.type==T_SETCLIENT_ID) \ 00000008 BC419FE5 LDR R4,??SendAnswer_0 ;; `?` \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 B400D5E1 LDRH R0,[R5, #+4] \ 00000014 200050E3 CMP R0,#+32 \ 00000018 0600001A BNE ??SendAnswer_1 1868 { 1869 char rev[9]="Sie_3680";//"Sie_3593";//"Sie_3565"; //??? ???? ?????? ?????? auth.r79 \ 0000001C 4C0094E8 LDM R4,{R2,R3,R6} \ 00000020 0D00A0E1 MOV R0,SP \ 00000024 4C0080E8 STM R0,{R2,R3,R6} 1870 memcpy(p->data,rev,8); \ 00000028 0D10A0E1 MOV R1,SP \ 0000002C 0820A0E3 MOV R2,#+8 \ 00000030 080085E2 ADD R0,R5,#+8 \ 00000034 1E0100EF SWI +286 1871 } 1872 1873 int i; 1874 int j; 1875 if (connect_state<2) \ ??SendAnswer_1: \ 00000038 ........ LDR R6,??DataTable74 ;; popup \ 0000003C 340496E5 LDR R0,[R6, #+1076] \ 00000040 020050E3 CMP R0,#+2 \ 00000044 020000AA BGE ??SendAnswer_2 1876 { 1877 mfree(p); \ 00000048 0500A0E1 MOV R0,R5 \ 0000004C 150000EF SWI +21 1878 return; \ 00000050 F783BDE8 POP {R0-R2,R4-R9,PC} 1879 } 1880 if (p) \ ??SendAnswer_2: \ 00000054 000055E3 CMP R5,#+0 \ 00000058 1E00000A BEQ ??SendAnswer_3 1881 { 1882 j=sizeof(PKT)+p->pkt.data_len; //Размер пакета \ 0000005C B600D5E1 LDRH R0,[R5, #+6] \ 00000060 087080E2 ADD R7,R0,#+8 1883 TOTALSENDED+=j; \ 00000064 400496E5 LDR R0,[R6, #+1088] \ 00000068 000087E0 ADD R0,R7,R0 \ 0000006C 400486E5 STR R0,[R6, #+1088] 1884 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000070 480496E5 LDR R0,[R6, #+1096] \ 00000074 000087E0 ADD R0,R7,R0 \ 00000078 480486E5 STR R0,[R6, #+1096] 1885 //Проверяем, не надо ли добавить в очередь 1886 if (sendq_p) \ 0000007C 500496E5 LDR R0,[R6, #+1104] \ 00000080 000050E3 CMP R0,#+0 \ 00000084 0F00000A BEQ ??SendAnswer_4 1887 { 1888 //Есть очередь, добавляем в нее 1889 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 00000088 4C1496E5 LDR R1,[R6, #+1100] \ 0000008C 011087E0 ADD R1,R7,R1 \ 00000090 BA0000EF SWI +186 \ 00000094 500486E5 STR R0,[R6, #+1104] 1890 memcpy((char *)sendq_p+sendq_l,p,j); \ 00000098 4C0496E5 LDR R0,[R6, #+1100] \ 0000009C 503496E5 LDR R3,[R6, #+1104] \ 000000A0 0720A0E1 MOV R2,R7 \ 000000A4 0510A0E1 MOV R1,R5 \ 000000A8 030080E0 ADD R0,R0,R3 \ 000000AC 1E0100EF SWI +286 1891 mfree(p); \ 000000B0 0500A0E1 MOV R0,R5 \ 000000B4 150000EF SWI +21 1892 sendq_l+=j; \ 000000B8 4C0496E5 LDR R0,[R6, #+1100] \ 000000BC 000087E0 ADD R0,R7,R0 \ 000000C0 4C0486E5 STR R0,[R6, #+1100] 1893 return; \ 000000C4 F783BDE8 POP {R0-R2,R4-R9,PC} 1894 } 1895 sendq_p=p; \ ??SendAnswer_4: \ 000000C8 505486E5 STR R5,[R6, #+1104] 1896 sendq_l=j; \ 000000CC 4C7486E5 STR R7,[R6, #+1100] \ 000000D0 000000EA B ??SendAnswer_3 1897 } 1898 //Отправляем уже существующее в очереди 1899 while((i=sendq_l)!=0) 1900 { 1901 if (i>0x400) i=0x400; 1902 j=send(sock,(void *)sendq_p,i,0); 1903 snprintf(logmsg,255,"send res %d",j); 1904 SMART_REDRAW(); 1905 if (j<0) 1906 { 1907 j=*socklasterr(); 1908 if ((j==0xC9)||(j==0xD6)) 1909 { 1910 //Передали что хотели 1911 strcpy(logmsg,"Send delayed..."); 1912 return; //Видимо, надо ждать сообщения ENIP_BUFFER_FREE 1913 } 1914 else 1915 { 1916 //Ошибка 1917 LockSched(); 1918 ShowMSG(1,(int)"Send error!"); 1919 UnlockSched(); 1920 end_socket(); 1921 return; 1922 } 1923 } 1924 memcpy((void *)sendq_p,(char *)sendq_p+j,sendq_l-=j); //Удалили переданное 1925 if (j` \ 000001D0 ........ DC32 resend 1938 /* 1939 void send_login(int dummy, TPKT *p) 1940 { 1941 connect_state=2; 1942 char rev[16]; 1943 //Кто будет менять в этом месте идентификатор клиента, буду банить на уровне сервера!!! 1944 //А Вова будет банить на форуме! 1945 snprintf(rev,9,"Sie_%04d",__SVN_REVISION__); 1946 // snprintf(rev,9,"Sie.%04d",ELF_REVISION); 1947 1948 TPKT *p2=malloc(sizeof(PKT)+8); 1949 p2->pkt.uin=UIN; 1950 p2->pkt.type=T_SETCLIENT_ID; 1951 p2->pkt.data_len=8; 1952 memcpy(p2->data,rev,8); 1953 SendAnswer(0,p2); 1954 SendAnswer(dummy,p); 1955 RXstate=-(int)sizeof(PKT); 1956 }*/ 1957 \ In segment CODE, align 4, keep-with-next 1958 void do_ping(void) 1959 { \ do_ping: \ 00000000 00402DE9 PUSH {LR} 1960 TPKT *pingp=malloc(sizeof(PKT)); \ 00000004 0800A0E3 MOV R0,#+8 \ 00000008 140000EF SWI +20 1961 pingp->pkt.uin=UIN; \ 0000000C ........ LDR R1,??DataTable72 ;; UIN \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 1962 pingp->pkt.type=0; \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C B410C0E1 STRH R1,[R0, #+4] 1963 pingp->pkt.data_len=0; \ 00000020 B610C0E1 STRH R1,[R0, #+6] 1964 SendAnswer(0,pingp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 0040BDE8 POP {LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 1965 } 1966 \ In segment CODE, align 4, keep-with-next 1967 void SendMSGACK(int i) 1968 { \ SendMSGACK: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 1969 TPKT *ackp=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 1970 ackp->pkt.uin=i; \ 00000010 004080E5 STR R4,[R0, #+0] 1971 ackp->pkt.type=T_MSGACK; \ 00000014 1710A0E3 MOV R1,#+23 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 1972 ackp->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 1973 SendAnswer(0,ackp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 1040BDE8 POP {R4,LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 1974 } 1975 \ In segment CODE, align 4, keep-with-next 1976 void RequestXText(unsigned int uin) 1977 { \ RequestXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 1978 TPKT *p=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 1979 p->pkt.uin=uin; \ 00000010 004080E5 STR R4,[R0, #+0] 1980 p->pkt.type=T_XTEXT_REQ; \ 00000014 1810A0E3 MOV R1,#+24 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 1981 p->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 1982 SUBPROC((void *)SendAnswer,0,p); \ 00000024 0020A0E1 MOV R2,R0 \ 00000028 ........ LDR R0,??DataTable73 ;; SendAnswer \ 0000002C 710100EF SWI +369 1983 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 1984 \ In segment CODE, align 4, keep-with-next 1985 void get_answer(void) 1986 { \ get_answer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 1987 void *p; 1988 int i=RXstate; \ 00000004 ........ LDR R5,??DataTable74 ;; popup \ 00000008 94D04DE2 SUB SP,SP,#+148 \ 0000000C 70DD4DE2 SUB SP,SP,#+7168 1989 int j; 1990 int n; 1991 char rb[7168]; 1992 char *rp=rb; 1993 if (connect_state<2) return; \ 00000010 340495E5 LDR R0,[R5, #+1076] \ 00000014 30A495E5 LDR R10,[R5, #+1072] \ 00000018 14108DE2 ADD R1,SP,#+20 \ 0000001C 00108DE5 STR R1,[SP, #+0] \ 00000020 020050E3 CMP R0,#+2 \ 00000024 B40100BA BLT ??get_answer_1 \ 00000028 0A007AE3 CMN R10,#+10 \ 0000002C B201000A BEQ ??get_answer_1 1994 if (i==EOP) return; 1995 j=recv(sock,rb,sizeof(rb),0); \ 00000030 380495E5 LDR R0,[R5, #+1080] \ 00000034 D0669FE5 LDR R6,??get_answer_2+0x4 ;; RXbuf \ 00000038 0030A0E3 MOV R3,#+0 \ 0000003C 702DA0E3 MOV R2,#+7168 \ 00000040 780100EF SWI +376 \ 00000044 0090A0E1 MOV R9,R0 \ 00000048 170000EA B ??get_answer_3 1996 while(j>0) 1997 { 1998 if (i<0) 1999 { 2000 //Принимаем заголовок 2001 n=-i; //Требуемое количество байт 2002 if (j=0) 2009 { 2010 //Принимаем тельце ;) 2011 n=RXbuf.pkt.data_len; //Всего в тельце 2012 if (n>16383) 2013 { 2014 //Слишком много 2015 strcpy(logmsg,LG_GRBADPACKET); 2016 end_socket(); 2017 RXstate=EOP; 2018 return; 2019 } 2020 n-=i; //Количество требуемых байт (общая длинна тельца-текущая позиция) 2021 if (n>0) 2022 { 2023 if (jpkt.uin = p2.answer; 2055 p->pkt.type = 36; 2056 p->pkt.data_len = 1; 2057 SUBPROC((void *)SendAnswer,0,p); 2058 } 2059 break;*/ 2060 case T_LOGIN: 2061 //Удачно залогинились 2062 //Посылаем в MMI 2063 n=i+sizeof(PKT)+1; 2064 p=malloc(n); 2065 memcpy(p,&RXbuf,n); 2066 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); 2067 Play(sndStartup); 2068 // GBS_StartTimerProc(&tmr_ping,120*TMR_SECOND,call_ping); 2069 snprintf(logmsg,255,"T_LOGIN %s",RXbuf.data); 2070 connect_state=3; 2071 host_counter--; //Если уж законнектились, будем сидеть на этом сервере 2072 SMART_REDRAW(); 2073 break; 2074 case T_XTEXT_ACK: 2075 case T_GROUPID: 2076 case T_GROUPFOLLOW: 2077 case T_CLENTRY: 2078 // case 36: 2079 //Посылаем в MMI 2080 n=i+sizeof(PKT)+1; 2081 p=malloc(n); 2082 memcpy(p,&RXbuf,n); 2083 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); 2084 //snprintf(logmsg,255,"CL: %s",RXbuf.data); 2085 if(RXbuf.pkt.type == T_XTEXT_ACK) 2086 snprintf(logmsg,255,"T_XTEXT_ACK %d %s",n,RXbuf.data); 2087 if(RXbuf.pkt.type == T_GROUPID) 2088 snprintf(logmsg,255,"T_GROUPID %d %s",n,RXbuf.data); 2089 2090 if(RXbuf.pkt.type == T_GROUPFOLLOW) 2091 snprintf(logmsg,255,"T_GROUPFOLLOW %d %s",n,RXbuf.data); 2092 2093 if(RXbuf.pkt.type == T_CLENTRY) 2094 snprintf(logmsg,255,"T_CLENTRY %d %s",n,RXbuf.data); 2095 2096 if(RXbuf.pkt.type == 36) 2097 snprintf(logmsg,255,"PickOFF xD %d %s",n,RXbuf.data); 2098 break; 2099 case T_STATUSCHANGE: 2100 case T_CLIENTID: 2101 n=i+sizeof(PKT); 2102 p=malloc(n); 2103 memcpy(p,&RXbuf,n); 2104 snprintf(logmsg,255,LG_GRSTATUSCHNG,RXbuf.pkt.uin,*((unsigned short *)(RXbuf.data))); 2105 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); 2106 break; 2107 case T_ERROR: 2108 if(strstr(RXbuf.data, "Error code 1") || strstr(RXbuf.data, "110")) 2109 { 2110 snprintf(logmsg,255,LG_GRERROR,LG_GRDBLCONNECT); 2111 disautorecconect = 1; 2112 } 2113 else 2114 snprintf(logmsg,255,LG_GRERROR,RXbuf.data); 2115 2116 SMART_REDRAW(); 2117 break; 2118 case T_RECVMSG: 2119 n=i+sizeof(PKT)+1; 2120 p=malloc(n); 2121 memcpy(p,&RXbuf,n); 2122 { 2123 char *s=p; 2124 s+=sizeof(PKT); 2125 int c; 2126 while((c=*s)) 2127 { 2128 if (c<3) *s=' '; 2129 s++; 2130 } 2131 } 2132 snprintf(logmsg,255,LG_GRRECVMSG,RXbuf.pkt.uin,RXbuf.data); 2133 SendMSGACK(TOTALRECEIVED); 2134 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); 2135 2136 #ifdef GUI_INTERFACE 2137 void GotoFirstPosition(); 2138 GotoFirstPosition(); 2139 #endif 2140 SMART_REDRAW(); 2141 if(Is_Extd_Sound) 2142 { 2143 char extsnd[128]; 2144 zeromem(extsnd,128); 2145 strcpy(extsnd,sndMsg); 2146 for(int i=strlen(extsnd);extsnd[i]!='\\';i--) extsnd[i]=0; 2147 sprintf((char*)(extsnd+strlen(extsnd)),"msg\\%u",RXbuf.pkt.uin); 2148 2149 char *p = GetExtSnd(extsnd); 2150 if(p) 2151 Play(p); 2152 else 2153 Play(sndMsg); 2154 2155 if(p) mfree(p); 2156 } 2157 else 2158 Play(sndMsg); 2159 break; 2160 case T_SSLRESP: 2161 LockSched(); 2162 ShowMSG(1,(int)RXbuf.data); 2163 UnlockSched(); 2164 break; 2165 case T_SRV_ACK: 2166 if (FindContactLOGQByAck(&RXbuf)) 2167 { 2168 #ifdef GUI_INTERFACE 2169 RefreshCL(); 2170 SMART_REDRAW(); 2171 #endif 2172 Play(sndMsgSent); 2173 } 2174 case T_CLIENT_ACK: 2175 p=malloc(sizeof(PKT)+2); 2176 memcpy(p,&RXbuf,sizeof(PKT)+2); 2177 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); 2178 snprintf(logmsg,255,"T_CLIENT_ACK %d %s",sizeof(PKT)+2,RXbuf.data); 2179 break; 2180 case T_ECHORET: 2181 { 2182 TDate d; 2183 TTime t; 2184 TTime *pt=(TTime *)(RXbuf.data); 2185 int s1; 2186 int s2; 2187 GetDateTime(&d,&t); 2188 s1=t.hour*3600+t.min*60+t.sec; 2189 s2=pt->hour*3600+pt->min*60+pt->sec; 2190 s1-=s2; 2191 if (s1<0) s1+=86400; 2192 snprintf(logmsg,255,"Ping %d-%d seconds!",s1,s1+1); 2193 #ifdef GUI_INTERFACE 2194 if(IsGuiOnTop(maingui_id)) 2195 PrintMessage(logmsg,5); 2196 else 2197 { 2198 #endif 2199 LockSched(); 2200 ShowMSG(1,(int)logmsg); 2201 UnlockSched(); 2202 #ifdef GUI_INTERFACE 2203 } 2204 #endif 2205 Play(pingsnd); 2206 } 2207 break; 2208 case T_LASTPRIVACY: 2209 n=i+sizeof(PKT); 2210 p=malloc(n); \ ??get_answer_4: \ 0000004C 0400A0E1 MOV R0,R4 \ 00000050 140000EF SWI +20 \ 00000054 00B0A0E1 MOV R11,R0 2211 memcpy(p,&RXbuf,n); \ 00000058 0420A0E1 MOV R2,R4 \ 0000005C 0610A0E1 MOV R1,R6 \ 00000060 1E0100EF SWI +286 2212 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 00000064 380495E5 LDR R0,[R5, #+1080] \ 00000068 0B30A0E1 MOV R3,R11 \ 0000006C 01002DE9 PUSH {R0} \ 00000070 0020A0E3 MOV R2,#+0 \ 00000074 FC1FA0E3 MOV R1,#+1008 \ 00000078 0A00A0E1 MOV R0,R10 \ 0000007C 000100EF SWI +256 2213 2214 snprintf(logmsg,255,"T_LASTPRIVACY %d %s",n,RXbuf.data); \ 00000080 080086E2 ADD R0,R6,#+8 \ 00000084 01002DE9 PUSH {R0} \ 00000088 0430A0E1 MOV R3,R4 \ 0000008C F42087E2 ADD R2,R7,#+244 \ ??get_answer_5: \ 00000090 FF10A0E3 MOV R1,#+255 \ 00000094 0800A0E1 MOV R0,R8 \ 00000098 1B0100EF SWI +283 \ ??get_answer_6: \ 0000009C 08D08DE2 ADD SP,SP,#+8 ;; stack cleaning 2215 break; 2216 } 2217 /* 2218 if(RXbuf.pkt.type == 35 || RXbuf.pkt.type == 36) 2219 { 2220 unsigned int io_error = 0; 2221 int h; 2222 if(RXbuf.pkt.type == 35) 2223 h = fopen("4:\\222_35.txt",A_ReadWrite + A_Create + A_Append + A_BIN,P_READ+P_WRITE, &io_error); 2224 2225 2226 if(RXbuf.pkt.type == 36) 2227 h = fopen("4:\\222_36.txt",A_ReadWrite + A_Create + A_Append + A_BIN,P_READ+P_WRITE, &io_error); 2228 fclose(h,&io_error); 2229 } 2230 else*/ 2231 ad(&RXbuf); \ ??get_answer_7: \ 000000A0 0600A0E1 MOV R0,R6 \ 000000A4 ........ _BLF ad,??ad??rA 2232 i=-(int)sizeof(PKT); //А может еще есть данные \ 000000A8 07A0E0E3 MVN R10,#+7 \ ??get_answer_3: \ 000000AC 010059E3 CMP R9,#+1 \ 000000B0 900100BA BLT ??get_answer_8 \ 000000B4 00005AE3 CMP R10,#+0 \ 000000B8 0C00005A BPL ??get_answer_9 \ 000000BC 00109DE5 LDR R1,[SP, #+0] \ 000000C0 00406AE2 RSB R4,R10,#+0 \ 000000C4 040059E1 CMP R9,R4 \ 000000C8 0940A0B1 MOVLT R4,R9 \ 000000CC 0420A0E1 MOV R2,R4 \ 000000D0 06008AE0 ADD R0,R10,R6 \ 000000D4 080080E2 ADD R0,R0,#+8 \ 000000D8 1E0100EF SWI +286 \ 000000DC 00109DE5 LDR R1,[SP, #+0] \ 000000E0 0AA084E0 ADD R10,R4,R10 \ 000000E4 049049E0 SUB R9,R9,R4 \ 000000E8 011084E0 ADD R1,R4,R1 \ 000000EC 00108DE5 STR R1,[SP, #+0] \ ??get_answer_9: \ 000000F0 00005AE3 CMP R10,#+0 \ 000000F4 ECFFFF4A BMI ??get_answer_3 \ 000000F8 B640D6E1 LDRH R4,[R6, #+6] \ 000000FC 0C769FE5 LDR R7,??get_answer_2+0x8 ;; `?` \ 00000100 8800A0E3 MOV R0,#+136 \ 00000104 5C0D80E3 ORR R0,R0,#0x1700 \ 00000108 058080E0 ADD R8,R0,R5 \ 0000010C 400C54E3 CMP R4,#+16384 \ 00000110 080000BA BLT ??get_answer_10 \ 00000114 0710A0E1 MOV R1,R7 \ 00000118 0800A0E1 MOV R0,R8 \ 0000011C 1A0000EF SWI +26 \ 00000120 ........ BL end_socket \ 00000124 0900E0E3 MVN R0,#+9 \ 00000128 300485E5 STR R0,[R5, #+1072] \ 0000012C 94D08DE2 ADD SP,SP,#+148 \ 00000130 70DD8DE2 ADD SP,SP,#+7168 \ 00000134 F08FBDE8 POP {R4-R11,PC} \ ??get_answer_10: \ 00000138 0A4044E0 SUB R4,R4,R10 \ 0000013C 010054E3 CMP R4,#+1 \ 00000140 0B0000BA BLT ??get_answer_11 \ 00000144 00109DE5 LDR R1,[SP, #+0] \ 00000148 040059E1 CMP R9,R4 \ 0000014C 0940A0B1 MOVLT R4,R9 \ 00000150 0420A0E1 MOV R2,R4 \ 00000154 06008AE0 ADD R0,R10,R6 \ 00000158 080080E2 ADD R0,R0,#+8 \ 0000015C 1E0100EF SWI +286 \ 00000160 00109DE5 LDR R1,[SP, #+0] \ 00000164 0AA084E0 ADD R10,R4,R10 \ 00000168 049049E0 SUB R9,R9,R4 \ 0000016C 011084E0 ADD R1,R4,R1 \ 00000170 00108DE5 STR R1,[SP, #+0] \ ??get_answer_11: \ 00000174 B600D6E1 LDRH R0,[R6, #+6] \ 00000178 0A0050E1 CMP R0,R10 \ 0000017C CAFFFF1A BNE ??get_answer_3 \ 00000180 3C0495E5 LDR R0,[R5, #+1084] \ 00000184 08408AE2 ADD R4,R10,#+8 \ 00000188 000084E0 ADD R0,R4,R0 \ 0000018C 3C0485E5 STR R0,[R5, #+1084] \ 00000190 440495E5 LDR R0,[R5, #+1092] \ 00000194 0010A0E3 MOV R1,#+0 \ 00000198 000084E0 ADD R0,R4,R0 \ 0000019C 440485E5 STR R0,[R5, #+1092] \ 000001A0 06008AE0 ADD R0,R10,R6 \ 000001A4 0810C0E5 STRB R1,[R0, #+8] \ 000001A8 0600A0E1 MOV R0,R6 \ 000001AC ........ _BLF aa,??aa??rA \ 000001B0 B410D6E1 LDRH R1,[R6, #+4] \ 000001B4 09008AE2 ADD R0,R10,#+9 \ 000001B8 09A0A0E3 MOV R10,#+9 \ 000001BC 42AC8AE3 ORR R10,R10,#0x4200 \ 000001C0 01B0A0E3 MOV R11,#+1 \ 000001C4 031041E2 SUB R1,R1,#+3 \ 000001C8 220051E3 CMP R1,#+34 \ 000001CC B3FFFF8A BHI ??get_answer_7 \ 000001D0 022F8FE2 ADR R2,??get_answer_0 \ 000001D4 8110A0E1 MOV R1,R1, LSL #+1 \ 000001D8 F12092E1 LDRSH R2,[R2, R1] \ 000001DC 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??get_answer_0: \ 000001E0 9F001100AFFF DC16 +159,+17,+65455,+135 \ 8700 \ 000001E8 2D00AFFF7200 DC16 +45,+65455,+114,+65455 \ AFFF \ 000001F0 AFFFAFFFF400 DC16 +65455,+65455,+244,+65455 \ AFFF \ 000001F8 AFFFFA000201 DC16 +65455,+250,+258,+65455 \ AFFF \ 00000200 14012D002D00 DC16 +276,+45,+45,+65455 \ AFFF \ 00000208 AFFFAFFF2D00 DC16 +65455,+65455,+45,+65455 \ AFFF \ 00000210 AFFFAFFFAFFF DC16 +65455,+65455,+65455,+65455 \ AFFF \ 00000218 9AFFAFFFAFFF DC16 +65434,+65455,+65455,+65455 \ AFFF \ 00000220 AFFFAFFF7200 DC16 +65455,+65455,+114,+0 \ 0000 \ ??get_answer_12: \ 00000228 0040A0E1 MOV R4,R0 \ 0000022C 140000EF SWI +20 \ 00000230 00B0A0E1 MOV R11,R0 \ 00000234 0420A0E1 MOV R2,R4 \ 00000238 0610A0E1 MOV R1,R6 \ 0000023C 1E0100EF SWI +286 \ 00000240 380495E5 LDR R0,[R5, #+1080] \ 00000244 0B30A0E1 MOV R3,R11 \ 00000248 01002DE9 PUSH {R0} \ 0000024C 0020A0E3 MOV R2,#+0 \ 00000250 FC1FA0E3 MOV R1,#+1008 \ 00000254 0A00A0E1 MOV R0,R10 \ 00000258 000100EF SWI +256 \ 0000025C B0049FE5 LDR R0,??get_answer_2+0xC ;; sndStartup \ 00000260 ........ BL Play \ 00000264 083086E2 ADD R3,R6,#+8 \ 00000268 0C2087E2 ADD R2,R7,#+12 \ 0000026C FF10A0E3 MOV R1,#+255 \ 00000270 0800A0E1 MOV R0,R8 \ 00000274 1B0100EF SWI +283 \ 00000278 0300A0E3 MOV R0,#+3 \ 0000027C 340485E5 STR R0,[R5, #+1076] \ 00000280 6C0495E5 LDR R0,[R5, #+1132] \ 00000284 010040E2 SUB R0,R0,#+1 \ 00000288 6C0485E5 STR R0,[R5, #+1132] \ 0000028C ........ BL SMART_REDRAW \ ??get_answer_13: \ 00000290 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning \ 00000294 81FFFFEA B ??get_answer_7 \ ??get_answer_14: \ 00000298 0040A0E1 MOV R4,R0 \ 0000029C 140000EF SWI +20 \ 000002A0 00B0A0E1 MOV R11,R0 \ 000002A4 0420A0E1 MOV R2,R4 \ 000002A8 0610A0E1 MOV R1,R6 \ 000002AC 1E0100EF SWI +286 \ 000002B0 380495E5 LDR R0,[R5, #+1080] \ 000002B4 0B30A0E1 MOV R3,R11 \ 000002B8 01002DE9 PUSH {R0} \ 000002BC 0020A0E3 MOV R2,#+0 \ 000002C0 FC1FA0E3 MOV R1,#+1008 \ 000002C4 0A00A0E1 MOV R0,R10 \ 000002C8 000100EF SWI +256 \ 000002CC B400D6E1 LDRH R0,[R6, #+4] \ 000002D0 04D08DE2 ADD SP,SP,#+4 \ 000002D4 190050E3 CMP R0,#+25 \ 000002D8 0700001A BNE ??get_answer_15 \ 000002DC 080086E2 ADD R0,R6,#+8 \ 000002E0 01002DE9 PUSH {R0} \ 000002E4 0430A0E1 MOV R3,R4 \ 000002E8 182087E2 ADD R2,R7,#+24 \ 000002EC FF10A0E3 MOV R1,#+255 \ 000002F0 0800A0E1 MOV R0,R8 \ 000002F4 1B0100EF SWI +283 \ 000002F8 04D08DE2 ADD SP,SP,#+4 \ ??get_answer_15: \ 000002FC B400D6E1 LDRH R0,[R6, #+4] \ 00000300 140050E3 CMP R0,#+20 \ 00000304 0700001A BNE ??get_answer_16 \ 00000308 080086E2 ADD R0,R6,#+8 \ 0000030C 01002DE9 PUSH {R0} \ 00000310 0430A0E1 MOV R3,R4 \ 00000314 2C2087E2 ADD R2,R7,#+44 \ 00000318 FF10A0E3 MOV R1,#+255 \ 0000031C 0800A0E1 MOV R0,R8 \ 00000320 1B0100EF SWI +283 \ 00000324 04D08DE2 ADD SP,SP,#+4 \ ??get_answer_16: \ 00000328 B400D6E1 LDRH R0,[R6, #+4] \ 0000032C 150050E3 CMP R0,#+21 \ 00000330 0700001A BNE ??get_answer_17 \ 00000334 080086E2 ADD R0,R6,#+8 \ 00000338 01002DE9 PUSH {R0} \ 0000033C 0430A0E1 MOV R3,R4 \ 00000340 3C2087E2 ADD R2,R7,#+60 \ 00000344 FF10A0E3 MOV R1,#+255 \ 00000348 0800A0E1 MOV R0,R8 \ 0000034C 1B0100EF SWI +283 \ 00000350 04D08DE2 ADD SP,SP,#+4 \ ??get_answer_17: \ 00000354 B400D6E1 LDRH R0,[R6, #+4] \ 00000358 070050E3 CMP R0,#+7 \ 0000035C 0700001A BNE ??get_answer_18 \ 00000360 080086E2 ADD R0,R6,#+8 \ 00000364 01002DE9 PUSH {R0} \ 00000368 0430A0E1 MOV R3,R4 \ 0000036C 502087E2 ADD R2,R7,#+80 \ 00000370 FF10A0E3 MOV R1,#+255 \ 00000374 0800A0E1 MOV R0,R8 \ 00000378 1B0100EF SWI +283 \ 0000037C 04D08DE2 ADD SP,SP,#+4 \ ??get_answer_18: \ 00000380 B400D6E1 LDRH R0,[R6, #+4] \ 00000384 240050E3 CMP R0,#+36 \ 00000388 44FFFF1A BNE ??get_answer_7 \ 0000038C 080086E2 ADD R0,R6,#+8 \ 00000390 01002DE9 PUSH {R0} \ 00000394 0430A0E1 MOV R3,R4 \ 00000398 602087E2 ADD R2,R7,#+96 \ 0000039C FF10A0E3 MOV R1,#+255 \ 000003A0 0800A0E1 MOV R0,R8 \ 000003A4 1B0100EF SWI +283 \ 000003A8 B8FFFFEA B ??get_answer_13 \ ??get_answer_19: \ 000003AC 0400A0E1 MOV R0,R4 \ 000003B0 140000EF SWI +20 \ 000003B4 00B0A0E1 MOV R11,R0 \ 000003B8 0420A0E1 MOV R2,R4 \ 000003BC 0610A0E1 MOV R1,R6 \ 000003C0 1E0100EF SWI +286 \ 000003C4 B800D6E1 LDRH R0,[R6, #+8] \ 000003C8 742087E2 ADD R2,R7,#+116 \ 000003CC FF10A0E3 MOV R1,#+255 \ 000003D0 01002DE9 PUSH {R0} \ 000003D4 003096E5 LDR R3,[R6, #+0] \ 000003D8 0800A0E1 MOV R0,R8 \ 000003DC 1B0100EF SWI +283 \ 000003E0 380495E5 LDR R0,[R5, #+1080] \ 000003E4 0B30A0E1 MOV R3,R11 \ 000003E8 01002DE9 PUSH {R0} \ 000003EC 0020A0E3 MOV R2,#+0 \ 000003F0 FC1FA0E3 MOV R1,#+1008 \ 000003F4 0A00A0E1 MOV R0,R10 \ 000003F8 000100EF SWI +256 \ 000003FC 26FFFFEA B ??get_answer_6 \ ??get_answer_20: \ 00000400 A81087E2 ADD R1,R7,#+168 \ 00000404 080086E2 ADD R0,R6,#+8 \ 00000408 180100EF SWI +280 \ 0000040C 000050E3 CMP R0,#+0 \ 00000410 0400001A BNE ??get_answer_21 \ 00000414 BB1F8FE2 ADR R1,??get_answer_2 ;; "110" \ 00000418 080086E2 ADD R0,R6,#+8 \ 0000041C 180100EF SWI +280 \ 00000420 000050E3 CMP R0,#+0 \ 00000424 0600000A BEQ ??get_answer_22 \ ??get_answer_21: \ 00000428 883087E2 ADD R3,R7,#+136 \ 0000042C 802087E2 ADD R2,R7,#+128 \ 00000430 FF10A0E3 MOV R1,#+255 \ 00000434 0800A0E1 MOV R0,R8 \ 00000438 1B0100EF SWI +283 \ 0000043C F8B385E5 STR R11,[R5, #+1016] \ 00000440 040000EA B ??get_answer_23 \ ??get_answer_22: \ 00000444 083086E2 ADD R3,R6,#+8 \ 00000448 802087E2 ADD R2,R7,#+128 \ 0000044C FF10A0E3 MOV R1,#+255 \ 00000450 0800A0E1 MOV R0,R8 \ 00000454 1B0100EF SWI +283 \ ??get_answer_23: \ 00000458 ........ BL SMART_REDRAW \ 0000045C 0FFFFFEA B ??get_answer_7 \ ??get_answer_24: \ 00000460 0040A0E1 MOV R4,R0 \ 00000464 140000EF SWI +20 \ 00000468 00B0A0E1 MOV R11,R0 \ 0000046C 0420A0E1 MOV R2,R4 \ 00000470 0610A0E1 MOV R1,R6 \ 00000474 1E0100EF SWI +286 \ 00000478 08008BE2 ADD R0,R11,#+8 \ 0000047C 030000EA B ??get_answer_25 \ ??get_answer_26: \ 00000480 030051E3 CMP R1,#+3 \ 00000484 2010A0B3 MOVLT R1,#+32 \ 00000488 0010C0B5 STRBLT R1,[R0, #+0] \ 0000048C 010080E2 ADD R0,R0,#+1 \ ??get_answer_25: \ 00000490 0010D0E5 LDRB R1,[R0, #+0] \ 00000494 000051E3 CMP R1,#+0 \ 00000498 F8FFFF1A BNE ??get_answer_26 \ 0000049C ........ LDR R4,??DataTable75 ;; sndMsg \ 000004A0 080086E2 ADD R0,R6,#+8 \ 000004A4 01002DE9 PUSH {R0} \ 000004A8 003096E5 LDR R3,[R6, #+0] \ 000004AC B82087E2 ADD R2,R7,#+184 \ 000004B0 FF10A0E3 MOV R1,#+255 \ 000004B4 0800A0E1 MOV R0,R8 \ 000004B8 1B0100EF SWI +283 \ 000004BC 3C0495E5 LDR R0,[R5, #+1084] \ 000004C0 ........ BL SendMSGACK \ 000004C4 380495E5 LDR R0,[R5, #+1080] \ 000004C8 0B30A0E1 MOV R3,R11 \ 000004CC 01002DE9 PUSH {R0} \ 000004D0 0020A0E3 MOV R2,#+0 \ 000004D4 FC1FA0E3 MOV R1,#+1008 \ 000004D8 0A00A0E1 MOV R0,R10 \ 000004DC 000100EF SWI +256 \ 000004E0 ........ BL GotoFirstPosition \ 000004E4 ........ BL SMART_REDRAW \ 000004E8 340395E5 LDR R0,[R5, #+820] \ 000004EC 08D08DE2 ADD SP,SP,#+8 \ 000004F0 000050E3 CMP R0,#+0 \ 000004F4 2B00000A BEQ ??get_answer_27 \ 000004F8 8010A0E3 MOV R1,#+128 \ 000004FC 14008DE2 ADD R0,SP,#+20 \ 00000500 700D80E2 ADD R0,R0,#+7168 \ 00000504 1D0100EF SWI +285 \ 00000508 0410A0E1 MOV R1,R4 \ 0000050C 14008DE2 ADD R0,SP,#+20 \ 00000510 700D80E2 ADD R0,R0,#+7168 \ 00000514 1A0000EF SWI +26 \ 00000518 14008DE2 ADD R0,SP,#+20 \ 0000051C 700D80E2 ADD R0,R0,#+7168 \ 00000520 1B0000EF SWI +27 \ 00000524 14108DE2 ADD R1,SP,#+20 \ 00000528 701D81E2 ADD R1,R1,#+7168 \ 0000052C 0110D0E7 LDRB R1,[R0, +R1] \ 00000530 5C0051E3 CMP R1,#+92 \ 00000534 0900000A BEQ ??get_answer_28 \ ??get_answer_29: \ 00000538 14108DE2 ADD R1,SP,#+20 \ 0000053C 701D81E2 ADD R1,R1,#+7168 \ 00000540 0020A0E3 MOV R2,#+0 \ 00000544 0120C0E7 STRB R2,[R0, +R1] \ 00000548 010040E2 SUB R0,R0,#+1 \ 0000054C 14108DE2 ADD R1,SP,#+20 \ 00000550 701D81E2 ADD R1,R1,#+7168 \ 00000554 0110D0E7 LDRB R1,[R0, +R1] \ 00000558 5C0051E3 CMP R1,#+92 \ 0000055C F5FFFF1A BNE ??get_answer_29 \ ??get_answer_28: \ 00000560 14008DE2 ADD R0,SP,#+20 \ 00000564 700D80E2 ADD R0,R0,#+7168 \ 00000568 1B0000EF SWI +27 \ 0000056C 002096E5 LDR R2,[R6, #+0] \ 00000570 C41087E2 ADD R1,R7,#+196 \ 00000574 14308DE2 ADD R3,SP,#+20 \ 00000578 703D83E2 ADD R3,R3,#+7168 \ 0000057C 030080E0 ADD R0,R0,R3 \ 00000580 160000EF SWI +22 \ 00000584 14008DE2 ADD R0,SP,#+20 \ 00000588 700D80E2 ADD R0,R0,#+7168 \ 0000058C ........ BL GetExtSnd \ 00000590 0070B0E1 MOVS R7,R0 \ 00000594 0300000A BEQ ??get_answer_27 \ 00000598 ........ BL Play \ 0000059C 0700A0E1 MOV R0,R7 \ 000005A0 150000EF SWI +21 \ 000005A4 BDFEFFEA B ??get_answer_7 \ ??get_answer_27: \ 000005A8 0400A0E1 MOV R0,R4 \ ??get_answer_30: \ 000005AC ........ BL Play \ 000005B0 BAFEFFEA B ??get_answer_7 \ ??get_answer_31: \ 000005B4 460100EF SWI +326 \ 000005B8 081086E2 ADD R1,R6,#+8 \ 000005BC 0100A0E3 MOV R0,#+1 \ 000005C0 480100EF SWI +328 \ 000005C4 470100EF SWI +327 \ 000005C8 B4FEFFEA B ??get_answer_7 \ ??get_answer_32: \ 000005CC 0600A0E1 MOV R0,R6 \ 000005D0 ........ BL FindContactLOGQByAck \ 000005D4 000050E3 CMP R0,#+0 \ 000005D8 0300000A BEQ ??get_answer_33 \ 000005DC 60B385E5 STR R11,[R5, #+864] \ 000005E0 ........ BL SMART_REDRAW \ 000005E4 2C019FE5 LDR R0,??get_answer_2+0x10 ;; sndMsgSent \ 000005E8 ........ BL Play \ ??get_answer_33: \ 000005EC 0A00A0E3 MOV R0,#+10 \ 000005F0 140000EF SWI +20 \ 000005F4 00B0A0E1 MOV R11,R0 \ 000005F8 0A20A0E3 MOV R2,#+10 \ 000005FC 0610A0E1 MOV R1,R6 \ 00000600 1E0100EF SWI +286 \ 00000604 380495E5 LDR R0,[R5, #+1080] \ 00000608 0B30A0E1 MOV R3,R11 \ 0000060C 01002DE9 PUSH {R0} \ 00000610 0020A0E3 MOV R2,#+0 \ 00000614 FC1FA0E3 MOV R1,#+1008 \ 00000618 0A00A0E1 MOV R0,R10 \ 0000061C 000100EF SWI +256 \ 00000620 080086E2 ADD R0,R6,#+8 \ 00000624 01002DE9 PUSH {R0} \ 00000628 0A30A0E3 MOV R3,#+10 \ 0000062C CC2087E2 ADD R2,R7,#+204 \ 00000630 96FEFFEA B ??get_answer_5 \ ??get_answer_34: \ 00000634 04108DE2 ADD R1,SP,#+4 \ 00000638 0C008DE2 ADD R0,SP,#+12 \ 0000063C B40000EF SWI +180 \ 00000640 0400DDE5 LDRB R0,[SP, #+4] \ 00000644 0520DDE5 LDRB R2,[SP, #+5] \ 00000648 E11EA0E3 MOV R1,#+3600 \ 0000064C 3C30A0E3 MOV R3,#+60 \ 00000650 930202E0 MUL R2,R3,R2 \ 00000654 912020E0 MLA R0,R1,R0,R2 \ 00000658 0610DDE5 LDRB R1,[SP, #+6] \ 0000065C E12EA0E3 MOV R2,#+3600 \ 00000660 000081E0 ADD R0,R1,R0 \ 00000664 0810D6E5 LDRB R1,[R6, #+8] \ 00000668 920101E0 MUL R1,R2,R1 \ 0000066C E02087E2 ADD R2,R7,#+224 \ 00000670 010040E0 SUB R0,R0,R1 \ 00000674 0910D6E5 LDRB R1,[R6, #+9] \ 00000678 930101E0 MUL R1,R3,R1 \ 0000067C 010040E0 SUB R0,R0,R1 \ 00000680 0A10D6E5 LDRB R1,[R6, #+10] \ 00000684 013050E0 SUBS R3,R0,R1 \ 00000688 500BA043 MOVMI R0,#+81920 \ 0000068C 460D8043 ORRMI R0,R0,#0x1180 \ 00000690 03308040 ADDMI R3,R0,R3 \ 00000694 010083E2 ADD R0,R3,#+1 \ 00000698 01002DE9 PUSH {R0} \ 0000069C FF10A0E3 MOV R1,#+255 \ 000006A0 0800A0E1 MOV R0,R8 \ 000006A4 1B0100EF SWI +283 \ 000006A8 080395E5 LDR R0,[R5, #+776] \ 000006AC 350100EF SWI +309 \ 000006B0 000050E3 CMP R0,#+0 \ 000006B4 04D08DE2 ADD SP,SP,#+4 \ 000006B8 0700000A BEQ ??get_answer_35 \ 000006BC 0810A0E1 MOV R1,R8 \ 000006C0 E800A0E3 MOV R0,#+232 \ 000006C4 500E80E3 ORR R0,R0,#0x500 \ 000006C8 050080E0 ADD R0,R0,R5 \ 000006CC 1A0000EF SWI +26 \ 000006D0 0500A0E3 MOV R0,#+5 \ 000006D4 6C0385E5 STR R0,[R5, #+876] \ 000006D8 040000EA B ??get_answer_36 \ ??get_answer_35: \ 000006DC 460100EF SWI +326 \ 000006E0 0810A0E1 MOV R1,R8 \ 000006E4 0100A0E3 MOV R0,#+1 \ 000006E8 480100EF SWI +328 \ 000006EC 470100EF SWI +327 \ ??get_answer_36: \ 000006F0 24009FE5 LDR R0,??get_answer_2+0x14 ;; pingsnd \ 000006F4 ACFFFFEA B ??get_answer_30 2233 } 2234 } 2235 } 2236 RXstate=i; \ ??get_answer_8: \ 000006F8 30A485E5 STR R10,[R5, #+1072] 2237 // GBS_StartTimerProc(&tmr_dorecv,3000,dorecv); 2238 // SMART_REDRAW(); 2239 } \ ??get_answer_1: \ 000006FC 94D08DE2 ADD SP,SP,#+148 \ 00000700 70DD8DE2 ADD SP,SP,#+7168 \ 00000704 F08FBDE8 POP {R4-R11,PC} ;; return \ ??get_answer_2: \ 00000708 31313000 DC8 "110" \ 0000070C ........ DC32 RXbuf \ 00000710 ........ DC32 `?` \ 00000714 ........ DC32 sndStartup \ 00000718 ........ DC32 sndMsgSent \ 0000071C ........ DC32 pingsnd 2240 2241 2242 2243 int NEW_MSG; 2244 \ In segment CODE, align 4, keep-with-next 2245 void AddStringToLog(CLIST *t, int code, char *s, const char *name, unsigned int IDforACK,int SaveXST2History) 2246 { \ 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 2247 char hs[128], *lastX; 2248 TTime tt; 2249 TDate d; 2250 GetDateTime(&d,&tt); \ 00000020 0D10A0E1 MOV R1,SP \ 00000024 08008DE2 ADD R0,SP,#+8 \ 00000028 B40000EF SWI +180 2251 int i; 2252 2253 if ((code==3 || code==4) && NOT_LOG_SAME_XTXT) \ 0000002C 030055E3 CMP R5,#+3 \ 00000030 04005513 CMPNE R5,#+4 \ 00000034 1600001A BNE ??AddStringToLog_0 \ 00000038 30029FE5 LDR R0,??AddStringToLog_1 ;; NOT_LOG_SAME_XTXT \ 0000003C 000090E5 LDR R0,[R0, #+0] \ 00000040 000050E3 CMP R0,#+0 \ 00000044 1200000A BEQ ??AddStringToLog_0 2254 { 2255 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<send : t->recv )*/); \ ??AddStringToLog_0: \ 00000094 D8A19FE5 LDR R10,??AddStringToLog_1+0x4 ;; `?_1` \ 00000098 0600A0E1 MOV R0,R6 \ 0000009C 01002DE9 PUSH {R0} \ 000000A0 0C009DE5 LDR R0,[SP, #+12] \ 000000A4 0A20A0E1 MOV R2,R10 \ 000000A8 01002DE9 PUSH {R0} \ 000000AC 1400DDE5 LDRB R0,[SP, #+20] \ 000000B0 7F10A0E3 MOV R1,#+127 \ 000000B4 01002DE9 PUSH {R0} \ 000000B8 1900DDE5 LDRB R0,[SP, #+25] \ 000000BC 01002DE9 PUSH {R0} \ 000000C0 1200DDE5 LDRB R0,[SP, #+18] \ 000000C4 01002DE9 PUSH {R0} \ 000000C8 1500DDE5 LDRB R0,[SP, #+21] \ 000000CC 01002DE9 PUSH {R0} \ 000000D0 1830DDE5 LDRB R3,[SP, #+24] \ 000000D4 28008DE2 ADD R0,SP,#+40 \ 000000D8 1B0100EF SWI +283 2264 //if(code != 3 || LOG_XTXT) //Нужно сохранять иксстатус 2265 if((code != 3 && code!=4) || ((LOG_XTXT) && (SaveXST2History))) \ 000000DC 030055E3 CMP R5,#+3 \ 000000E0 18D08DE2 ADD SP,SP,#+24 \ 000000E4 04005513 CMPNE R5,#+4 \ 000000E8 0400001A BNE ??AddStringToLog_4 \ 000000EC 84019FE5 LDR R0,??AddStringToLog_1+0x8 ;; LOG_XTXT \ 000000F0 000090E5 LDR R0,[R0, #+0] \ 000000F4 000050E3 CMP R0,#+0 \ 000000F8 00005913 CMPNE R9,#+0 \ 000000FC 0400000A BEQ ??AddStringToLog_5 2266 Add2History(t, hs, s, code); // Запись хистори \ ??AddStringToLog_4: \ 00000100 0530A0E1 MOV R3,R5 \ 00000104 0820A0E1 MOV R2,R8 \ 00000108 10108DE2 ADD R1,SP,#+16 \ 0000010C 0400A0E1 MOV R0,R4 \ 00000110 ........ _BLF Add2History,??Add2History??rA 2267 LOGQ *p=NewLOGQ(s); \ ??AddStringToLog_5: \ 00000114 0800A0E1 MOV R0,R8 \ 00000118 ........ BL NewLOGQ 2268 snprintf(p->hdr,79,"[%d]%02d:%02d:%02d %02d.%02d %s:", 2269 ( (strcmp(name,I_str)==0) ? t->send : t->recv ), 2270 tt.hour,tt.min,tt.sec,d.day,d.month,name); \ 0000011C ........ LDR R1,??DataTable117 ;; I_str \ 00000120 0080A0E1 MOV R8,R0 \ 00000124 0600A0E1 MOV R0,R6 \ 00000128 190000EF SWI +25 \ 0000012C 000050E3 CMP R0,#+0 \ 00000130 A8309405 LDREQ R3,[R4, #+168] \ 00000134 24208AE2 ADD R2,R10,#+36 \ 00000138 A4309415 LDRNE R3,[R4, #+164] \ 0000013C 40002DE9 PUSH {R6} \ 00000140 1000DDE5 LDRB R0,[SP, #+16] \ 00000144 4F10A0E3 MOV R1,#+79 \ 00000148 01002DE9 PUSH {R0} \ 0000014C 1500DDE5 LDRB R0,[SP, #+21] \ 00000150 01002DE9 PUSH {R0} \ 00000154 0E00DDE5 LDRB R0,[SP, #+14] \ 00000158 01002DE9 PUSH {R0} \ 0000015C 1100DDE5 LDRB R0,[SP, #+17] \ 00000160 01002DE9 PUSH {R0} \ 00000164 1400DDE5 LDRB R0,[SP, #+20] \ 00000168 01002DE9 PUSH {R0} \ 0000016C 100088E2 ADD R0,R8,#+16 \ 00000170 1B0100EF SWI +283 2271 p->type=code; \ 00000174 0C5088E5 STR R5,[R8, #+12] 2272 p->ID=IDforACK; //0-32767 \ 00000178 087088E5 STR R7,[R8, #+8] 2273 i=AddLOGQ(&t->log,p); \ 0000017C 0810A0E1 MOV R1,R8 \ 00000180 680084E2 ADD R0,R4,#+104 \ 00000184 ........ BL AddLOGQ \ 00000188 0060A0E1 MOV R6,R0 \ 0000018C 150056E3 CMP R6,#+21 \ 00000190 18D08DE2 ADD SP,SP,#+24 \ 00000194 090000BA BLT ??AddStringToLog_6 2274 while(i>MAXLOGMSG) 2275 { 2276 if (t->log==t->last_log) t->last_log=t->last_log->next; \ ??AddStringToLog_7: \ 00000198 700094E5 LDR R0,[R4, #+112] \ 0000019C 681094E5 LDR R1,[R4, #+104] 2277 RemoveLOGQ(&t->log,t->log); 2278 i--; \ 000001A0 016046E2 SUB R6,R6,#+1 \ 000001A4 000051E1 CMP R1,R0 \ 000001A8 00009005 LDREQ R0,[R0, #+0] \ 000001AC 70008405 STREQ R0,[R4, #+112] \ 000001B0 680084E2 ADD R0,R4,#+104 \ 000001B4 ........ BL RemoveLOGQ 2279 } \ 000001B8 150056E3 CMP R6,#+21 \ 000001BC F5FFFFAA BGE ??AddStringToLog_7 2280 t->msg_count=i; \ ??AddStringToLog_6: \ 000001C0 786084E5 STR R6,[R4, #+120] 2281 if (!t->last_log) t->last_log=p; \ 000001C4 700094E5 LDR R0,[R4, #+112] 2282 if (code==3 || code==4) \ 000001C8 ........ LDR R6,??DataTable113 ;; popup \ 000001CC 000050E3 CMP R0,#+0 \ 000001D0 70808405 STREQ R8,[R4, #+112] \ 000001D4 030055E3 CMP R5,#+3 \ 000001D8 04005513 CMPNE R5,#+4 \ 000001DC 0D00001A BNE ??AddStringToLog_8 2283 { 2284 if (edchat_id) \ 000001E0 5C0496E5 LDR R0,[R6, #+1116] \ 000001E4 000050E3 CMP R0,#+0 \ 000001E8 1C00000A BEQ ??AddStringToLog_9 2285 { 2286 void *data=FindGUIbyId(edchat_id,NULL); \ 000001EC 5C0496E5 LDR R0,[R6, #+1116] \ 000001F0 0010A0E3 MOV R1,#+0 \ 000001F4 090200EF SWI +521 2287 if (data) \ 000001F8 000050E3 CMP R0,#+0 \ 000001FC 1700000A BEQ ??AddStringToLog_9 2288 { 2289 EDCHAT_STRUCT *ed_struct; 2290 ed_struct=EDIT_GetUserPointer(data); \ 00000200 DF0100EF SWI +479 2291 if (ed_struct) \ 00000204 000050E3 CMP R0,#+0 \ 00000208 1400000A BEQ ??AddStringToLog_9 2292 { 2293 if (ed_struct->ed_contact==t) \ 0000020C 000090E5 LDR R0,[R0, #+0] \ 00000210 040050E1 CMP R0,R4 \ 00000214 1100001A BNE ??AddStringToLog_9 2294 { 2295 goto L_INC; 2296 } 2297 } 2298 } 2299 } 2300 goto L_NOINC; 2301 } 2302 L_INC: 2303 if (!t->isunread) total_unread++; \ ??AddStringToLog_8: \ 00000218 5C0094E5 LDR R0,[R4, #+92] \ 0000021C 000050E3 CMP R0,#+0 \ 00000220 38039605 LDREQ R0,[R6, #+824] \ 00000224 01008002 ADDEQ R0,R0,#+1 \ 00000228 38038605 STREQ R0,[R6, #+824] 2304 2305 if(NEW_MSG==1) \ 0000022C 700496E5 LDR R0,[R6, #+1136] \ 00000230 010050E3 CMP R0,#+1 \ 00000234 0700001A BNE ??AddStringToLog_10 2306 { 2307 t->unread_msg++; \ 00000238 880094E5 LDR R0,[R4, #+136] \ 0000023C 010080E2 ADD R0,R0,#+1 \ 00000240 880084E5 STR R0,[R4, #+136] 2308 total_unread_all++; \ 00000244 3C0396E5 LDR R0,[R6, #+828] \ 00000248 010080E2 ADD R0,R0,#+1 \ 0000024C 3C0386E5 STR R0,[R6, #+828] 2309 NEW_MSG=0; \ 00000250 0000A0E3 MOV R0,#+0 \ 00000254 700486E5 STR R0,[R6, #+1136] 2310 } 2311 2312 t->isunread=1; \ ??AddStringToLog_10: \ 00000258 0100A0E3 MOV R0,#+1 \ 0000025C 5C0084E5 STR R0,[R4, #+92] 2313 L_NOINC: 2314 ChangeContactPos(t); \ ??AddStringToLog_9: \ 00000260 0400A0E1 MOV R0,R4 \ 00000264 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2315 } \ ??AddStringToLog_3: \ 00000268 90D08DE2 ADD SP,SP,#+144 ;; stack cleaning \ 0000026C F087BDE8 POP {R4-R10,PC} ;; return \ ??AddStringToLog_1: \ 00000270 ........ DC32 NOT_LOG_SAME_XTXT \ 00000274 ........ DC32 `?_1` \ 00000278 ........ DC32 LOG_XTXT 2316 2317 void ParseAnswer(WSHDR *ws, const char *s); 2318 2319 int time_to_stop_t9; 2320 \ In segment CODE, align 4, keep-with-next 2321 void ParseXStatusText(WSHDR *ws, const char *s, int color,int xstate) 2322 { \ ParseXStatusText: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 2323 int c; 2324 int flag=0; \ 00000010 0070A0E3 MOV R7,#+0 2325 CutWSTR(ws,0); \ 00000014 0010A0E3 MOV R1,#+0 \ 00000018 260100EF SWI +294 2326 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} 2327 wsAppendChar(ws,0xE008); \ 0000002C 0810A0E3 MOV R1,#+8 \ 00000030 E01C81E3 ORR R1,R1,#0xE000 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1C0000EF SWI +28 2328 wsAppendChar(ws,color); \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1C0000EF SWI +28 2329 wsAppendChar(ws,0xE013); \ 00000048 1310A0E3 MOV R1,#+19 \ 0000004C E01C81E3 ORR R1,R1,#0xE000 \ 00000050 0A0000EA B ??ParseXStatusText_0 2330 while((c=*s++)) 2331 { 2332 if (c==13) \ ??ParseXStatusText_1: \ 00000054 0D0050E3 CMP R0,#+13 2333 { 2334 if (!flag) \ 00000058 00005703 CMPEQ R7,#+0 \ 0000005C 0500001A BNE ??ParseXStatusText_2 2335 { 2336 flag=1; \ 00000060 0170A0E3 MOV R7,#+1 2337 wsAppendChar(ws,0xE012); \ 00000064 1210A0E3 MOV R1,#+18 \ 00000068 E01C81E3 ORR R1,R1,#0xE000 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 1C0000EF SWI +28 2338 c=' '; \ 00000074 2000A0E3 MOV R0,#+32 2339 } 2340 } 2341 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 2342 } \ 00000088 ........ LDRB R0,[R5], #+1 \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 EFFFFF1A BNE ??ParseXStatusText_1 \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return 2343 2344 } 2345 //Добавление итемов в чат при получении нового сообщения \ In segment CODE, align 4, keep-with-next 2346 void AddMsgToChat(void *data) 2347 { \ AddMsgToChat: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 40D04DE2 SUB SP,SP,#+64 2348 LOGQ *p; 2349 EDITCONTROL ec; 2350 EDITC_OPTIONS ec_options; 2351 EDCHAT_STRUCT *ed_struct; 2352 int j; 2353 int color, font, type; 2354 int zc; 2355 if (!data) return; \ 00000008 000050E3 CMP R0,#+0 \ 0000000C DA00000A BEQ ??AddMsgToChat_0 2356 ed_struct=EDIT_GetUserPointer(data); \ 00000010 DF0100EF SWI +479 \ 00000014 0060B0E1 MOVS R6,R0 2357 if (!ed_struct) return; \ 00000018 D700000A BEQ ??AddMsgToChat_0 2358 if (!ed_struct->ed_contact->isunread) return; \ 0000001C 000096E5 LDR R0,[R6, #+0] \ 00000020 5C1090E5 LDR R1,[R0, #+92] \ 00000024 000051E3 CMP R1,#+0 \ 00000028 D300000A BEQ ??AddMsgToChat_0 2359 2360 2361 p=ed_struct->ed_contact->last_log; \ 0000002C 707090E5 LDR R7,[R0, #+112] 2362 if (p) \ 00000030 ........ LDR R8,??DataTable113 ;; popup \ 00000034 000057E3 CMP R7,#+0 \ 00000038 B900000A BEQ ??AddMsgToChat_1 2363 { 2364 while(p) 2365 { 2366 font = ED_H_FONT_SIZE; 2367 if ((zc=p->acked&3)) \ ??AddMsgToChat_2: \ 0000003C ........ LDR R2,??DataTable80 ;; ED_X_FONT_SIZE \ 00000040 ........ LDR R0,??DataTable102 ;; ED_H_FONT_SIZE \ 00000044 002092E5 LDR R2,[R2, #+0] \ 00000048 ........ LDR R1,??DataTable82 ;; X_COLOR \ 0000004C 00A090E5 LDR R10,[R0, #+0] \ 00000050 040097E5 LDR R0,[R7, #+4] \ 00000054 00208DE5 STR R2,[SP, #+0] \ 00000058 004091E5 LDR R4,[R1, #+0] \ 0000005C ........ LDR R1,??DataTable83 ;; O_ED_X_FONT_SIZE \ 00000060 030010E2 ANDS R0,R0,#0x3 \ 00000064 009091E5 LDR R9,[R1, #+0] \ 00000068 ........ LDR R1,??DataTable84 ;; O_X_COLOR \ 0000006C 005091E5 LDR R5,[R1, #+0] \ 00000070 ........ LDR R1,??DataTable99 ;; I_COLOR \ 00000074 00B091E5 LDR R11,[R1, #+0] \ 00000078 0300000A BEQ ??AddMsgToChat_3 2368 { 2369 if (zc==1) \ 0000007C 010050E3 CMP R0,#+1 \ 00000080 2900001A BNE ??AddMsgToChat_4 2370 color=ACK_COLOR; //Зеленый \ 00000084 ........ LDR R0,??DataTable95 ;; ACK_COLOR \ 00000088 260000EA B ??AddMsgToChat_5 2371 else 2372 color=I_COLOR; 2373 } 2374 else 2375 { 2376 if (p->ID==0xFFFFFFFF) \ ??AddMsgToChat_3: \ 0000008C 080097E5 LDR R0,[R7, #+8] \ 00000090 010070E3 CMN R0,#+1 \ 00000094 2200001A BNE ??AddMsgToChat_6 2377 { 2378 type = p->type&0x0F; \ 00000098 0C0097E5 LDR R0,[R7, #+12] \ 0000009C 0F1000E2 AND R1,R0,#0xF 2379 if(p->type&0x10) \ 000000A0 100010E3 TST R0,#0x10 \ 000000A4 1100000A BEQ ??AddMsgToChat_7 2380 { 2381 color = (type==1)?O_I_COLOR:((type==3 || type==4)?O_X_COLOR:O_TO_COLOR); \ 000000A8 010051E3 CMP R1,#+1 \ 000000AC 0400001A BNE ??AddMsgToChat_8 \ 000000B0 ........ LDR R0,??DataTable97 ;; O_I_COLOR \ ??AddMsgToChat_9: \ 000000B4 00B090E5 LDR R11,[R0, #+0] \ ??AddMsgToChat_10: \ 000000B8 ........ LDR R0,??DataTable101 ;; O_ED_H_FONT_SIZE \ 000000BC 00A090E5 LDR R10,[R0, #+0] \ 000000C0 190000EA B ??AddMsgToChat_4 \ ??AddMsgToChat_8: \ 000000C4 030051E3 CMP R1,#+3 \ 000000C8 04005113 CMPNE R1,#+4 \ 000000CC 0500001A BNE ??AddMsgToChat_11 \ 000000D0 05B0A0E1 MOV R11,R5 2382 font = (type==3 || type==4)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; \ 000000D4 030051E3 CMP R1,#+3 \ 000000D8 04005113 CMPNE R1,#+4 \ 000000DC F5FFFF1A BNE ??AddMsgToChat_10 \ 000000E0 09A0A0E1 MOV R10,R9 \ 000000E4 100000EA B ??AddMsgToChat_4 \ ??AddMsgToChat_11: \ 000000E8 ........ LDR R0,??DataTable96 ;; O_TO_COLOR \ 000000EC F0FFFFEA B ??AddMsgToChat_9 2383 } 2384 else 2385 { 2386 color = (type==1)?I_COLOR:((type==3 || type==4)?X_COLOR:TO_COLOR); \ ??AddMsgToChat_7: \ 000000F0 010051E3 CMP R1,#+1 \ 000000F4 0C00000A BEQ ??AddMsgToChat_4 \ 000000F8 030051E3 CMP R1,#+3 \ 000000FC 04005113 CMPNE R1,#+4 \ 00000100 0500001A BNE ??AddMsgToChat_12 \ 00000104 04B0A0E1 MOV R11,R4 2387 font = (type==3 || type==4)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; \ 00000108 030051E3 CMP R1,#+3 \ 0000010C 04005113 CMPNE R1,#+4 \ 00000110 0500001A BNE ??AddMsgToChat_4 \ 00000114 02A0A0E1 MOV R10,R2 \ 00000118 030000EA B ??AddMsgToChat_4 \ ??AddMsgToChat_12: \ 0000011C ........ LDR R0,??DataTable98 ;; TO_COLOR \ 00000120 000000EA B ??AddMsgToChat_5 2388 } 2389 } 2390 else 2391 color=UNACK_COLOR; //Серый \ ??AddMsgToChat_6: \ 00000124 ........ LDR R0,??DataTable100 ;; UNACK_COLOR \ ??AddMsgToChat_5: \ 00000128 00B090E5 LDR R11,[R0, #+0] 2392 } 2393 PrepareEditControl(&ec); \ ??AddMsgToChat_4: \ 0000012C 14008DE2 ADD R0,SP,#+20 \ 00000130 640100EF SWI +356 2394 if ((p->type&0x0F)!=3 && (p->type&0x0F)!=4) \ 00000134 0C0097E5 LDR R0,[R7, #+12] \ 00000138 0F1000E2 AND R1,R0,#0xF \ 0000013C 030051E3 CMP R1,#+3 \ 00000140 0F000012 ANDNE R0,R0,#0xF \ 00000144 04005013 CMPNE R0,#+4 \ 00000148 0800000A BEQ ??AddMsgToChat_13 2395 { 2396 ascii2ws(ews,p->hdr); \ 0000014C 700398E5 LDR R0,[R8, #+880] \ 00000150 101087E2 ADD R1,R7,#+16 \ 00000154 ........ _BLF ascii2ws,??ascii2ws??rA 2397 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000158 703398E5 LDR R3,[R8, #+880] \ 0000015C 4020A0E3 MOV R2,#+64 \ 00000160 000093E5 LDR R0,[R3, #+0] \ 00000164 B000D0E1 LDRH R0,[R0, #+0] \ 00000168 01002DE9 PUSH {R0} \ 0000016C 030000EA B ??AddMsgToChat_14 2398 } 2399 else 2400 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??AddMsgToChat_13: \ 00000170 0000A0E3 MOV R0,#+0 \ 00000174 01002DE9 PUSH {R0} \ 00000178 703398E5 LDR R3,[R8, #+880] \ 0000017C 2020A0E3 MOV R2,#+32 \ ??AddMsgToChat_14: \ 00000180 0110A0E3 MOV R1,#+1 \ 00000184 18008DE2 ADD R0,SP,#+24 \ 00000188 650100EF SWI +357 \ 0000018C 04D08DE2 ADD SP,SP,#+4 2401 PrepareEditCOptions(&ec_options); \ 00000190 04008DE2 ADD R0,SP,#+4 \ 00000194 C80100EF SWI +456 2402 SetPenColorToEditCOptions(&ec_options,color); \ 00000198 0B10A0E1 MOV R1,R11 \ 0000019C 04008DE2 ADD R0,SP,#+4 \ 000001A0 CC0100EF SWI +460 2403 SetFontToEditCOptions(&ec_options,font); \ 000001A4 0A10A0E1 MOV R1,R10 \ 000001A8 04008DE2 ADD R0,SP,#+4 \ 000001AC CA0100EF SWI +458 2404 CopyOptionsToEditControl(&ec,&ec_options); \ 000001B0 04108DE2 ADD R1,SP,#+4 \ 000001B4 14008DE2 ADD R0,SP,#+20 \ 000001B8 CE0100EF SWI +462 2405 //AddEditControlToEditQend(eq,&ec,ma); 2406 EDIT_InsertEditControl(data,ed_struct->ed_answer-1,&ec); \ 000001BC 080096E5 LDR R0,[R6, #+8] \ 000001C0 14208DE2 ADD R2,SP,#+20 \ 000001C4 011040E2 SUB R1,R0,#+1 \ 000001C8 40009DE5 LDR R0,[SP, #+64] \ 000001CC D20100EF SWI +466 2407 ed_struct->ed_answer++; \ 000001D0 080096E5 LDR R0,[R6, #+8] \ 000001D4 010080E2 ADD R0,R0,#+1 \ 000001D8 080086E5 STR R0,[R6, #+8] 2408 if ((p->type&0x0F)!=3 && (p->type&0x0F)!=4) \ 000001DC 0C0097E5 LDR R0,[R7, #+12] \ 000001E0 0F1000E2 AND R1,R0,#0xF \ 000001E4 030051E3 CMP R1,#+3 \ 000001E8 04005113 CMPNE R1,#+4 \ 000001EC 0300000A BEQ ??AddMsgToChat_15 2409 { 2410 ParseAnswer(ews,p->text); \ 000001F0 700398E5 LDR R0,[R8, #+880] \ 000001F4 601087E2 ADD R1,R7,#+96 \ 000001F8 ........ BL ParseAnswer \ 000001FC 070000EA B ??AddMsgToChat_16 2411 } 2412 else 2413 {//ed_contact->xstatus 2414 ParseXStatusText(ews, p->text, (p->type&0x10)?O_X_COLOR:X_COLOR, ed_struct->ed_contact->xstate); \ ??AddMsgToChat_15: \ 00000200 100010E3 TST R0,#0x10 \ 00000204 000096E5 LDR R0,[R6, #+0] \ 00000208 0520A011 MOVNE R2,R5 \ 0000020C B635D0E1 LDRH R3,[R0, #+86] \ 00000210 700398E5 LDR R0,[R8, #+880] \ 00000214 0420A001 MOVEQ R2,R4 \ 00000218 601087E2 ADD R1,R7,#+96 \ 0000021C ........ BL ParseXStatusText 2415 } 2416 PrepareEditControl(&ec); \ ??AddMsgToChat_16: \ 00000220 14008DE2 ADD R0,SP,#+20 \ 00000224 640100EF SWI +356 2417 ConstructEditControl(&ec, 2418 ECT_NORMAL_TEXT, 2419 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 2420 ews,ews->wsbody[0]); \ 00000228 703398E5 LDR R3,[R8, #+880] \ 0000022C 000093E5 LDR R0,[R3, #+0] \ 00000230 B010D0E1 LDRH R1,[R0, #+0] \ 00000234 000051E3 CMP R1,#+0 \ 00000238 0100A0E1 MOV R0,R1 \ 0000023C 01002DE9 PUSH {R0} \ 00000240 812DA013 MOVNE R2,#+8256 \ 00000244 2020A003 MOVEQ R2,#+32 \ 00000248 0310A0E3 MOV R1,#+3 \ 0000024C 18008DE2 ADD R0,SP,#+24 \ 00000250 650100EF SWI +357 2421 PrepareEditCOptions(&ec_options); \ 00000254 08008DE2 ADD R0,SP,#+8 \ 00000258 C80100EF SWI +456 2422 //#ifdef M75 2423 if ((p->type&0x0F)!=3 && (p->type&0x0F)!=4) \ 0000025C 0C0097E5 LDR R0,[R7, #+12] \ 00000260 04D08DE2 ADD SP,SP,#+4 \ 00000264 0F1000E2 AND R1,R0,#0xF \ 00000268 030051E3 CMP R1,#+3 \ 0000026C 04005113 CMPNE R1,#+4 \ 00000270 0400000A BEQ ??AddMsgToChat_17 2424 { 2425 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000274 100010E3 TST R0,#0x10 \ 00000278 ........ LDRNE R0,??DataTable92 ;; O_ED_FONT_SIZE \ 0000027C ........ LDREQ R0,??DataTable93 ;; ED_FONT_SIZE \ 00000280 001090E5 LDR R1,[R0, #+0] \ 00000284 080000EA B ??AddMsgToChat_18 2426 } 2427 else 2428 { 2429 SetPenColorToEditCOptions(&ec_options,(p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_17: \ 00000288 100010E3 TST R0,#0x10 \ 0000028C 0510A011 MOVNE R1,R5 \ 00000290 0410A001 MOVEQ R1,R4 \ 00000294 04008DE2 ADD R0,SP,#+4 \ 00000298 CC0100EF SWI +460 2430 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_X_FONT_SIZE:ED_X_FONT_SIZE); \ 0000029C 0C0097E5 LDR R0,[R7, #+12] \ 000002A0 100010E3 TST R0,#0x10 \ 000002A4 00109D05 LDREQ R1,[SP, #+0] \ 000002A8 0910A011 MOVNE R1,R9 \ ??AddMsgToChat_18: \ 000002AC 04008DE2 ADD R0,SP,#+4 \ 000002B0 CA0100EF SWI +458 2431 } 2432 //#else 2433 // SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 2434 //#endif 2435 CopyOptionsToEditControl(&ec,&ec_options); \ 000002B4 04108DE2 ADD R1,SP,#+4 \ 000002B8 14008DE2 ADD R0,SP,#+20 \ 000002BC CE0100EF SWI +462 2436 EDIT_InsertEditControl(data,ed_struct->ed_answer-1,&ec); \ 000002C0 080096E5 LDR R0,[R6, #+8] \ 000002C4 14208DE2 ADD R2,SP,#+20 \ 000002C8 011040E2 SUB R1,R0,#+1 \ 000002CC 40009DE5 LDR R0,[SP, #+64] \ 000002D0 D20100EF SWI +466 2437 ed_struct->ed_answer++; \ 000002D4 080096E5 LDR R0,[R6, #+8] \ 000002D8 010080E2 ADD R0,R0,#+1 \ 000002DC 080086E5 STR R0,[R6, #+8] 2438 p=p->next; \ 000002E0 007097E5 LDR R7,[R7, #+0] 2439 } \ 000002E4 000057E3 CMP R7,#+0 \ 000002E8 53FFFF1A BNE ??AddMsgToChat_2 2440 j=((ed_struct->ed_contact->msg_count+1)*2); //Ожидаемый ed_answer \ 000002EC 001096E5 LDR R1,[R6, #+0] \ 000002F0 781091E5 LDR R1,[R1, #+120] \ 000002F4 011081E2 ADD R1,R1,#+1 \ 000002F8 8140A0E1 LSL R4,R1,#+1 \ 000002FC 000054E1 CMP R4,R0 \ 00000300 070000AA BGE ??AddMsgToChat_1 2441 while(jed_answer) 2442 { 2443 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??AddMsgToChat_19: \ 00000304 040096E5 LDR R0,[R6, #+4] \ 00000308 0110A0E3 MOV R1,#+1 \ 0000030C D10100EF SWI +465 2444 ed_struct->ed_answer--; \ 00000310 080096E5 LDR R0,[R6, #+8] \ 00000314 010040E2 SUB R0,R0,#+1 \ 00000318 080086E5 STR R0,[R6, #+8] 2445 } \ 0000031C 000054E1 CMP R4,R0 \ 00000320 F7FFFFBA BLT ??AddMsgToChat_19 2446 } 2447 ed_struct->ed_contact->last_log=NULL; \ ??AddMsgToChat_1: \ 00000324 000096E5 LDR R0,[R6, #+0] \ 00000328 0040A0E3 MOV R4,#+0 \ 0000032C 704080E5 STR R4,[R0, #+112] 2448 if (IsGuiOnTop(edchat_id)) \ 00000330 5C0498E5 LDR R0,[R8, #+1116] \ 00000334 350100EF SWI +309 \ 00000338 000050E3 CMP R0,#+0 \ 0000033C 0300000A BEQ ??AddMsgToChat_20 2449 total_unread--; \ 00000340 380398E5 LDR R0,[R8, #+824] \ 00000344 010040E2 SUB R0,R0,#+1 \ 00000348 380388E5 STR R0,[R8, #+824] \ 0000034C 020000EA B ??AddMsgToChat_21 2450 else 2451 ed_struct->requested_decrement_total_unread++; \ ??AddMsgToChat_20: \ 00000350 0C0096E5 LDR R0,[R6, #+12] \ 00000354 010080E2 ADD R0,R0,#+1 \ 00000358 0C0086E5 STR R0,[R6, #+12] 2452 2453 ed_struct->ed_contact->isunread=0; \ ??AddMsgToChat_21: \ 0000035C 000096E5 LDR R0,[R6, #+0] \ 00000360 5C4080E5 STR R4,[R0, #+92] 2454 2455 total_unread_all -= ed_struct->ed_contact->unread_msg; \ 00000364 3C1398E5 LDR R1,[R8, #+828] \ 00000368 882090E5 LDR R2,[R0, #+136] \ 0000036C 021041E0 SUB R1,R1,R2 \ 00000370 3C1388E5 STR R1,[R8, #+828] 2456 ed_struct->ed_contact->unread_msg=0; \ 00000374 884080E5 STR R4,[R0, #+136] 2457 2458 ChangeContactPos(ed_struct->ed_contact); \ 00000378 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2459 // EDIT_SetFocus(data,ed_struct->ed_answer); 2460 } \ ??AddMsgToChat_0: \ 0000037C 44D08DE2 ADD SP,SP,#+68 ;; stack cleaning \ 00000380 F08FBDE8 POP {R4-R11,PC} ;; return 2461 2462 //Рисуем подтверждения непосредственно \ In segment CODE, align 4, keep-with-next 2463 void DrawAck(void *data) 2464 { \ DrawAck: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 2465 LOGQ *p; 2466 EDITCONTROL ec; 2467 EDITC_OPTIONS ec_options; 2468 EDCHAT_STRUCT *ed_struct; 2469 int j; 2470 int color; 2471 int dorefresh=0; \ 0000000C 0060A0E3 MOV R6,#+0 2472 if (!data) return; \ 00000010 4C00000A BEQ ??DrawAck_0 2473 ed_struct=EDIT_GetUserPointer(data); \ 00000014 DF0100EF SWI +479 2474 if (!ed_struct) return; \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 4900000A BEQ ??DrawAck_0 2475 p=ed_struct->ed_contact->log; \ 00000020 001090E5 LDR R1,[R0, #+0] 2476 j=ed_struct->ed_answer; 2477 j-=(ed_struct->ed_contact->msg_count*2)+1; //Номер собственно хедера верхнего итема \ 00000024 080090E5 LDR R0,[R0, #+8] \ 00000028 685091E5 LDR R5,[R1, #+104] \ 0000002C 781091E5 LDR R1,[R1, #+120] \ 00000030 000055E3 CMP R5,#+0 \ 00000034 810040E0 SUB R0,R0,R1, LSL #+1 \ 00000038 017040E2 SUB R7,R0,#+1 \ 0000003C 3A00000A BEQ ??DrawAck_1 2478 while(p) 2479 { 2480 if (j>=1) //Пока возможно лишнее \ ??DrawAck_2: \ 00000040 010057E3 CMP R7,#+1 \ 00000044 340000BA BLT ??DrawAck_3 2481 { 2482 if (!(p->acked&4)) \ 00000048 040095E5 LDR R0,[R5, #+4] \ 0000004C 040010E3 TST R0,#0x4 \ 00000050 3100001A BNE ??DrawAck_3 2483 { 2484 ExtractEditControl(data,j,&ec); \ 00000054 10208DE2 ADD R2,SP,#+16 \ 00000058 0710A0E1 MOV R1,R7 \ 0000005C 0400A0E1 MOV R0,R4 \ 00000060 690100EF SWI +361 2485 PrepareEditCOptions(&ec_options); \ 00000064 0D00A0E1 MOV R0,SP \ 00000068 C80100EF SWI +456 2486 if (p->acked) \ 0000006C 040095E5 LDR R0,[R5, #+4] \ 00000070 000050E3 CMP R0,#+0 \ 00000074 0300000A BEQ ??DrawAck_4 2487 { 2488 if (p->acked==1) \ 00000078 010050E3 CMP R0,#+1 \ 0000007C ........ LDRNE R0,??DataTable99 ;; I_COLOR 2489 color=ACK_COLOR; //Зеленый \ 00000080 ........ LDREQ R0,??DataTable95 ;; ACK_COLOR \ 00000084 0F0000EA B ??DrawAck_5 2490 else 2491 color=I_COLOR; 2492 } 2493 else 2494 { 2495 if (p->ID==0xFFFFFFFF) \ ??DrawAck_4: \ 00000088 080095E5 LDR R0,[R5, #+8] \ 0000008C 010070E3 CMN R0,#+1 \ 00000090 0B00001A BNE ??DrawAck_6 2496 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,??DataTable96 ;; O_TO_COLOR \ 000000AC ........ LDREQ R0,??DataTable97 ;; O_I_COLOR \ 000000B0 040000EA B ??DrawAck_5 \ ??DrawAck_7: \ 000000B4 010050E3 CMP R0,#+1 \ 000000B8 ........ LDRNE R0,??DataTable98 ;; TO_COLOR \ 000000BC ........ LDREQ R0,??DataTable99 ;; I_COLOR \ 000000C0 000000EA B ??DrawAck_5 2497 else 2498 color=UNACK_COLOR; //Серый \ ??DrawAck_6: \ 000000C4 ........ LDR R0,??DataTable100 ;; UNACK_COLOR 2499 } 2500 SetPenColorToEditCOptions(&ec_options,color/*p->type==1?I_COLOR:TO_COLOR*/); 2501 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_H_FONT_SIZE:ED_H_FONT_SIZE); 2502 CopyOptionsToEditControl(&ec,&ec_options); 2503 StoreEditControl(data,j,&ec); 2504 p->acked|=4; //Обработали 2505 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,??DataTable101 ;; O_ED_H_FONT_SIZE \ 000000E4 ........ LDREQ R0,??DataTable102 ;; 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] 2506 } 2507 } 2508 j+=2; 2509 p=p->next; \ ??DrawAck_3: \ 0000011C 005095E5 LDR R5,[R5, #+0] \ 00000120 027087E2 ADD R7,R7,#+2 2510 } \ 00000124 000055E3 CMP R5,#+0 \ 00000128 C4FFFF1A BNE ??DrawAck_2 2511 if (IsGuiOnTop(edchat_id)&&dorefresh) RefreshGUI(); \ ??DrawAck_1: \ 0000012C ........ LDR R0,??DataTable103 ;; popup + 1116 \ 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 2512 } 2513 \ In segment CODE, align 4, keep-with-next 2514 void ask_my_info(void) 2515 { 2516 /* TPKT *p; 2517 CLIST *t; 2518 p=malloc(sizeof(PKT)); 2519 p->pkt.uin=UIN; 2520 p->pkt.type=T_REQINFOSHORT; 2521 p->pkt.data_len=0; 2522 // AddStringToLog(t,0x01,"Request info...",I_str); 2523 SUBPROC((void *)SendAnswer,0,p);*/ 2524 } \ ask_my_info: \ 00000000 1EFF2FE1 BX LR ;; return 2525 \ In segment CODE, align 4, keep-with-next 2526 void set_my_status(void) 2527 { \ set_my_status: \ 00000000 00402DE9 PUSH {LR} 2528 TPKT *p; 2529 p=malloc(sizeof(PKT)+1); \ 00000004 0900A0E3 MOV R0,#+9 \ 00000008 140000EF SWI +20 2530 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] 2531 p->pkt.type=T_MY_STATUS_CH; // Тип пакета: изменение статуса \ 00000014 0F10A0E3 MOV R1,#+15 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2532 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000001C 0110A0E3 MOV R1,#+1 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2533 p->data[0]=CurrentStatus; \ 00000024 18109FE5 LDR R1,??set_my_status_0 ;; popup + 1020 2534 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,??DataTable118 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 2535 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 popup + 1020 2536 \ In segment CODE, align 4, keep-with-next 2537 void set_my_xstatus(void) 2538 { \ set_my_xstatus: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 2539 TPKT *p; 2540 char *s1; 2541 char *s2; 2542 int l1; 2543 int l2; 2544 p=malloc(sizeof(PKT)+1); 2545 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 2546 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 2547 p->pkt.data_len=1; // Длина пакета: 1 байт 2548 p->data[0]=CurrentXStatus; \ 00000004 ........ LDR R8,??DataTable113 ;; popup 2549 SUBPROC((void *)SendAnswer,0,p); \ 00000008 ........ LDR R6,??DataTable118 ;; SendAnswer \ 0000000C 0CD04DE2 SUB SP,SP,#+12 \ 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 000498E5 LDR R0,[R8, #+1024] \ 00000038 0420A0E1 MOV R2,R4 \ 0000003C 0800C4E5 STRB R0,[R4, #+8] \ 00000040 0010A0E3 MOV R1,#+0 \ 00000044 0600A0E1 MOV R0,R6 \ 00000048 710100EF SWI +369 2550 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 0000004C 000498E5 LDR R0,[R8, #+1024] \ 00000050 0D10A0E1 MOV R1,SP \ 00000054 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000058 010080E2 ADD R0,R0,#+1 \ 0000005C ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000060 0070A0E1 MOV R7,R0 2551 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000064 000498E5 LDR R0,[R8, #+1024] \ 00000068 04108DE2 ADD R1,SP,#+4 \ 0000006C 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000070 020080E2 ADD R0,R0,#+2 \ 00000074 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000078 0080A0E1 MOV R8,R0 2552 if ((!s1)||(!s2)) return; \ 0000007C 000057E3 CMP R7,#+0 \ 00000080 00005813 CMPNE R8,#+0 \ 00000084 F781BD08 POPEQ {R0-R2,R4-R8,PC} 2553 p=malloc(sizeof(PKT)+l1+l2+1); \ 00000088 00009DE5 LDR R0,[SP, #+0] \ 0000008C 04109DE5 LDR R1,[SP, #+4] \ 00000090 000081E0 ADD R0,R1,R0 \ 00000094 090080E2 ADD R0,R0,#+9 \ 00000098 140000EF SWI +20 \ 0000009C 0040A0E1 MOV R4,R0 2554 p->pkt.uin=0; \ 000000A0 005084E5 STR R5,[R4, #+0] 2555 p->pkt.type=T_XTEXT_SET; \ 000000A4 1A00A0E3 MOV R0,#+26 \ 000000A8 B400C4E1 STRH R0,[R4, #+4] 2556 p->pkt.data_len=l1+l2+1; \ 000000AC 00009DE5 LDR R0,[SP, #+0] \ 000000B0 04109DE5 LDR R1,[SP, #+4] \ 000000B4 000081E0 ADD R0,R1,R0 \ 000000B8 010080E2 ADD R0,R0,#+1 \ 000000BC B600C4E1 STRH R0,[R4, #+6] 2557 strncpy(p->data+0,s1,l1); \ 000000C0 00209DE5 LDR R2,[SP, #+0] \ 000000C4 0710A0E1 MOV R1,R7 \ 000000C8 080084E2 ADD R0,R4,#+8 \ 000000CC 160100EF SWI +278 2558 p->data[l1]=0; \ 000000D0 00009DE5 LDR R0,[SP, #+0] 2559 strncpy(p->data+l1+1,s2,l2); \ 000000D4 0810A0E1 MOV R1,R8 \ 000000D8 040080E0 ADD R0,R0,R4 \ 000000DC 0850C0E5 STRB R5,[R0, #+8] \ 000000E0 00009DE5 LDR R0,[SP, #+0] \ 000000E4 04209DE5 LDR R2,[SP, #+4] \ 000000E8 040080E0 ADD R0,R0,R4 \ 000000EC 090080E2 ADD R0,R0,#+9 \ 000000F0 160100EF SWI +278 2560 SUBPROC((void *)SendAnswer,0,p); \ 000000F4 0420A0E1 MOV R2,R4 \ 000000F8 0010A0E3 MOV R1,#+0 \ 000000FC 0600A0E1 MOV R0,R6 \ 00000100 710100EF SWI +369 2561 } \ 00000104 F781BDE8 POP {R0-R2,R4-R8,PC} ;; return 2562 \ In segment CODE, align 4, keep-with-next 2563 void to_develop(void) 2564 { 2565 if (silenthide) return; \ to_develop: \ 00000000 ........ LDR R0,??DataTable113 ;; popup \ 00000004 00402DE9 PUSH {LR} \ 00000008 F41390E5 LDR R1,[R0, #+1012] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 2566 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R2,??DataTable108 ;; Canvas \ 00000018 B41FA0E3 MOV R1,#+720 \ 0000001C A33F82E2 ADD R3,R2,#+652 2567 gipc.name_from=ipc_my_name; \ 00000020 9B2F82E2 ADD R2,R2,#+620 \ 00000024 D42280E5 STR R2,[R0, #+724] 2568 gipc.data=(void *)maincsm_id; \ 00000028 042390E5 LDR R2,[R0, #+772] \ 0000002C 003081E7 STR R3,[R1, +R0] \ 00000030 D82280E5 STR R2,[R0, #+728] 2569 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 00000034 003081E0 ADD R3,R1,R0 \ 00000038 0220A0E3 MOV R2,#+2 \ 0000003C FC1F82E3 ORR R1,R2,#0x3F0 \ 00000040 0900A0E3 MOV R0,#+9 \ 00000044 420C80E3 ORR R0,R0,#0x4200 \ 00000048 000100EF SWI +256 2570 } \ 0000004C 0080BDE8 POP {PC} ;; return 2571 \ In segment CODE, align 4, keep-with-next 2572 void ReqAddMsgToChat(CLIST *t) 2573 { \ ReqAddMsgToChat: \ 00000000 70402DE9 PUSH {R4-R6,LR} 2574 if (edchat_id) \ 00000004 ........ LDR R5,??DataTable113 ;; popup \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 5C0495E5 LDR R0,[R5, #+1116] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 2575 { 2576 void *data=FindGUIbyId(edchat_id,NULL); \ 00000018 5C0495E5 LDR R0,[R5, #+1116] \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 090200EF SWI +521 \ 00000024 0060A0E1 MOV R6,R0 2577 { 2578 EDCHAT_STRUCT *ed_struct; 2579 ed_struct=EDIT_GetUserPointer(data); \ 00000028 DF0100EF SWI +479 2580 if (ed_struct) \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 7080BD08 POPEQ {R4-R6,PC} 2581 { 2582 if (ed_struct->ed_contact==t) \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 040050E1 CMP R0,R4 \ 0000003C 7080BD18 POPNE {R4-R6,PC} 2583 { 2584 if (EDIT_IsBusy(data)) \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 1C0200EF SWI +540 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0400000A BEQ ??ReqAddMsgToChat_0 2585 { 2586 t->req_add=1; \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 600084E5 STR R0,[R4, #+96] 2587 time_to_stop_t9=3; \ 00000058 0300A0E3 MOV R0,#+3 \ 0000005C 740485E5 STR R0,[R5, #+1140] \ 00000060 7080BDE8 POP {R4-R6,PC} 2588 } 2589 else 2590 { 2591 AddMsgToChat(data); \ ??ReqAddMsgToChat_0: \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 ........ BL AddMsgToChat 2592 DirectRedrawGUI_ID(edchat_id); \ 0000006C 5C0495E5 LDR R0,[R5, #+1116] \ 00000070 400100EF SWI +320 2593 } 2594 } 2595 } 2596 } 2597 } 2598 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 2599 2600 2601 /*static char *GetStatusByIconIndex(int icon) 2602 { 2603 char stat[32]; 2604 switch(icon) 2605 { 2606 case IS_OFFLINE : sprintf(stat,"Отключен"); break; 2607 case IS_INVISIBLE : sprintf(stat,"Невидимый"); break; 2608 case IS_AWAY : sprintf(stat,"Отсутсвует"); break; 2609 case IS_NA : sprintf(stat,"Не доступен"); break; 2610 case IS_OCCUPIED: sprintf(stat,"Занят"); break; 2611 case IS_DND : sprintf(stat,"Не беспокоить");break; 2612 case IS_DEPRESSION : sprintf(stat,"Депрессия"); break; 2613 case IS_EVIL : sprintf(stat,"Злой"); break; 2614 case IS_HOME : sprintf(stat,"Дома"); break; 2615 case IS_LUNCH : sprintf(stat,"Жру"); break; 2616 case IS_WORK : sprintf(stat,"Работа"); break; 2617 case IS_ONLINE : sprintf(stat,"В сети"); break; 2618 case IS_FFC : sprintf(stat,"Готов болтать");break; 2619 // default : sprintf(stat,empty_str); break; 2620 } 2621 return stat; 2622 }*/ 2623 2624 /* 2625 * Функция: GetStatusByIconIndex 2626 * Описание: Получание текста статусов по иконке, нужно для сообщения в чате для информации о времени подключении\отключении контакта 2627 * Параметры: int icon - иконка контакта 2628 * Возвращаемое значение: Текст статуса 2629 */ \ In segment CODE, align 4, keep-with-next 2630 const char *GetStatusByIconIndex(int icon) 2631 { 2632 switch(icon) \ GetStatusByIconIndex: \ 00000000 ........ LDR R1,??DataTable110 ;; lgpData \ 00000004 010040E2 SUB R0,R0,#+1 \ 00000008 0B0050E3 CMP R0,#+11 \ 0000000C 0700008A BHI ??GetStatusByIconIndex_1 \ 00000010 012F8FE2 ADR R2,??GetStatusByIconIndex_0 \ 00000014 0020D2E7 LDRB R2,[R2, R0] \ 00000018 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??GetStatusByIconIndex_0: \ 0000001C 06080A0C DC8 +6,+8,+10,+12 \ 00000020 0E101214 DC8 +14,+16,+18,+20 \ 00000024 1618021A DC8 +22,+24,+2,+26 2633 { 2634 case IS_ONLINE : return lgpData[LGP_StOnline]; \ ??GetStatusByIconIndex_2: \ 00000028 E00091E5 LDR R0,[R1, #+224] \ 0000002C 1EFF2FE1 BX LR 2635 case IS_OFFLINE : return lgpData[LGP_StOffline]; \ ??GetStatusByIconIndex_1: \ 00000030 DC0091E5 LDR R0,[R1, #+220] \ 00000034 1EFF2FE1 BX LR 2636 case IS_INVISIBLE : return lgpData[LGP_StInvis]; \ ??GetStatusByIconIndex_3: \ 00000038 F80091E5 LDR R0,[R1, #+248] \ 0000003C 1EFF2FE1 BX LR 2637 case IS_AWAY : return lgpData[LGP_StAway]; \ ??GetStatusByIconIndex_4: \ 00000040 E40091E5 LDR R0,[R1, #+228] \ 00000044 1EFF2FE1 BX LR 2638 case IS_NA : return lgpData[LGP_StNa]; \ ??GetStatusByIconIndex_5: \ 00000048 E80091E5 LDR R0,[R1, #+232] \ 0000004C 1EFF2FE1 BX LR 2639 case IS_OCCUPIED: return lgpData[LGP_StOccup]; \ ??GetStatusByIconIndex_6: \ 00000050 F00091E5 LDR R0,[R1, #+240] \ 00000054 1EFF2FE1 BX LR 2640 case IS_DND : return lgpData[LGP_StDnd]; \ ??GetStatusByIconIndex_7: \ 00000058 EC0091E5 LDR R0,[R1, #+236] \ 0000005C 1EFF2FE1 BX LR 2641 case IS_DEPRESSION : return lgpData[LGP_StDepression]; \ ??GetStatusByIconIndex_8: \ 00000060 FC0091E5 LDR R0,[R1, #+252] \ 00000064 1EFF2FE1 BX LR 2642 case IS_EVIL : return lgpData[LGP_StEvil]; \ ??GetStatusByIconIndex_9: \ 00000068 000191E5 LDR R0,[R1, #+256] \ 0000006C 1EFF2FE1 BX LR 2643 case IS_HOME : return lgpData[LGP_StHome]; \ ??GetStatusByIconIndex_10: \ 00000070 040191E5 LDR R0,[R1, #+260] \ 00000074 1EFF2FE1 BX LR 2644 case IS_LUNCH : return lgpData[LGP_StLunch]; \ ??GetStatusByIconIndex_11: \ 00000078 080191E5 LDR R0,[R1, #+264] \ 0000007C 1EFF2FE1 BX LR 2645 case IS_WORK : return lgpData[LGP_StWork]; \ ??GetStatusByIconIndex_12: \ 00000080 0C0191E5 LDR R0,[R1, #+268] \ 00000084 1EFF2FE1 BX LR 2646 case IS_FFC : return lgpData[LGP_StFfc]; \ ??GetStatusByIconIndex_13: \ 00000088 F40091E5 LDR R0,[R1, #+244] \ 0000008C 1EFF2FE1 BX LR ;; return 2647 // default : sprintf(stat,empty_str); break; 2648 } 2649 return lgpData[LGP_StOffline]; 2650 } 2651 2652 2653 int req_info_contact = 0; // флаг запроса инфы о контакте 2654 extern const int Send_Auto_Status; 2655 2656 2657 #ifdef CLV_LIST 2658 \ In segment CODE, align 4, keep-with-next 2659 int FindSubWord(char *buffer, char *subword) 2660 { \ FindSubWord: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 2661 //ShowMSG(1,(int)buffer); 2662 // ShowMSG(1,(int)subword); 2663 int len,i; 2664 i = 0; \ 0000000C 0060A0E3 MOV R6,#+0 2665 len = strlen(subword); \ 00000010 0500A0E1 MOV R0,R5 \ 00000014 1B0000EF SWI +27 \ 00000018 0070A0E1 MOV R7,R0 \ 0000001C 000000EA B ??FindSubWord_0 2666 while(buffer[i] != 0) 2667 { 2668 if(buffer[i] == subword[0]) 2669 if(!memcmp(&buffer[i],&subword[0],len)) return(1); 2670 i++; \ ??FindSubWord_1: \ 00000020 016086E2 ADD R6,R6,#+1 \ ??FindSubWord_0: \ 00000024 0400D6E7 LDRB R0,[R6, +R4] \ 00000028 000050E3 CMP R0,#+0 \ 0000002C F080BD08 POPEQ {R4-R7,PC} \ 00000030 0010D5E5 LDRB R1,[R5, #+0] \ 00000034 010050E1 CMP R0,R1 \ 00000038 F8FFFF1A BNE ??FindSubWord_1 \ 0000003C 0720A0E1 MOV R2,R7 \ 00000040 0510A0E1 MOV R1,R5 \ 00000044 040086E0 ADD R0,R6,R4 \ 00000048 1C0100EF SWI +284 \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 F2FFFF1A BNE ??FindSubWord_1 \ 00000054 0100A0E3 MOV R0,#+1 2671 } 2672 return(0); \ 00000058 F080BDE8 POP {R4-R7,PC} ;; return 2673 } 2674 2675 /* 2676 * Функция: GetCLV 2677 * Описание: Проверка контакта на видимость, псевдо-видимость для натаськи так сказать... 2678 * пишем (или берем файл из QIP'a) UIN пользователей которым моем отправлять текст автостатуса 2679 * когда находимся в состоянии "Видимый для списк видящих" 2680 * Параметры: CLIT *t 2681 * Возвращаемое значение: 2682 * retval = 0 - Контакт отсутствует в списке 2683 * retval = 1 - Контакт есть, значит можно отправлять текст =) 2684 */ \ In segment CODE, align 4, keep-with-next 2685 int GetCLV(CLIST *t) 2686 { 2687 unsigned int io_error; 2688 char path[128]; 2689 sprintf(path,"%s\\%u.clv",TEMPLATES_PATH,UIN); \ GetCLV: \ 00000000 ........ LDR R2,??DataTable111 ;; TEMPLATES_PATH \ 00000004 F0432DE9 PUSH {R4-R9,LR} \ 00000008 E0509FE5 LDR R5,??GetCLV_0 ;; `?` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ LDR R0,??DataTable112 ;; UIN \ 00000014 94D04DE2 SUB SP,SP,#+148 \ 00000018 003090E5 LDR R3,[R0, #+0] \ 0000001C 041085E2 ADD R1,R5,#+4 \ 00000020 14008DE2 ADD R0,SP,#+20 \ 00000024 160000EF SWI +22 2690 int hFile = fopen(path,A_ReadOnly,P_READ, &io_error); \ 00000028 0D30A0E1 MOV R3,SP \ 0000002C 8020A0E3 MOV R2,#+128 \ 00000030 0010A0E3 MOV R1,#+0 \ 00000034 14008DE2 ADD R0,SP,#+20 \ 00000038 0A0000EF SWI +10 2691 char *buf = NULL; 2692 char tmp[9]; 2693 int retval = 0; 2694 const char _u[]="%u"; \ 0000003C 0010D5E5 LDRB R1,[R5, #0] \ 00000040 0060A0E1 MOV R6,R0 \ 00000044 04008DE2 ADD R0,SP,#+4 \ 00000048 0010C0E5 STRB R1,[R0, #+0] \ 0000004C 0110D5E5 LDRB R1,[R5, #+1] \ 00000050 0070A0E3 MOV R7,#+0 \ 00000054 0080A0E3 MOV R8,#+0 \ 00000058 0110C0E5 STRB R1,[R0, #+1] \ 0000005C 0210D5E5 LDRB R1,[R5, #+2] \ 00000060 0790A0E1 MOV R9,R7 2695 if(hFile!=-1) \ 00000064 010076E3 CMN R6,#+1 \ 00000068 0210C0E5 STRB R1,[R0, #+2] \ 0000006C 1500000A BEQ ??GetCLV_1 2696 { 2697 buf = malloc(10000); \ 00000070 1000A0E3 MOV R0,#+16 \ 00000074 9C0D80E3 ORR R0,R0,#0x2700 \ 00000078 140000EF SWI +20 \ 0000007C 0080A0E1 MOV R8,R0 2698 fread(hFile, buf, 9999, &io_error); \ 00000080 0D30A0E1 MOV R3,SP \ 00000084 0F20A0E3 MOV R2,#+15 \ 00000088 9C2D82E3 ORR R2,R2,#0x2700 \ 0000008C 0810A0E1 MOV R1,R8 \ 00000090 0600A0E1 MOV R0,R6 \ 00000094 0B0000EF SWI +11 2699 2700 sprintf(tmp, _u, t->uin); \ 00000098 0C2094E5 LDR R2,[R4, #+12] \ 0000009C 04108DE2 ADD R1,SP,#+4 \ 000000A0 08008DE2 ADD R0,SP,#+8 \ 000000A4 160000EF SWI +22 2701 tmp[strlen(tmp)] = 0; \ 000000A8 08008DE2 ADD R0,SP,#+8 \ 000000AC 1B0000EF SWI +27 \ 000000B0 08108DE2 ADD R1,SP,#+8 \ 000000B4 0170C0E7 STRB R7,[R0, +R1] 2702 int fuin = FindSubWord(buf,tmp); 2703 //int fname = FindSubWord(buf,t->name); 2704 if(fuin > 0)// || fname) \ 000000B8 0800A0E1 MOV R0,R8 \ 000000BC ........ BL FindSubWord \ 000000C0 010050E3 CMP R0,#+1 2705 retval = 1; \ 000000C4 0190A0A3 MOVGE R9,#+1 2706 } 2707 fclose(hFile, &io_error); \ ??GetCLV_1: \ 000000C8 0D10A0E1 MOV R1,SP \ 000000CC 0600A0E1 MOV R0,R6 \ 000000D0 0D0000EF SWI +13 2708 if(buf) mfree(buf); \ 000000D4 000058E3 CMP R8,#+0 \ 000000D8 0100000A BEQ ??GetCLV_2 \ 000000DC 0800A0E1 MOV R0,R8 \ 000000E0 150000EF SWI +21 2709 return retval; \ ??GetCLV_2: \ 000000E4 0900A0E1 MOV R0,R9 \ 000000E8 94D08DE2 ADD SP,SP,#+148 \ 000000EC F083BDE8 POP {R4-R9,PC} ;; return \ ??GetCLV_0: \ 000000F0 ........ DC32 `?` 2710 } 2711 #endif 2712 2713 #ifdef AUTOANSWER 2714 2715 /* 2716 * Функция: AutoAnswer 2717 * Описание: Автоответчик по бездействию, посылает пользовательское сообщение в чат 2718 * Параметры: CLIST *t - структура контакта 2719 * Возвращаемое значение: 1 - если автоответчик сработал 2720 * 0 - автоответик не сработал 2721 */ 2722 \ In segment CODE, align 4, keep-with-next 2723 int AutoAnswer(CLIST *t) 2724 { \ AutoAnswer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2725 extern const char exept_list[]; 2726 int retval = 0; 2727 2728 //если запросили инфу о контакте то не отсылать текст автостатуса =) 2729 if(req_info_contact) { req_info_contact = 0; return 0; } \ 00000004 ........ LDR R6,??DataTable113 ;; popup \ 00000008 0050A0E1 MOV R5,R0 \ 0000000C 780496E5 LDR R0,[R6, #+1144] \ 00000010 0070A0E3 MOV R7,#+0 \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0000A013 MOVNE R0,#+0 \ 0000001C 78048615 STRNE R0,[R6, #+1144] \ 00000020 F08FBD18 POPNE {R4-R11,PC} 2730 2731 if(Send_Auto_Status && away_m == 1 && ((t->automsgcount++) < automsgcount)) \ 00000024 28029FE5 LDR R0,??AutoAnswer_0+0x4 ;; Send_Auto_Status \ 00000028 000090E5 LDR R0,[R0, #+0] \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 8400000A BEQ ??AutoAnswer_1 \ 00000034 0C0496E5 LDR R0,[R6, #+1036] \ 00000038 010050E3 CMP R0,#+1 \ 0000003C 8100001A BNE ??AutoAnswer_1 \ 00000040 940095E5 LDR R0,[R5, #+148] \ 00000044 011080E2 ADD R1,R0,#+1 \ 00000048 941085E5 STR R1,[R5, #+148] \ 0000004C 04129FE5 LDR R1,??AutoAnswer_0+0x8 ;; automsgcount \ 00000050 001091E5 LDR R1,[R1, #+0] \ 00000054 010050E1 CMP R0,R1 \ 00000058 7A00002A BCS ??AutoAnswer_1 2732 { 2733 //если видим тока для списка видимых, то проверяем есть ли в файле templates//[uin].clv номер или ник для которого мона отослать автостатус 2734 if(CurrentPrivateStatus == 2/*PL_VISLIST_CAN_SEE*/ && !GetCLV(t)) return 0; \ 0000005C 040496E5 LDR R0,[R6, #+1028] \ 00000060 020050E3 CMP R0,#+2 \ 00000064 0300001A BNE ??AutoAnswer_2 \ 00000068 0500A0E1 MOV R0,R5 \ 0000006C ........ BL GetCLV \ 00000070 000050E3 CMP R0,#+0 \ 00000074 7300000A BEQ ??AutoAnswer_1 2735 if(CurrentPrivateStatus == 1) return 0;//если полный инвиз то ни че не отправляем никому \ ??AutoAnswer_2: \ 00000078 040496E5 LDR R0,[R6, #+1028] \ 0000007C 010050E3 CMP R0,#+1 \ 00000080 7000000A BEQ ??AutoAnswer_1 2736 2737 retval = 1; 2738 TPKT *p; 2739 2740 int m = (msg_away_timer*5)/60; \ 00000084 080496E5 LDR R0,[R6, #+1032] \ 00000088 ........ LDR R1,??DataTable116 ;; 0xffffffff88888889 2741 int sec = (msg_away_timer*5)%60; 2742 int h = m/60; 2743 2744 //1 час 2 3 4 часа 5 > часов //(h == 1 ? "час" : ( (h > 1 && h < 5) ? "часа" : "часов" )) ; 2745 char *hour_text = malloc(64); 2746 2747 if(h>0) sprintf(hour_text,"%02d %s",h, (h == 1 ? "час" : ( (h > 1 && h < 5) ? "часа" : "часов" )) ); \ 0000008C ........ LDR R9,??DataTable115 ;; percent_t \ 00000090 000180E0 ADD R0,R0,R0, LSL #+2 \ 00000094 9120C3E0 SMULL R2,R3,R1,R0 \ 00000098 0170A0E3 MOV R7,#+1 \ 0000009C 003083E0 ADD R3,R3,R0 \ 000000A0 C332A0E1 ASR R3,R3,#+5 \ 000000A4 A0AF83E0 ADD R10,R3,R0, LSR #+31 \ 000000A8 9021C3E0 SMULL R2,R3,R0,R1 \ 000000AC 3C20A0E3 MOV R2,#+60 \ 000000B0 003083E0 ADD R3,R3,R0 \ 000000B4 C332A0E1 ASR R3,R3,#+5 \ 000000B8 A03F83E0 ADD R3,R3,R0, LSR #+31 \ 000000BC 920303E0 MUL R3,R2,R3 \ 000000C0 03B040E0 SUB R11,R0,R3 \ 000000C4 0100A0E1 MOV R0,R1 \ 000000C8 901AC2E0 SMULL R1,R2,R0,R10 \ 000000CC 4000A0E3 MOV R0,#+64 \ 000000D0 0A2082E0 ADD R2,R2,R10 \ 000000D4 C222A0E1 ASR R2,R2,#+5 \ 000000D8 AA4F82E0 ADD R4,R2,R10, LSR #+31 \ 000000DC 140000EF SWI +20 \ 000000E0 0080A0E1 MOV R8,R0 \ 000000E4 010054E3 CMP R4,#+1 \ 000000E8 080000BA BLT ??AutoAnswer_3 \ 000000EC 573F8F02 ADREQ R3,??AutoAnswer_0 ;; "час" \ 000000F0 0200000A BEQ ??AutoAnswer_4 \ 000000F4 050054E3 CMP R4,#+5 \ 000000F8 0C3089B2 ADDLT R3,R9,#+12 \ 000000FC 143089A2 ADDGE R3,R9,#+20 \ ??AutoAnswer_4: \ 00000100 0420A0E1 MOV R2,R4 \ 00000104 041089E2 ADD R1,R9,#+4 \ 00000108 160000EF SWI +22 \ 0000010C 010000EA B ??AutoAnswer_5 2748 else strcpy(hour_text, empty_str); \ ??AutoAnswer_3: \ 00000110 031089E2 ADD R1,R9,#+3 \ 00000114 1A0000EF SWI +26 2749 2750 char *min_text = (m == 1 ? "минуту" :( (m > 1 && m < 5) ? "минуты" : "минут")); \ ??AutoAnswer_5: \ 00000118 01005AE3 CMP R10,#+1 \ 0000011C 1C008902 ADDEQ R0,R9,#+28 \ 00000120 0500000A BEQ ??AutoAnswer_6 \ 00000124 02005AE3 CMP R10,#+2 \ 00000128 020000BA BLT ??AutoAnswer_7 \ 0000012C 05005AE3 CMP R10,#+5 \ 00000130 240089B2 ADDLT R0,R9,#+36 \ 00000134 000000BA BLT ??AutoAnswer_6 \ ??AutoAnswer_7: \ 00000138 2C0089E2 ADD R0,R9,#+44 2751 2752 sprintf(away_msg, "Автоответчик: %s %s! %s ( %s [бездествую %s %02d %s %02d %s] )", 2753 awayHelloMsg, t->name, awayMsg, away_msg_time, hour_text, m%60, min_text, sec, "секунд"); \ ??AutoAnswer_6: \ 0000013C 9810A0E3 MOV R1,#+152 \ 00000140 601D81E3 ORR R1,R1,#0x1800 \ 00000144 064081E0 ADD R4,R1,R6 \ 00000148 741089E2 ADD R1,R9,#+116 \ 0000014C 02002DE9 PUSH {R1} \ 00000150 00082DE9 PUSH {R11} \ 00000154 01002DE9 PUSH {R0} \ 00000158 ........ LDR R0,??DataTable116 ;; 0xffffffff88888889 \ 0000015C 143085E2 ADD R3,R5,#+20 \ 00000160 9A10C2E0 SMULL R1,R2,R10,R0 \ 00000164 3C10A0E3 MOV R1,#+60 \ 00000168 0A2082E0 ADD R2,R2,R10 \ 0000016C C222A0E1 ASR R2,R2,#+5 \ 00000170 AA2F82E0 ADD R2,R2,R10, LSR #+31 \ 00000174 910202E0 MUL R2,R1,R2 \ 00000178 341089E2 ADD R1,R9,#+52 \ 0000017C 02004AE0 SUB R0,R10,R2 \ 00000180 D4209FE5 LDR R2,??AutoAnswer_0+0xC ;; awayHelloMsg \ 00000184 01002DE9 PUSH {R0} \ 00000188 0800A0E1 MOV R0,R8 \ 0000018C 01002DE9 PUSH {R0} \ 00000190 9800A0E3 MOV R0,#+152 \ 00000194 640D80E3 ORR R0,R0,#0x1900 \ 00000198 060080E0 ADD R0,R0,R6 \ 0000019C 01002DE9 PUSH {R0} \ 000001A0 B8009FE5 LDR R0,??AutoAnswer_0+0x10 ;; awayMsg \ 000001A4 01002DE9 PUSH {R0} \ 000001A8 0400A0E1 MOV R0,R4 \ 000001AC 160000EF SWI +22 2754 2755 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 000001B0 0400A0E1 MOV R0,R4 \ 000001B4 1B0000EF SWI +27 \ 000001B8 090080E2 ADD R0,R0,#+9 \ 000001BC 140000EF SWI +20 \ 000001C0 00A0A0E1 MOV R10,R0 2756 p->pkt.uin=t->uin; \ 000001C4 0C0095E5 LDR R0,[R5, #+12] \ 000001C8 00008AE5 STR R0,[R10, #+0] 2757 p->pkt.type=T_SENDMSG; \ 000001CC 0200A0E3 MOV R0,#+2 \ 000001D0 B400CAE1 STRH R0,[R10, #+4] 2758 p->pkt.data_len=strlen(away_msg); \ 000001D4 0400A0E1 MOV R0,R4 \ 000001D8 1B0000EF SWI +27 \ 000001DC B600CAE1 STRH R0,[R10, #+6] 2759 strcpy(p->data,away_msg); \ 000001E0 0410A0E1 MOV R1,R4 \ 000001E4 08008AE2 ADD R0,R10,#+8 \ 000001E8 1A0000EF SWI +26 2760 AddStringToLog(t,0x01,t->automsgcount < 1 ? away_msg : "Send autoaway text...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000001EC 0C0396E5 LDR R0,[R6, #+780] \ 000001F0 ........ LDR R3,??DataTable117 ;; I_str \ 000001F4 010080E2 ADD R0,R0,#+1 \ 000001F8 0C0386E5 STR R0,[R6, #+780] \ 000001FC 941095E5 LDR R1,[R5, #+148] \ 00000200 1CD08DE2 ADD SP,SP,#+28 \ 00000204 010051E3 CMP R1,#+1 \ 00000208 0110A0E3 MOV R1,#+1 \ 0000020C 02002DE9 PUSH {R1} \ 00000210 8008A0E1 LSL R0,R0,#+17 \ 00000214 A008A0E1 LSR R0,R0,#+17 \ 00000218 01002DE9 PUSH {R0} \ 0000021C 0420A0B1 MOVLT R2,R4 \ 00000220 7C2089A2 ADDGE R2,R9,#+124 \ 00000224 0500A0E1 MOV R0,R5 \ 00000228 ........ BL AddStringToLog 2761 2762 SUBPROC((void *)SendAnswer,0,p); \ 0000022C ........ LDR R0,??DataTable118 ;; SendAnswer \ 00000230 0A20A0E1 MOV R2,R10 \ 00000234 0010A0E3 MOV R1,#+0 \ 00000238 710100EF SWI +369 2763 mfree(hour_text); \ 0000023C 0800A0E1 MOV R0,R8 \ 00000240 150000EF SWI +21 \ 00000244 08D08DE2 ADD SP,SP,#+8 2764 } 2765 return retval; \ ??AutoAnswer_1: \ 00000248 0700A0E1 MOV R0,R7 \ 0000024C F08FBDE8 POP {R4-R11,PC} ;; return \ ??AutoAnswer_0: \ 00000250 F7E0F100 DC8 "час" \ 00000254 ........ DC32 Send_Auto_Status \ 00000258 ........ DC32 automsgcount \ 0000025C ........ DC32 awayHelloMsg \ 00000260 ........ DC32 awayMsg 2766 } 2767 2768 #endif 2769 2770 \ In segment CODE, align 4, keep-with-next 2771 void ProcessPacket(TPKT *p) 2772 { \ ProcessPacket: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 84DF4DE2 SUB SP,SP,#+528 2773 extern const int VIBR_TYPE, VIBR_ON_CONNECT; 2774 CLIST *t; 2775 LOGQ *q; 2776 char s[256]; 2777 switch(p->pkt.type) \ 00000008 ........ LDR R5,??DataTable129 ;; Canvas \ 0000000C ........ LDR R7,??DataTable120 ;; popup \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 B410D4E1 LDRH R1,[R4, #+4] \ 00000018 000094E5 LDR R0,[R4, #+0] \ 0000001C E8A0A0E3 MOV R10,#+232 \ 00000020 50AE8AE3 ORR R10,R10,#0x500 \ 00000024 0160A0E3 MOV R6,#+1 \ 00000028 0080A0E3 MOV R8,#+0 \ 0000002C 031041E2 SUB R1,R1,#+3 \ 00000030 220051E3 CMP R1,#+34 \ 00000034 DD02008A BHI ??ProcessPacket_1 \ 00000038 022F8FE2 ADR R2,??ProcessPacket_0 \ 0000003C 8110A0E1 MOV R1,R1, LSL #+1 \ 00000040 B12092E1 LDRH R2,[R2, R1] \ 00000044 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??ProcessPacket_0: \ 00000048 63011100D902 DC16 +355,+17,+729,+729 \ D902 \ 00000050 1400D9025A00 DC16 +20,+729,+90,+729 \ D902 \ 00000058 D902D902D902 DC16 +729,+729,+729,+729 \ D902 \ 00000060 D90225022502 DC16 +729,+549,+549,+729 \ D902 \ 00000068 D90241005200 DC16 +729,+65,+82,+729 \ D902 \ 00000070 D902D9025902 DC16 +729,+729,+601,+729 \ D902 \ 00000078 D902D902D902 DC16 +729,+729,+729,+729 \ D902 \ 00000080 D702D902D902 DC16 +727,+729,+729,+729 \ D902 \ 00000088 D902D9025400 DC16 +729,+729,+84,+0 \ 0000 2778 { 2779 case T_LOGIN: 2780 set_my_status(); \ ??ProcessPacket_2: \ 00000090 ........ BL set_my_status 2781 set_my_xstatus(); \ 00000094 ........ BL set_my_xstatus \ 00000098 C40200EA B ??ProcessPacket_1 2782 break; 2783 case T_CLENTRY: 2784 if (p->pkt.uin) \ ??ProcessPacket_3: \ 0000009C 000050E3 CMP R0,#+0 \ 000000A0 1800000A BEQ ??ProcessPacket_4 2785 { 2786 if ((t=FindContactByUin(p->pkt.uin))) \ 000000A4 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000000A8 0090B0E1 MOVS R9,R0 \ 000000AC 0E00000A BEQ ??ProcessPacket_5 2787 { 2788 // t->state=0xFFFF; 2789 if (!t->local) strncpy(t->name,p->data,63); \ 000000B0 840099E5 LDR R0,[R9, #+132] \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 0300001A BNE ??ProcessPacket_6 \ 000000BC 3F20A0E3 MOV R2,#+63 \ 000000C0 081084E2 ADD R1,R4,#+8 \ 000000C4 140089E2 ADD R0,R9,#+20 \ 000000C8 160100EF SWI +278 2790 t->group=GROUP_CACHE; \ ??ProcessPacket_6: \ 000000CC 580497E5 LDR R0,[R7, #+1112] \ 000000D0 100089E5 STR R0,[R9, #+16] 2791 ChangeContactPos(t); \ 000000D4 0900A0E1 MOV R0,R9 \ 000000D8 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2792 RecountMenu(t, 0); \ 000000DC 0010A0E3 MOV R1,#+0 \ ??ProcessPacket_7: \ 000000E0 0900A0E1 MOV R0,R9 \ ??ProcessPacket_8: \ 000000E4 ........ BL RecountMenu \ 000000E8 B00200EA B ??ProcessPacket_1 2793 } 2794 else 2795 { 2796 RecountMenu(AddContact(p->pkt.uin,p->data, GROUP_CACHE, 0),0); \ ??ProcessPacket_5: \ 000000EC 582497E5 LDR R2,[R7, #+1112] \ 000000F0 000094E5 LDR R0,[R4, #+0] \ 000000F4 0030A0E3 MOV R3,#+0 \ 000000F8 081084E2 ADD R1,R4,#+8 \ 000000FC ........ _BLF AddContact,??AddContact??rA \ 00000100 0810A0E1 MOV R1,R8 \ 00000104 F6FFFFEA B ??ProcessPacket_8 2797 } 2798 } 2799 else 2800 { 2801 if(VIBR_ON_CONNECT) \ ??ProcessPacket_4: \ 00000108 ........ LDR R0,??DataTable121 ;; VIBR_ON_CONNECT \ 0000010C 000090E5 LDR R0,[R0, #+0] \ 00000110 000050E3 CMP R0,#+0 \ 00000114 0100000A BEQ ??ProcessPacket_9 2802 { 2803 vibra_count=1; \ 00000118 146387E5 STR R6,[R7, #+788] 2804 start_vibra(); \ 0000011C ........ BL start_vibra 2805 } 2806 FIRST_START = 1; \ ??ProcessPacket_9: \ 00000120 1C6487E5 STR R6,[R7, #+1052] 2807 GROUP_CACHE=0; \ 00000124 588487E5 STR R8,[R7, #+1112] 2808 //ask_my_info(); 2809 #ifndef GUI_INTERFACE 2810 if (contactlist_menu_id) 2811 { 2812 RecountMenu(NULL, 1); 2813 } 2814 else 2815 create_contactlist_menu(); 2816 #else 2817 if (ShowLoadScreen==0 && maingui_id) \ 00000128 480397E5 LDR R0,[R7, #+840] \ 0000012C 000050E3 CMP R0,#+0 \ 00000130 0300001A BNE ??ProcessPacket_10 \ 00000134 080397E5 LDR R0,[R7, #+776] \ 00000138 000050E3 CMP R0,#+0 \ 0000013C 9B02001A BNE ??ProcessPacket_1 \ 00000140 000000EA B ??ProcessPacket_11 2818 { 2819 //RecountMenu(NULL, 1); 2820 } 2821 else 2822 { 2823 if(ShowLoadScreen) ShowLoadScreen=0; \ ??ProcessPacket_10: \ 00000144 488387E5 STR R8,[R7, #+840] 2824 SMART_REDRAW(); \ ??ProcessPacket_11: \ 00000148 ........ BL SMART_REDRAW \ 0000014C 970200EA B ??ProcessPacket_1 2825 } 2826 #endif 2827 } 2828 break; 2829 case T_GROUPID: 2830 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_12: \ 00000150 580487E5 STR R0,[R7, #+1112] \ 00000154 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000158 0090B0E1 MOVS R9,R0 \ 0000015C 0700000A BEQ ??ProcessPacket_13 2831 { 2832 strncpy(t->name,p->data,63); \ 00000160 3F20A0E3 MOV R2,#+63 \ 00000164 081084E2 ADD R1,R4,#+8 \ 00000168 140089E2 ADD R0,R9,#+20 \ 0000016C 160100EF SWI +278 2833 ChangeContactPos(t); \ 00000170 0900A0E1 MOV R0,R9 \ 00000174 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2834 RecountMenu(t, 1); \ 00000178 0110A0E3 MOV R1,#+1 \ 0000017C D7FFFFEA B ??ProcessPacket_7 2835 } 2836 else 2837 { 2838 RecountMenu(AddGroup(p->pkt.uin,p->data), 1); \ ??ProcessPacket_13: \ 00000180 000094E5 LDR R0,[R4, #+0] \ 00000184 081084E2 ADD R1,R4,#+8 \ 00000188 ........ _BLF AddGroup,??AddGroup??rA \ 0000018C 0110A0E3 MOV R1,#+1 \ ??ProcessPacket_14: \ 00000190 D3FFFFEA B ??ProcessPacket_8 2839 } 2840 break; 2841 case T_GROUPFOLLOW: 2842 GROUP_CACHE=p->pkt.uin; \ ??ProcessPacket_15: \ 00000194 580487E5 STR R0,[R7, #+1112] \ 00000198 840200EA B ??ProcessPacket_1 2843 break; 2844 case T_CLIENTID: 2845 if (t=FindContactByUin(p->pkt.uin)){ \ ??ProcessPacket_16: \ 0000019C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000001A0 0090B0E1 MOVS R9,R0 \ 000001A4 8102000A BEQ ??ProcessPacket_1 2846 t->clientid=*(char *)p->data; \ 000001A8 0800D4E5 LDRB R0,[R4, #+8] \ 000001AC 5800C9E5 STRB R0,[R9, #+88] \ 000001B0 7E0200EA B ??ProcessPacket_1 2847 } 2848 break; 2849 case T_STATUSCHANGE: 2850 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_17: \ 000001B4 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000001B8 0090B0E1 MOVS R9,R0 2851 if (t) \ 000001BC F100000A BEQ ??ProcessPacket_18 2852 { 2853 int i=t->state; 2854 CLIST *oldt=NULL; \ 000001C0 0A00D4E5 LDRB R0,[R4, #+10] \ 000001C4 B615D9E1 LDRH R1,[R9, #+86] \ 000001C8 B4A5D9E1 LDRH R10,[R9, #+84] \ 000001CC 00B0A0E3 MOV R11,#+0 \ 000001D0 000051E1 CMP R1,R0 \ 000001D4 1D00000A BEQ ??ProcessPacket_19 2855 if (t->xstate!=p->data[2]) // Если картинка икс статуса сменилась 2856 { 2857 t->xstate=p->data[2]; \ 000001D8 B605C9E1 STRH R0,[R9, #+86] 2858 FreeXText(t); \ 000001DC 0900A0E1 MOV R0,R9 \ 000001E0 ........ _BLF FreeXText,??FreeXText??rA 2859 if (t->xstate && ENA_AUTO_XTXT) // Если установлен икс статус и можно запрашивать по смене икс статуса :) \ 000001E4 B605D9E1 LDRH R0,[R9, #+86] \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 1600000A BEQ ??ProcessPacket_20 \ 000001F0 CC099FE5 LDR R0,??ProcessPacket_21+0x4 ;; ENA_AUTO_XTXT \ 000001F4 000090E5 LDR R0,[R0, #+0] \ 000001F8 000050E3 CMP R0,#+0 \ 000001FC 1200000A BEQ ??ProcessPacket_20 2860 { 2861 t->req_xtext=1; \ 00000200 806089E5 STR R6,[R9, #+128] 2862 if (edchat_id) // Если открыт чат \ 00000204 5C0497E5 LDR R0,[R7, #+1116] \ 00000208 000050E3 CMP R0,#+0 \ 0000020C 0F00000A BEQ ??ProcessPacket_19 2863 { 2864 void *data=FindGUIbyId(edchat_id,NULL); \ 00000210 5C0497E5 LDR R0,[R7, #+1116] \ 00000214 0010A0E3 MOV R1,#+0 \ 00000218 090200EF SWI +521 2865 if (data) \ 0000021C 000050E3 CMP R0,#+0 \ 00000220 0A00000A BEQ ??ProcessPacket_19 2866 { 2867 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 00000224 DF0100EF SWI +479 2868 if (ed_struct) \ 00000228 000050E3 CMP R0,#+0 \ 0000022C 0700000A BEQ ??ProcessPacket_19 2869 { 2870 if (ed_struct->ed_contact==t) // Если наш чат то запрашиваем текст статуса \ 00000230 000090E5 LDR R0,[R0, #+0] \ 00000234 090050E1 CMP R0,R9 \ 00000238 0400001A BNE ??ProcessPacket_19 2871 { 2872 t->req_xtext=0; \ 0000023C 808089E5 STR R8,[R9, #+128] 2873 RequestXText(t->uin); \ 00000240 0C0099E5 LDR R0,[R9, #+12] \ 00000244 ........ BL RequestXText \ 00000248 000000EA B ??ProcessPacket_19 2874 } 2875 } 2876 } 2877 } 2878 } 2879 else // Если икс статус не установлен то на всякий случай снимаем флаг получения текста 2880 { 2881 t->req_xtext=0; \ ??ProcessPacket_20: \ 0000024C 808089E5 STR R8,[R9, #+128] 2882 } 2883 } 2884 #ifdef GUI_INTERFACE 2885 if(!ShowLoadScreen) \ ??ProcessPacket_19: \ 00000250 480397E5 LDR R0,[R7, #+840] \ 00000254 000050E3 CMP R0,#+0 \ 00000258 0300001A BNE ??ProcessPacket_22 2886 oldt=FindContactByN(clistm->curpos); \ 0000025C 4C0397E5 LDR R0,[R7, #+844] \ 00000260 000090E5 LDR R0,[R0, #+0] \ 00000264 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000268 00B0A0E1 MOV R11,R0 2887 #else 2888 if (contactlist_menu_id) 2889 { 2890 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); 2891 } 2892 #endif 2893 t->state=*((unsigned short *)(p->data)); \ ??ProcessPacket_22: \ 0000026C B800D4E1 LDRH R0,[R4, #+8] \ 00000270 B405C9E1 STRH R0,[R9, #+84] 2894 LogStatusChange(t); \ 00000274 0900A0E1 MOV R0,R9 \ 00000278 ........ _BLF LogStatusChange,??LogStatusChange??rA 2895 ChangeContactPos(t); \ 0000027C 0900A0E1 MOV R0,R9 \ 00000280 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2896 RecountMenu(oldt, 1); \ 00000284 0110A0E3 MOV R1,#+1 \ 00000288 0B00A0E1 MOV R0,R11 \ 0000028C ........ BL RecountMenu 2897 2898 // char *s = GetStatusByIconIndex(GetIconIndex(t)); 2899 //TTime time; 2900 GetDateTime(NULL,&t->time_struct); \ 00000290 9C1089E2 ADD R1,R9,#+156 \ 00000294 0800A0E1 MOV R0,R8 \ 00000298 B40000EF SWI +180 2901 char *txt=malloc(64); \ 0000029C 4000A0E3 MOV R0,#+64 \ 000002A0 140000EF SWI +20 \ 000002A4 00B0A0E1 MOV R11,R0 2902 sprintf(txt," %s: %02d:%02d:%02d",GetStatusByIconIndex(GetIconIndex(t)),t->time_struct.hour,t->time_struct.min,t->time_struct.sec); \ 000002A8 0900A0E1 MOV R0,R9 \ 000002AC ........ BL GetIconIndex \ 000002B0 ........ BL GetStatusByIconIndex \ 000002B4 0020A0E1 MOV R2,R0 \ 000002B8 9E00D9E5 LDRB R0,[R9, #+158] \ 000002BC F01085E2 ADD R1,R5,#+240 \ 000002C0 01002DE9 PUSH {R0} \ 000002C4 9D00D9E5 LDRB R0,[R9, #+157] \ 000002C8 01002DE9 PUSH {R0} \ 000002CC 9C30D9E5 LDRB R3,[R9, #+156] \ 000002D0 0B00A0E1 MOV R0,R11 \ 000002D4 160000EF SWI +22 2903 2904 if(isLogStatusChange && t->state != i)// by kluchnik 05.04.08 \ 000002D8 E8089FE5 LDR R0,??ProcessPacket_21+0x8 ;; isLogStatusChange \ 000002DC 000090E5 LDR R0,[R0, #+0] \ 000002E0 08D08DE2 ADD SP,SP,#+8 \ 000002E4 000050E3 CMP R0,#+0 \ 000002E8 B405D911 LDRHNE R0,[R9, #+84] \ 000002EC 0A005011 CMPNE R0,R10 \ 000002F0 1A00000A BEQ ??ProcessPacket_23 2905 { 2906 // if(t->state == IS_ONLINE || t->state == IS_OFFLINE) 2907 do_StatusChangeWrite(txt, t, 0); \ 000002F4 0020A0E3 MOV R2,#+0 \ 000002F8 0910A0E1 MOV R1,R9 \ 000002FC 0B00A0E1 MOV R0,R11 \ 00000300 ........ _BLF do_StatusChangeWrite,??do_StatusChangeWrite??rA 2908 2909 FreeStatusTime(t); \ 00000304 0900A0E1 MOV R0,R9 \ 00000308 ........ _BLF FreeStatusTime,??FreeStatusTime??rA 2910 t->sttime=malloc(64); \ 0000030C 4000A0E3 MOV R0,#+64 \ 00000310 140000EF SWI +20 \ 00000314 980089E5 STR R0,[R9, #+152] 2911 zeromem(t->sttime,sizeof(t->sttime)); \ 00000318 0410A0E3 MOV R1,#+4 \ 0000031C 1D0100EF SWI +285 2912 snprintf(t->sttime,64,txt); \ 00000320 980099E5 LDR R0,[R9, #+152] \ 00000324 0B20A0E1 MOV R2,R11 \ 00000328 4010A0E3 MOV R1,#+64 \ 0000032C 1B0100EF SWI +283 2913 AddStringToLog(t,0x04,txt,"Status change",0xFFFFFFFF, 0); \ 00000330 0800A0E1 MOV R0,R8 \ 00000334 01002DE9 PUSH {R0} \ 00000338 413F85E2 ADD R3,R5,#+260 \ 0000033C 0B20A0E1 MOV R2,R11 \ 00000340 0410A0E3 MOV R1,#+4 \ 00000344 0000E0E1 MVN R0,R0 \ 00000348 01002DE9 PUSH {R0} \ 0000034C 0900A0E1 MOV R0,R9 \ 00000350 ........ BL AddStringToLog 2914 ReqAddMsgToChat(t); \ 00000354 0900A0E1 MOV R0,R9 \ 00000358 ........ BL ReqAddMsgToChat \ 0000035C 08D08DE2 ADD SP,SP,#+8 2915 //RecountMenu(NULL, 0); 2916 } 2917 #ifdef GUI_INTERFACE 2918 sprintf(on_off_buf,"[%s: %s]\n",txt+1,t->name); \ ??ProcessPacket_23: \ 00000360 143089E2 ADD R3,R9,#+20 \ 00000364 01208BE2 ADD R2,R11,#+1 \ 00000368 451F85E2 ADD R1,R5,#+276 \ 0000036C 0800A0E3 MOV R0,#+8 \ 00000370 5C0D80E3 ORR R0,R0,#0x1700 \ 00000374 070080E0 ADD R0,R0,R7 \ 00000378 160000EF SWI +22 2919 #endif 2920 mfree(txt); \ 0000037C 0B00A0E1 MOV R0,R11 2921 2922 if ((t->state!=0xFFFF)&&(i==0xFFFF))//Звук \ 00000380 44B89FE5 LDR R11,??ProcessPacket_21+0xC ;; PopupOnlineString \ 00000384 150000EF SWI +21 \ 00000388 B405D9E1 LDRH R0,[R9, #+84] \ 0000038C FF10A0E3 MOV R1,#+255 \ 00000390 FF1C81E3 ORR R1,R1,#0xFF00 \ 00000394 010050E1 CMP R0,R1 \ 00000398 6000000A BEQ ??ProcessPacket_24 \ 0000039C 01005AE1 CMP R10,R1 \ 000003A0 5E00001A BNE ??ProcessPacket_24 2923 { 2924 { 2925 char extsnd_path[128]; 2926 zeromem(extsnd_path,sizeof(extsnd_path)); \ 000003A4 8010A0E3 MOV R1,#+128 2927 if(t->uin == ADDITION_UIN && ExtSndModeIndivd)//если звук для индивидуального контакта \ 000003A8 20A89FE5 LDR R10,??ProcessPacket_21+0x10 ;; sndGlobal \ 000003AC 440F8DE2 ADD R0,SP,#+272 \ 000003B0 1D0100EF SWI +285 \ 000003B4 18189FE5 LDR R1,??ProcessPacket_21+0x14 ;; ADDITION_UIN \ 000003B8 0C0099E5 LDR R0,[R9, #+12] \ 000003BC 001091E5 LDR R1,[R1, #+0] \ 000003C0 010050E1 CMP R0,R1 \ 000003C4 0300001A BNE ??ProcessPacket_25 \ 000003C8 200497E5 LDR R0,[R7, #+1056] \ 000003CC 000050E3 CMP R0,#+0 2928 { 2929 ExtSndMode_flag = 1;//то ставил флаг, чтоб играть независимо включен звук или нет... \ 000003D0 24648715 STRNE R6,[R7, #+1060] 2930 goto p_extsnd; \ 000003D4 0400001A BNE ??ProcessPacket_26 2931 } 2932 if(/*ExtSndModeIndivd ||*/ (Is_Extd_Sound && Is_Sounds_Enabled))//расширенные звуки для каждого контакта \ ??ProcessPacket_25: \ 000003D8 340397E5 LDR R0,[R7, #+820] \ 000003DC 000050E3 CMP R0,#+0 \ 000003E0 20039715 LDRNE R0,[R7, #+800] \ 000003E4 00005013 CMPNE R0,#+0 \ 000003E8 1D00000A BEQ ??ProcessPacket_27 2933 { 2934 p_extsnd: 2935 2936 strcpy(extsnd_path,sndMsg); \ ??ProcessPacket_26: \ 000003EC ........ LDR R1,??DataTable122 ;; sndMsg \ 000003F0 440F8DE2 ADD R0,SP,#+272 \ 000003F4 1A0000EF SWI +26 2937 for( int i=strlen(extsnd_path) ; extsnd_path[i] != '\\' ; i-- ) extsnd_path[i] = 0; \ 000003F8 440F8DE2 ADD R0,SP,#+272 \ 000003FC 1B0000EF SWI +27 \ 00000400 441F8DE2 ADD R1,SP,#+272 \ 00000404 0110D0E7 LDRB R1,[R0, +R1] \ 00000408 5C0051E3 CMP R1,#+92 \ 0000040C 0500000A BEQ ??ProcessPacket_28 \ ??ProcessPacket_29: \ 00000410 441F8DE2 ADD R1,SP,#+272 \ 00000414 0180C0E7 STRB R8,[R0, +R1] \ 00000418 010040E2 SUB R0,R0,#+1 \ 0000041C 0110D0E7 LDRB R1,[R0, +R1] \ 00000420 5C0051E3 CMP R1,#+92 \ 00000424 F9FFFF1A BNE ??ProcessPacket_29 2938 sprintf((char*)(extsnd_path+strlen(extsnd_path)),"online\\%u",t->uin); \ ??ProcessPacket_28: \ 00000428 440F8DE2 ADD R0,SP,#+272 \ 0000042C 1B0000EF SWI +27 \ 00000430 0C2099E5 LDR R2,[R9, #+12] \ 00000434 481F85E2 ADD R1,R5,#+288 \ 00000438 443F8DE2 ADD R3,SP,#+272 \ 0000043C 030080E0 ADD R0,R0,R3 \ 00000440 160000EF SWI +22 2939 2940 2941 char *p = GetExtSnd(extsnd_path); \ 00000444 440F8DE2 ADD R0,SP,#+272 \ 00000448 ........ BL GetExtSnd \ 0000044C 0050B0E1 MOVS R5,R0 2942 2943 if(p) Play(p); \ 00000450 0300000A BEQ ??ProcessPacket_27 \ 00000454 ........ BL Play 2944 else Play(sndGlobal); 2945 2946 if(p) mfree(p); \ 00000458 0500A0E1 MOV R0,R5 \ 0000045C 150000EF SWI +21 \ 00000460 010000EA B ??ProcessPacket_30 2947 } 2948 else 2949 Play(sndGlobal); \ ??ProcessPacket_27: \ 00000464 0A00A0E1 MOV R0,R10 \ 00000468 ........ BL Play 2950 } 2951 2952 if(Is_POPUP_On && (PopupShow==2 || PopupShow==3)) \ ??ProcessPacket_30: \ 0000046C 2C0397E5 LDR R0,[R7, #+812] \ 00000470 000050E3 CMP R0,#+0 \ 00000474 1300000A BEQ ??ProcessPacket_31 \ 00000478 58079FE5 LDR R0,??ProcessPacket_21+0x18 ;; PopupShow \ 0000047C 000090E5 LDR R0,[R0, #+0] \ 00000480 020050E3 CMP R0,#+2 \ 00000484 03005013 CMPNE R0,#+3 \ 00000488 0E00001A BNE ??ProcessPacket_31 2953 { 2954 popup[POPUP_ON].timer = POPUP_N; \ 0000048C 1400A0E3 MOV R0,#+20 \ 00000490 400087E5 STR R0,[R7, #+64] 2955 /// popup[POPUP_OFF].timer=0; 2956 /// popup[POPUP_MSG].timer=0; 2957 #ifdef GUI_INTERFACE 2958 popup[POPUP_ON].icon = GetIconByItem(GetIconIndex(t)); \ 00000494 0900A0E1 MOV R0,R9 \ 00000498 ........ BL GetIconIndex \ 0000049C ........ _BLF GetIconByItem,??GetIconByItem??rA \ 000004A0 540087E5 STR R0,[R7, #+84] \ 000004A4 B605D9E1 LDRH R0,[R9, #+86] \ 000004A8 5C0087E5 STR R0,[R7, #+92] 2959 popup[POPUP_ON].xiconf = t->xstate; 2960 popup[POPUP_ON].xicon = GetXIconByItem(t->xstate); \ 000004AC ........ _BLF GetXIconByItem,??GetXIconByItem??rA \ 000004B0 580087E5 STR R0,[R7, #+88] 2961 #endif 2962 sprintf(popup[POPUP_ON].name,PopupOnlineString,t->name); \ 000004B4 142089E2 ADD R2,R9,#+20 \ 000004B8 0B10A0E1 MOV R1,R11 \ 000004BC 0700A0E1 MOV R0,R7 \ 000004C0 160000EF SWI +22 2963 show_on_contact(); \ 000004C4 ........ BL show_on_contact 2964 } 2965 2966 if(Is_ILU_By_Online) \ ??ProcessPacket_31: \ 000004C8 300397E5 LDR R0,[R7, #+816] \ 000004CC 000050E3 CMP R0,#+0 \ 000004D0 0700000A BEQ ??ProcessPacket_32 2967 IlluminationOn(IllByONCantact,0,ILL_SEND_TMR,ILL_RECV_FADE); \ 000004D4 00079FE5 LDR R0,??ProcessPacket_21+0x1C ;; ILL_RECV_FADE \ 000004D8 0010A0E3 MOV R1,#+0 \ 000004DC 003090E5 LDR R3,[R0, #+0] \ 000004E0 F8069FE5 LDR R0,??ProcessPacket_21+0x20 ;; ILL_SEND_TMR \ 000004E4 002090E5 LDR R2,[R0, #+0] \ 000004E8 F4069FE5 LDR R0,??ProcessPacket_21+0x24 ;; IllByONCantact \ 000004EC 000090E5 LDR R0,[R0, #+0] \ 000004F0 ........ BL IlluminationOn 2968 #ifdef GUI_INTERFACE 2969 t->isonline = 2; \ ??ProcessPacket_32: \ 000004F4 0200A0E3 MOV R0,#+2 \ 000004F8 8C0089E5 STR R0,[R9, #+140] 2970 isonline = 1;//ON_OFF_TIME; 2971 on_off_timer = ON_OFF_TIME; \ 000004FC E4069FE5 LDR R0,??ProcessPacket_21+0x28 ;; ON_OFF_TIME \ 00000500 5C6387E5 STR R6,[R7, #+860] \ 00000504 000090E5 LDR R0,[R0, #+0] \ 00000508 500387E5 STR R0,[R7, #+848] 2972 #ifndef DEBUG 2973 if(ShowLoadScreen == 0) \ 0000050C 480397E5 LDR R0,[R7, #+840] \ 00000510 000050E3 CMP R0,#+0 \ 00000514 1B00001A BNE ??ProcessPacket_18 2974 RedrawOnline(); \ 00000518 ........ BL RedrawOnline \ 0000051C 190000EA B ??ProcessPacket_18 2975 #endif 2976 #endif 2977 } 2978 2979 if ((i!=0xFFFF)&&(t->state==0xFFFF))//Звук \ ??ProcessPacket_24: \ 00000520 01005AE1 CMP R10,R1 \ 00000524 1700000A BEQ ??ProcessPacket_18 \ 00000528 010050E1 CMP R0,R1 \ 0000052C 1500001A BNE ??ProcessPacket_18 2980 { 2981 #ifdef GUI_INTERFACE 2982 on_off_timer=ON_OFF_TIME; \ 00000530 B0069FE5 LDR R0,??ProcessPacket_21+0x28 ;; ON_OFF_TIME \ 00000534 000090E5 LDR R0,[R0, #+0] \ 00000538 500387E5 STR R0,[R7, #+848] 2983 #endif 2984 if(Is_POPUP_On && isPopupOff) \ 0000053C 2C0397E5 LDR R0,[R7, #+812] \ 00000540 000050E3 CMP R0,#+0 \ 00000544 0D00000A BEQ ??ProcessPacket_33 \ 00000548 ........ LDR R0,??DataTable123 ;; isPopupOff \ 0000054C 000090E5 LDR R0,[R0, #+0] \ 00000550 000050E3 CMP R0,#+0 \ 00000554 0900000A BEQ ??ProcessPacket_33 2985 { 2986 #ifdef GUI_INTERFACE 2987 popup[POPUP_OFF].icon = GetIconByItem(IS_OFFLINE); \ 00000558 0000A0E3 MOV R0,#+0 \ 0000055C ........ _BLF GetIconByItem,??GetIconByItem??rA \ 00000560 B40087E5 STR R0,[R7, #+180] 2988 #endif 2989 popup[POPUP_OFF].timer = POPUP_N; \ 00000564 1400A0E3 MOV R0,#+20 \ 00000568 A00087E5 STR R0,[R7, #+160] 2990 // popup[POPUP_ON].timer=0; 2991 // popup[POPUP_MSG].timer=0; 2992 2993 sprintf(popup[POPUP_OFF].name,PopupOnlineString,t->name); \ 0000056C 142089E2 ADD R2,R9,#+20 \ 00000570 0B10A0E1 MOV R1,R11 \ 00000574 600087E2 ADD R0,R7,#+96 \ 00000578 160000EF SWI +22 2994 show_off_contact(); \ 0000057C ........ BL show_off_contact 2995 } 2996 Play(sndSrvMsg); \ ??ProcessPacket_33: \ 00000580 64069FE5 LDR R0,??ProcessPacket_21+0x2C ;; sndSrvMsg \ 00000584 ........ BL Play 2997 } 2998 } 2999 3000 if (edchat_id) \ ??ProcessPacket_18: \ 00000588 5C0497E5 LDR R0,[R7, #+1116] \ 0000058C 000050E3 CMP R0,#+0 \ 00000590 0A00000A BEQ ??ProcessPacket_34 3001 { 3002 void *data=FindGUIbyId(edchat_id,NULL); \ 00000594 5C0497E5 LDR R0,[R7, #+1116] \ 00000598 0010A0E3 MOV R1,#+0 \ 0000059C 090200EF SWI +521 3003 { 3004 EDCHAT_STRUCT *ed_struct; 3005 ed_struct=EDIT_GetUserPointer(data); \ 000005A0 DF0100EF SWI +479 3006 if (ed_struct) \ 000005A4 000050E3 CMP R0,#+0 \ 000005A8 0400000A BEQ ??ProcessPacket_34 3007 { 3008 if (ed_struct->ed_contact==t) \ 000005AC 000090E5 LDR R0,[R0, #+0] \ 000005B0 090050E1 CMP R0,R9 \ 000005B4 0100001A BNE ??ProcessPacket_34 3009 { 3010 DirectRedrawGUI_ID(edchat_id); \ 000005B8 5C0497E5 LDR R0,[R7, #+1116] \ 000005BC 400100EF SWI +320 3011 } 3012 } 3013 } 3014 } 3015 #ifdef GUI_INTERFACE 3016 Get_Online_Contact(); \ ??ProcessPacket_34: \ 000005C0 ........ BL Get_Online_Contact 3017 if(ShowLoadScreen == 0) RefreshCL(); \ 000005C4 480397E5 LDR R0,[R7, #+840] \ 000005C8 000050E3 CMP R0,#+0 \ 000005CC 7701001A BNE ??ProcessPacket_1 \ ??ProcessPacket_35: \ 000005D0 606387E5 STR R6,[R7, #+864] \ 000005D4 750100EA B ??ProcessPacket_1 3018 #endif 3019 break; 3020 case T_RECVMSG: 3021 NEW_MSG=1; \ ??ProcessPacket_36: \ 000005D8 706487E5 STR R6,[R7, #+1136] 3022 t=FindContactByUin(p->pkt.uin); \ 000005DC ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000005E0 0090B0E1 MOVS R9,R0 3023 3024 if (!t) \ 000005E4 3A00001A BNE ??ProcessPacket_37 3025 { 3026 #ifdef ANTISPAM //14.08.2009 by kluchnik 3027 //если запрос об авторизации от контакта вне списка, то на куй шлем...боримся со спамом 3028 //нет сообщений от контакта нет лога сообщений и пришел запрос об авторизации 3029 if(strcmp(p->data,"Auth REQ: ") == 0) \ 000005E8 661F85E2 ADD R1,R5,#+408 \ 000005EC 080084E2 ADD R0,R4,#+8 \ 000005F0 190000EF SWI +25 \ 000005F4 000050E3 CMP R0,#+0 \ 000005F8 2B00001A BNE ??ProcessPacket_38 3030 { 3031 blocked_spam++; \ 000005FC 640397E5 LDR R0,[R7, #+868] 3032 char log_path[128]; 3033 char log1[128]; 3034 zeromem(log1,128); \ 00000600 8010A0E3 MOV R1,#+128 \ 00000604 010080E2 ADD R0,R0,#+1 \ 00000608 640387E5 STR R0,[R7, #+868] \ 0000060C 640F8DE2 ADD R0,SP,#+400 \ 00000610 1D0100EF SWI +285 3035 TDate date; 3036 TTime time; 3037 GetDateTime(&date,&time); \ 00000614 08108DE2 ADD R1,SP,#+8 \ 00000618 0D00A0E1 MOV R0,SP \ 0000061C B40000EF SWI +180 3038 strcpy(log_path,TEMPLATES_PATH); \ 00000620 ........ LDR R1,??DataTable124 ;; TEMPLATES_PATH \ 00000624 440F8DE2 ADD R0,SP,#+272 \ 00000628 1A0000EF SWI +26 3039 strcat(log_path,"\\antispam.log"); \ 0000062C 4B1F85E2 ADD R1,R5,#+300 \ 00000630 440F8DE2 ADD R0,SP,#+272 \ 00000634 170000EF SWI +23 3040 sprintf(log1,"%02d:%02d:%02d %02d.%02d.%04d Auth REQ noname contact blocked =) (uin %d %s)\n", 3041 time.hour,time.min,time.sec, date.day, date.month,date.year, t->uin,t->name); \ 00000638 1400A0E3 MOV R0,#+20 \ 0000063C 01002DE9 PUSH {R0} \ 00000640 4F1F85E2 ADD R1,R5,#+316 \ 00000644 0C00A0E3 MOV R0,#+12 \ 00000648 000090E5 LDR R0,[R0, #+0] \ 0000064C 01002DE9 PUSH {R0} \ 00000650 08009DE5 LDR R0,[SP, #+8] \ 00000654 01002DE9 PUSH {R0} \ 00000658 1000DDE5 LDRB R0,[SP, #+16] \ 0000065C 01002DE9 PUSH {R0} \ 00000660 1500DDE5 LDRB R0,[SP, #+21] \ 00000664 01002DE9 PUSH {R0} \ 00000668 1E00DDE5 LDRB R0,[SP, #+30] \ 0000066C 01002DE9 PUSH {R0} \ 00000670 2130DDE5 LDRB R3,[SP, #+33] \ 00000674 2020DDE5 LDRB R2,[SP, #+32] \ 00000678 6A0F8DE2 ADD R0,SP,#+424 \ 0000067C 160000EF SWI +22 3042 log(log_path,log1); \ 00000680 6A1F8DE2 ADD R1,SP,#+424 \ 00000684 4A0F8DE2 ADD R0,SP,#+296 \ 00000688 ........ _BLF log,??log??rA 3043 PrintMessage("Block spam", 15); \ 0000068C 631F85E2 ADD R1,R5,#+396 \ 00000690 07008AE0 ADD R0,R10,R7 \ 00000694 1A0000EF SWI +26 \ 00000698 0F00A0E3 MOV R0,#+15 \ 0000069C 6C0387E5 STR R0,[R7, #+876] 3044 return; \ 000006A0 18D08DE2 ADD SP,SP,#+24 \ 000006A4 84DF8DE2 ADD SP,SP,#+528 \ 000006A8 F08FBDE8 POP {R4-R11,PC} 3045 } 3046 #endif 3047 3048 sprintf(s,percent_d,p->pkt.uin); \ ??ProcessPacket_38: \ 000006AC 002094E5 LDR R2,[R4, #+0] \ 000006B0 081085E2 ADD R1,R5,#+8 \ 000006B4 10008DE2 ADD R0,SP,#+16 \ 000006B8 160000EF SWI +22 3049 t=AddContact(p->pkt.uin,s,GROUP_CACHE,0); \ 000006BC 582497E5 LDR R2,[R7, #+1112] \ 000006C0 000094E5 LDR R0,[R4, #+0] \ 000006C4 0030A0E3 MOV R3,#+0 \ 000006C8 10108DE2 ADD R1,SP,#+16 \ 000006CC ........ _BLF AddContact,??AddContact??rA \ 000006D0 0090A0E1 MOV R9,R0 3050 } 3051 3052 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<isactive=ACTIVE_TIME; \ ??ProcessPacket_39: \ 00000700 5A0FA0E3 MOV R0,#+360 \ 00000704 740089E5 STR R0,[R9, #+116] 3054 3055 CountMessage[0]++;//общее принятых \ 00000708 BA0FA0E3 MOV R0,#+744 \ 0000070C 071090E7 LDR R1,[R0, +R7] \ 00000710 011081E2 ADD R1,R1,#+1 \ 00000714 071080E7 STR R1,[R0, +R7] 3056 t->recv++;//тока принятых для этого контакта \ 00000718 A40099E5 LDR R0,[R9, #+164] \ 0000071C 010080E2 ADD R0,R0,#+1 \ 00000720 A40089E5 STR R0,[R9, #+164] 3057 3058 // ChangeContactPos(t); 3059 if(VIBR_TYPE) \ 00000724 ........ LDR R0,??DataTable126 ;; VIBR_TYPE \ 00000728 000090E5 LDR R0,[R0, #+0] \ 0000072C 000050E3 CMP R0,#+0 3060 vibra_count=2; \ 00000730 0200A013 MOVNE R0,#+2 \ 00000734 14038715 STRNE R0,[R7, #+788] 3061 else 3062 vibra_count=1; \ 00000738 14638705 STREQ R6,[R7, #+788] 3063 start_vibra(); \ 0000073C ........ BL start_vibra 3064 if(Is_Double_Vibra_On) Reminder_timer(); \ 00000740 180397E5 LDR R0,[R7, #+792] \ 00000744 000050E3 CMP R0,#+0 \ 00000748 0000000A BEQ ??ProcessPacket_40 \ 0000074C ........ BL Reminder_timer 3065 3066 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ ??ProcessPacket_40: \ 00000750 84049FE5 LDR R0,??ProcessPacket_21+0x1C ;; ILL_RECV_FADE \ 00000754 003090E5 LDR R3,[R0, #+0] \ 00000758 90049FE5 LDR R0,??ProcessPacket_21+0x30 ;; ILL_RECV_TMR \ 0000075C 002090E5 LDR R2,[R0, #+0] \ 00000760 8C049FE5 LDR R0,??ProcessPacket_21+0x34 ;; ILL_KEYS_RECV \ 00000764 001090E5 LDR R1,[R0, #+0] \ 00000768 88049FE5 LDR R0,??ProcessPacket_21+0x38 ;; ILL_DISP_RECV \ 0000076C 000090E5 LDR R0,[R0, #+0] \ 00000770 ........ BL IlluminationOn 3067 3068 if (t->name[0]=='#') \ 00000774 1400D9E5 LDRB R0,[R9, #+20] \ 00000778 230050E3 CMP R0,#+35 \ 0000077C 1700001A BNE ??ProcessPacket_41 3069 { 3070 //Если это конференция, патчим имя 3071 char *s=strchr(p->data,'>'); \ 00000780 3E10A0E3 MOV R1,#+62 \ 00000784 080084E2 ADD R0,R4,#+8 \ 00000788 180000EF SWI +24 3072 //Если нашли символ > и после него пробел и ник короче 16 символов 3073 if (s) \ 0000078C 000050E3 CMP R0,#+0 \ 00000790 1200000A BEQ ??ProcessPacket_41 3074 { 3075 if ((s[1]==' ')&&((s-p->data)<40)) \ 00000794 0110D0E5 LDRB R1,[R0, #+1] \ 00000798 200051E3 CMP R1,#+32 \ 0000079C 0F00001A BNE ??ProcessPacket_41 \ 000007A0 081084E2 ADD R1,R4,#+8 \ 000007A4 011040E0 SUB R1,R0,R1 \ 000007A8 280051E3 CMP R1,#+40 \ 000007AC 0B0000AA BGE ??ProcessPacket_41 3076 { 3077 *s=0; //Режем строку \ 000007B0 0080C0E5 STRB R8,[R0, #+0] 3078 AddStringToLog(t,0x02,s+2,p->data,0xFFFFFFFF,1); //Добавляем имя из текста сообщения \ 000007B4 0110A0E3 MOV R1,#+1 \ 000007B8 02002DE9 PUSH {R1} \ 000007BC 083084E2 ADD R3,R4,#+8 \ 000007C0 022080E2 ADD R2,R0,#+2 \ 000007C4 0900A0E1 MOV R0,R9 \ 000007C8 001061E2 RSB R1,R1,#+0 \ 000007CC 02002DE9 PUSH {R1} \ 000007D0 0210A0E3 MOV R1,#+2 \ 000007D4 ........ BL AddStringToLog 3079 goto L1; \ 000007D8 08D08DE2 ADD SP,SP,#+8 \ 000007DC 1A0000EA B ??ProcessPacket_42 3080 } 3081 } 3082 } 3083 // AddStringToLog(t,0x02,p->data,t->name,0xFFFFFFFF,1); 3084 #ifdef AUTOANSWER 3085 AutoAnswer(t); \ ??ProcessPacket_41: \ 000007E0 0900A0E1 MOV R0,R9 \ 000007E4 ........ BL AutoAnswer 3086 #endif 3087 { 3088 AddStringToLog(t,0x02,p->data,t->name,0xFFFFFFFF,1); \ 000007E8 0100A0E3 MOV R0,#+1 \ 000007EC 01002DE9 PUSH {R0} \ 000007F0 143089E2 ADD R3,R9,#+20 \ 000007F4 082084E2 ADD R2,R4,#+8 \ 000007F8 0210A0E3 MOV R1,#+2 \ 000007FC 000060E2 RSB R0,R0,#+0 \ 00000800 01002DE9 PUSH {R0} \ 00000804 0900A0E1 MOV R0,R9 \ 00000808 ........ BL AddStringToLog 3089 if(Is_POPUP_On && (PopupShow==1 || PopupShow==3)) \ 0000080C 2C0397E5 LDR R0,[R7, #+812] \ 00000810 08D08DE2 ADD SP,SP,#+8 \ 00000814 000050E3 CMP R0,#+0 \ 00000818 0B00000A BEQ ??ProcessPacket_42 \ 0000081C B4039FE5 LDR R0,??ProcessPacket_21+0x18 ;; PopupShow \ 00000820 000090E5 LDR R0,[R0, #+0] \ 00000824 010050E3 CMP R0,#+1 \ 00000828 03005013 CMPNE R0,#+3 \ 0000082C 0600001A BNE ??ProcessPacket_42 3090 { 3091 sprintf(popup[POPUP_MSG].name,PopupMsgString,t->name); \ 00000830 C4139FE5 LDR R1,??ProcessPacket_21+0x3C ;; PopupMsgString \ 00000834 142089E2 ADD R2,R9,#+20 \ 00000838 C00087E2 ADD R0,R7,#+192 \ 0000083C 160000EF SWI +22 3092 popup[POPUP_MSG].timer = POPUP_N; \ 00000840 1400A0E3 MOV R0,#+20 \ 00000844 000187E5 STR R0,[R7, #+256] 3093 // popup[POPUP_ON].timer=0; 3094 // popup[POPUP_OFF].timer=0; 3095 show_pp_sender(); \ 00000848 ........ BL show_pp_sender 3096 } 3097 } 3098 L1: 3099 //Разворачиваем группу, в которой пришло сообщение 3100 { 3101 CLIST *g=FindGroupByID(t->group); \ ??ProcessPacket_42: \ 0000084C 100099E5 LDR R0,[R9, #+16] \ 00000850 ........ _BLF FindGroupByID,??FindGroupByID??rA 3102 if (g) \ 00000854 000050E3 CMP R0,#+0 3103 { 3104 if (g->state) \ 00000858 B415D011 LDRHNE R1,[R0, #+84] \ 0000085C 00005113 CMPNE R1,#+0 3105 { 3106 g->state=0; \ 00000860 B485C011 STRHNE R8,[R0, #+84] 3107 } 3108 } 3109 } 3110 ReqAddMsgToChat(t); \ 00000864 0900A0E1 MOV R0,R9 \ 00000868 ........ BL ReqAddMsgToChat 3111 RecountMenu(t, 1); \ 0000086C 0110A0E3 MOV R1,#+1 \ 00000870 0900A0E1 MOV R0,R9 \ 00000874 ........ BL RecountMenu 3112 extern const int DEVELOP_IF; 3113 switch (DEVELOP_IF) \ 00000878 ........ LDR R0,??DataTable127 ;; DEVELOP_IF \ 0000087C 000090E5 LDR R0,[R0, #+0] \ 00000880 000050E3 CMP R0,#+0 \ 00000884 0200000A BEQ ??ProcessPacket_43 \ 00000888 010050E2 SUBS R0,R0,#+1 \ 0000088C 0700000A BEQ ??ProcessPacket_44 \ 00000890 4EFFFFEA B ??ProcessPacket_35 3114 { 3115 case 0: 3116 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) to_develop(); \ ??ProcessPacket_43: \ 00000894 068100EF SWI +33030 \ 00000898 080090E5 LDR R0,[R0, #+8] \ 0000089C 041397E5 LDR R1,[R7, #+772] \ 000008A0 0C0090E5 LDR R0,[R0, #+12] \ 000008A4 0C0090E5 LDR R0,[R0, #+12] \ 000008A8 010050E1 CMP R0,R1 \ 000008AC 080000EA B ??ProcessPacket_45 3117 break; 3118 case 1: 3119 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) to_develop(); \ ??ProcessPacket_44: \ 000008B0 068100EF SWI +33030 \ 000008B4 080090E5 LDR R0,[R0, #+8] \ 000008B8 041397E5 LDR R1,[R7, #+772] \ 000008BC 0C0090E5 LDR R0,[R0, #+12] \ 000008C0 0C0090E5 LDR R0,[R0, #+12] \ 000008C4 010050E1 CMP R0,R1 \ 000008C8 40FFFF0A BEQ ??ProcessPacket_35 \ 000008CC 430000EF SWI +67 \ 000008D0 000050E3 CMP R0,#+0 \ ??ProcessPacket_45: \ 000008D4 3DFFFF0A BEQ ??ProcessPacket_35 \ 000008D8 ........ BL to_develop 3120 break; 3121 case 2: 3122 break; 3123 } 3124 #ifdef GUI_INTERFACE 3125 RefreshCL(); \ 000008DC 3BFFFFEA B ??ProcessPacket_35 3126 #endif 3127 break; 3128 case T_SRV_ACK: 3129 case T_CLIENT_ACK: 3130 q=FindContactLOGQByAck(p); \ ??ProcessPacket_46: \ 000008E0 0400A0E1 MOV R0,R4 \ 000008E4 ........ BL FindContactLOGQByAck 3131 /* if (( 3132 IsGuiOnTop(contactlist_menu_id)|| 3133 IsGuiOnTop(edchat_id) 3134 )&&(q)) 3135 { 3136 DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 3137 GetPaletteAdrByColorIndex(0), 3138 GetPaletteAdrByColorIndex(p->pkt.type==T_SRV_ACK?3:4)); 3139 }*/ 3140 if (q) \ 000008E8 000050E3 CMP R0,#+0 \ 000008EC 2D00000A BEQ ??ProcessPacket_47 3141 { 3142 q->acked=p->pkt.type==T_SRV_ACK?1:2; \ 000008F0 B410D4E1 LDRH R1,[R4, #+4] \ 000008F4 100051E3 CMP R1,#+16 \ 000008F8 0110A003 MOVEQ R1,#+1 \ 000008FC 0210A013 MOVNE R1,#+2 \ 00000900 041080E5 STR R1,[R0, #+4] 3143 t=FindContactByUin(p->pkt.uin); \ 00000904 000094E5 LDR R0,[R4, #+0] \ 00000908 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000090C 0090A0E1 MOV R9,R0 3144 if (edchat_id) \ 00000910 5C0497E5 LDR R0,[R7, #+1116] \ 00000914 000050E3 CMP R0,#+0 \ 00000918 2200000A BEQ ??ProcessPacket_47 3145 { 3146 void *data=FindGUIbyId(edchat_id,NULL); \ 0000091C 5C0497E5 LDR R0,[R7, #+1116] \ 00000920 0010A0E3 MOV R1,#+0 \ 00000924 090200EF SWI +521 \ 00000928 0050B0E1 MOVS R5,R0 3147 if (data) \ 0000092C 1D00000A BEQ ??ProcessPacket_47 3148 { 3149 EDCHAT_STRUCT *ed_struct; 3150 ed_struct=EDIT_GetUserPointer(data); \ 00000930 DF0100EF SWI +479 3151 if (ed_struct) \ 00000934 000050E3 CMP R0,#+0 \ 00000938 1A00000A BEQ ??ProcessPacket_47 3152 { 3153 if (ed_struct->ed_contact==t) \ 0000093C 000090E5 LDR R0,[R0, #+0] \ 00000940 090050E1 CMP R0,R9 \ 00000944 1700001A BNE ??ProcessPacket_47 3154 { 3155 if (EDIT_IsBusy(data)) \ 00000948 0500A0E1 MOV R0,R5 \ 0000094C 1C0200EF SWI +540 \ 00000950 000050E3 CMP R0,#+0 \ 00000954 0300000A BEQ ??ProcessPacket_48 3156 { 3157 t->req_drawack=1; \ 00000958 646089E5 STR R6,[R9, #+100] 3158 time_to_stop_t9=3; \ 0000095C 0300A0E3 MOV R0,#+3 \ 00000960 740487E5 STR R0,[R7, #+1140] \ 00000964 0F0000EA B ??ProcessPacket_47 3159 } 3160 else 3161 { 3162 DrawAck(data); \ ??ProcessPacket_48: \ 00000968 0500A0E1 MOV R0,R5 \ 0000096C ........ BL DrawAck 3163 if (p->pkt.type==T_SRV_ACK) \ 00000970 B400D4E1 LDRH R0,[R4, #+4] \ 00000974 100050E3 CMP R0,#+16 \ 00000978 0800001A BNE ??ProcessPacket_49 3164 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 0000097C 58029FE5 LDR R0,??ProcessPacket_21+0x1C ;; ILL_RECV_FADE \ 00000980 003090E5 LDR R3,[R0, #+0] \ 00000984 54029FE5 LDR R0,??ProcessPacket_21+0x20 ;; ILL_SEND_TMR \ 00000988 002090E5 LDR R2,[R0, #+0] \ 0000098C 6C029FE5 LDR R0,??ProcessPacket_21+0x40 ;; ILL_KEYS_SEND \ 00000990 001090E5 LDR R1,[R0, #+0] \ 00000994 68029FE5 LDR R0,??ProcessPacket_21+0x44 ;; ILL_DISP_SEND \ 00000998 000090E5 LDR R0,[R0, #+0] \ 0000099C ........ BL IlluminationOn 3165 #ifdef GUI_INTERFACE 3166 RefreshCL(); \ ??ProcessPacket_49: \ 000009A0 606387E5 STR R6,[R7, #+864] 3167 SMART_REDRAW(); \ 000009A4 ........ BL SMART_REDRAW 3168 #endif 3169 } 3170 } 3171 } 3172 } 3173 } 3174 } 3175 #ifdef GUI_INTERFACE 3176 RefreshCL(); \ ??ProcessPacket_47: \ 000009A8 606387E5 STR R6,[R7, #+864] 3177 SMART_REDRAW(); \ 000009AC E5FDFFEA B ??ProcessPacket_11 3178 #endif 3179 break; 3180 case T_XTEXT_ACK: 3181 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_50: \ 000009B0 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000009B4 0090B0E1 MOVS R9,R0 3182 if (t) \ 000009B8 7C00000A BEQ ??ProcessPacket_1 3183 { 3184 int i; 3185 int j; 3186 FreeXText(t); \ 000009BC ........ _BLF FreeXText,??FreeXText??rA 3187 i=p->pkt.data_len; \ 000009C0 B660D4E1 LDRH R6,[R4, #+6] 3188 memcpy(t->xtext=malloc(i),p->data,i); \ 000009C4 0600A0E1 MOV R0,R6 \ 000009C8 140000EF SWI +20 \ 000009CC 7C0089E5 STR R0,[R9, #+124] \ 000009D0 0620A0E1 MOV R2,R6 \ 000009D4 081084E2 ADD R1,R4,#+8 \ 000009D8 1E0100EF SWI +286 3189 zeromem(s,256); \ 000009DC 401FA0E3 MOV R1,#+256 \ 000009E0 10008DE2 ADD R0,SP,#+16 \ 000009E4 1D0100EF SWI +285 3190 strcpy(s,t->name); \ 000009E8 141089E2 ADD R1,R9,#+20 \ 000009EC 10008DE2 ADD R0,SP,#+16 \ 000009F0 1A0000EF SWI +26 3191 strcat(s,":\n"); \ 000009F4 711F8FE2 ADR R1,??ProcessPacket_21 ;; ":\n" \ 000009F8 10008DE2 ADD R0,SP,#+16 \ 000009FC 170000EF SWI +23 3192 i=strlen(s); \ 00000A00 10008DE2 ADD R0,SP,#+16 \ 00000A04 1B0000EF SWI +27 3193 j=p->data[0]; \ 00000A08 0860D4E5 LDRB R6,[R4, #+8] \ 00000A0C 0080A0E1 MOV R8,R0 3194 if (j>(255-i)) j=255-i; \ 00000A10 FF0068E2 RSB R0,R8,#+255 \ 00000A14 060050E1 CMP R0,R6 \ 00000A18 0060A0B1 MOVLT R6,R0 3195 strncpy(s+i,p->data+1,j); \ 00000A1C 0620A0E1 MOV R2,R6 \ 00000A20 091084E2 ADD R1,R4,#+9 \ 00000A24 10008DE2 ADD R0,SP,#+16 \ 00000A28 000088E0 ADD R0,R8,R0 \ 00000A2C 160100EF SWI +278 3196 i+=j; \ 00000A30 080086E0 ADD R0,R6,R8 3197 if (i<255) \ 00000A34 FF0050E3 CMP R0,#+255 \ 00000A38 100000AA BGE ??ProcessPacket_51 3198 { 3199 s[i]='\n'; \ 00000A3C 10108DE2 ADD R1,SP,#+16 \ 00000A40 0A20A0E3 MOV R2,#+10 \ 00000A44 0120C0E7 STRB R2,[R0, +R1] 3200 i++; \ 00000A48 0810D4E5 LDRB R1,[R4, #+8] \ 00000A4C B620D4E1 LDRH R2,[R4, #+6] \ 00000A50 010080E2 ADD R0,R0,#+1 3201 j=p->pkt.data_len-p->data[0]-1; 3202 if (j>(255-i)) j=255-i; 3203 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000A54 10308DE2 ADD R3,SP,#+16 \ 00000A58 012042E0 SUB R2,R2,R1 \ 00000A5C 016042E2 SUB R6,R2,#+1 \ 00000A60 FF2060E2 RSB R2,R0,#+255 \ 00000A64 060052E1 CMP R2,R6 \ 00000A68 0260A0B1 MOVLT R6,R2 \ 00000A6C 0620A0E1 MOV R2,R6 \ 00000A70 041081E0 ADD R1,R1,R4 \ 00000A74 091081E2 ADD R1,R1,#+9 \ 00000A78 030080E0 ADD R0,R0,R3 \ 00000A7C 160100EF SWI +278 3204 } 3205 // if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); 3206 // Только если редактор не наверху и x-status не пустой 3207 #ifdef GUI_INTERFACE 3208 if(IsGuiOnTop(maingui_id) && strlen(p->data)) \ ??ProcessPacket_51: \ 00000A80 080397E5 LDR R0,[R7, #+776] \ 00000A84 350100EF SWI +309 \ 00000A88 000050E3 CMP R0,#+0 \ 00000A8C 0900000A BEQ ??ProcessPacket_52 \ 00000A90 080084E2 ADD R0,R4,#+8 \ 00000A94 1B0000EF SWI +27 \ 00000A98 000050E3 CMP R0,#+0 \ 00000A9C 0500000A BEQ ??ProcessPacket_52 3209 PrintMessage(s,5); \ 00000AA0 10108DE2 ADD R1,SP,#+16 \ 00000AA4 07008AE0 ADD R0,R10,R7 \ 00000AA8 1A0000EF SWI +26 \ 00000AAC 0500A0E3 MOV R0,#+5 \ 00000AB0 6C0387E5 STR R0,[R7, #+876] \ 00000AB4 090000EA B ??ProcessPacket_53 3210 else 3211 #endif 3212 if(!edchat_id && strlen(p->data)) \ ??ProcessPacket_52: \ 00000AB8 5C0497E5 LDR R0,[R7, #+1116] \ 00000ABC 000050E3 CMP R0,#+0 \ 00000AC0 0600001A BNE ??ProcessPacket_53 \ 00000AC4 080084E2 ADD R0,R4,#+8 \ 00000AC8 1B0000EF SWI +27 \ 00000ACC 000050E3 CMP R0,#+0 \ 00000AD0 0200000A BEQ ??ProcessPacket_53 3213 { 3214 ShowMSG(0,(int)s); \ 00000AD4 10108DE2 ADD R1,SP,#+16 \ 00000AD8 0000A0E3 MOV R0,#+0 \ 00000ADC 480100EF SWI +328 3215 } 3216 3217 zeromem(s,256); \ ??ProcessPacket_53: \ 00000AE0 401FA0E3 MOV R1,#+256 \ 00000AE4 10008DE2 ADD R0,SP,#+16 \ 00000AE8 1D0100EF SWI +285 3218 i=0; 3219 j=p->data[0]; \ 00000AEC 0860D4E5 LDRB R6,[R4, #+8] 3220 if (j>(255-i)) j=255-i; 3221 strncpy(s,p->data+1,j); \ 00000AF0 091084E2 ADD R1,R4,#+9 \ 00000AF4 10008DE2 ADD R0,SP,#+16 \ 00000AF8 400F56E3 CMP R6,#+256 \ 00000AFC FF60A0A3 MOVGE R6,#+255 \ 00000B00 0620A0E1 MOV R2,R6 \ 00000B04 160100EF SWI +278 3222 i+=j; 3223 if (i<255) \ 00000B08 FF0056E3 CMP R6,#+255 \ 00000B0C 100000AA BGE ??ProcessPacket_54 3224 { 3225 s[i++]=13; \ 00000B10 10108DE2 ADD R1,SP,#+16 \ 00000B14 0D20A0E3 MOV R2,#+13 \ 00000B18 0120C6E7 STRB R2,[R6, +R1] \ 00000B1C 0810D4E5 LDRB R1,[R4, #+8] \ 00000B20 B620D4E1 LDRH R2,[R4, #+6] \ 00000B24 010086E2 ADD R0,R6,#+1 3226 j=p->pkt.data_len-p->data[0]-1; 3227 if (j>(255-i)) j=255-i; 3228 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000B28 10308DE2 ADD R3,SP,#+16 \ 00000B2C 012042E0 SUB R2,R2,R1 \ 00000B30 016042E2 SUB R6,R2,#+1 \ 00000B34 FF2060E2 RSB R2,R0,#+255 \ 00000B38 060052E1 CMP R2,R6 \ 00000B3C 0260A0B1 MOVLT R6,R2 \ 00000B40 0620A0E1 MOV R2,R6 \ 00000B44 041081E0 ADD R1,R1,R4 \ 00000B48 091081E2 ADD R1,R1,#+9 \ 00000B4C 030080E0 ADD R0,R0,R3 \ 00000B50 160100EF SWI +278 3229 } 3230 AddStringToLog(t,0x03,s,x_status_change,0xFFFFFFFF,1); \ ??ProcessPacket_54: \ 00000B54 0100A0E3 MOV R0,#+1 \ 00000B58 01002DE9 PUSH {R0} \ 00000B5C A53F85E2 ADD R3,R5,#+660 \ 00000B60 0310A0E3 MOV R1,#+3 \ 00000B64 000060E2 RSB R0,R0,#+0 \ 00000B68 01002DE9 PUSH {R0} \ 00000B6C 18208DE2 ADD R2,SP,#+24 \ 00000B70 0900A0E1 MOV R0,R9 \ 00000B74 ........ BL AddStringToLog 3231 ReqAddMsgToChat(t); \ 00000B78 0900A0E1 MOV R0,R9 \ 00000B7C ........ BL ReqAddMsgToChat 3232 if (strlen(p->data)) // Если x-status не пустой \ 00000B80 080084E2 ADD R0,R4,#+8 \ 00000B84 1B0000EF SWI +27 \ 00000B88 000050E3 CMP R0,#+0 \ 00000B8C 08D08DE2 ADD SP,SP,#+8 3233 RecountMenu(t, 1); \ 00000B90 0110A013 MOVNE R1,#+1 \ 00000B94 0900A011 MOVNE R0,R9 \ 00000B98 51FDFF1A BNE ??ProcessPacket_8 3234 else 3235 RecountMenu(NULL, 0); \ 00000B9C 0010A0E3 MOV R1,#+0 \ 00000BA0 0000A0E3 MOV R0,#+0 \ 00000BA4 4EFDFFEA B ??ProcessPacket_8 3236 } 3237 break; 3238 case T_LASTPRIVACY: 3239 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_55: \ 00000BA8 0800D4E5 LDRB R0,[R4, #+8] \ 00000BAC 040487E5 STR R0,[R7, #+1028] 3240 break; 3241 } 3242 mfree(p); \ ??ProcessPacket_1: \ 00000BB0 0400A0E1 MOV R0,R4 \ 00000BB4 150000EF SWI +21 3243 } \ 00000BB8 84DF8DE2 ADD SP,SP,#+528 \ 00000BBC F08FBDE8 POP {R4-R11,PC} ;; return \ ??ProcessPacket_21: \ 00000BC0 3A0A0000 DC8 ":\n",+0 \ 00000BC4 ........ DC32 ENA_AUTO_XTXT \ 00000BC8 ........ DC32 isLogStatusChange \ 00000BCC ........ DC32 PopupOnlineString \ 00000BD0 ........ DC32 sndGlobal \ 00000BD4 ........ DC32 ADDITION_UIN \ 00000BD8 ........ DC32 PopupShow \ 00000BDC ........ DC32 ILL_RECV_FADE \ 00000BE0 ........ DC32 ILL_SEND_TMR \ 00000BE4 ........ DC32 IllByONCantact \ 00000BE8 ........ DC32 ON_OFF_TIME \ 00000BEC ........ DC32 sndSrvMsg \ 00000BF0 ........ DC32 ILL_RECV_TMR \ 00000BF4 ........ DC32 ILL_KEYS_RECV \ 00000BF8 ........ DC32 ILL_DISP_RECV \ 00000BFC ........ DC32 PopupMsgString \ 00000C00 ........ DC32 ILL_KEYS_SEND \ 00000C04 ........ DC32 ILL_DISP_SEND 3244 3245 3246 IPC_REQ tmr_gipc; \ In segment CODE, align 4, keep-with-next 3247 void process_active_timer(void) 3248 { \ process_active_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} 3249 if (connect_state>2) \ 00000004 ........ LDR R5,??DataTable155 ;; popup \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C 340495E5 LDR R0,[R5, #+1076] \ 00000010 030050E3 CMP R0,#+3 \ 00000014 070000BA BLT ??process_active_timer_0 3250 { 3251 if (++tenseconds_to_ping>12) \ 00000018 600495E5 LDR R0,[R5, #+1120] \ 0000001C 010080E2 ADD R0,R0,#+1 \ 00000020 600485E5 STR R0,[R5, #+1120] \ 00000024 0D0050E3 CMP R0,#+13 \ 00000028 020000BA BLT ??process_active_timer_0 3252 { 3253 tenseconds_to_ping=0; 3254 SUBPROC((void *)do_ping); \ 0000002C 5C009FE5 LDR R0,??process_active_timer_1 ;; do_ping \ 00000030 604485E5 STR R4,[R5, #+1120] \ 00000034 710100EF SWI +369 3255 } 3256 } 3257 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_0: \ 00000038 ........ LDR R2,??DataTable129 ;; Canvas \ 0000003C B70FA0E3 MOV R0,#+732 \ 00000040 9B1FA0E3 MOV R1,#+620 \ 00000044 023081E0 ADD R3,R1,R2 \ 00000048 053080E7 STR R3,[R0, +R5] 3258 tmr_gipc.name_from=ipc_my_name; \ 0000004C 021081E0 ADD R1,R1,R2 \ 00000050 E01285E5 STR R1,[R5, #+736] 3259 tmr_gipc.data=NULL; \ 00000054 E44285E5 STR R4,[R5, #+740] 3260 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_TENSECONDS,&tmr_gipc); \ 00000058 053080E0 ADD R3,R0,R5 \ 0000005C 0420A0E3 MOV R2,#+4 \ 00000060 F210A0E3 MOV R1,#+242 \ 00000064 C01F81E3 ORR R1,R1,#0x300 \ 00000068 0900A0E3 MOV R0,#+9 \ 0000006C 420C80E3 ORR R0,R0,#0x4200 \ 00000070 000100EF SWI +256 3261 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000074 ........ LDR R2,??DataTable130 ;; process_active_timer \ 00000078 871EA0E3 MOV R1,#+2160 \ 0000007C 2800A0E3 MOV R0,#+40 \ 00000080 680D80E3 ORR R0,R0,#0x1A00 \ 00000084 050080E0 ADD R0,R0,R5 \ 00000088 4D0000EF SWI +77 3262 } \ 0000008C 3080BDE8 POP {R4,R5,PC} ;; return \ ??process_active_timer_1: \ 00000090 ........ DC32 do_ping 3263 3264 //=============================================================================================== 3265 3266 //----------------------------- SLI ---------------------------// 3267 3268 #ifdef ELKA 3269 3270 #pragma swi_number=54 3271 __swi __arm void SLI_SetState(unsigned char state); 3272 3273 GBSTMR sli_tmr; 3274 3275 /* 3276 * Функция: Sli_On & SLI_Off 3277 * Описание: Включение и отключения светодиода 3278 * Параметры: Никаких 3279 * Возвращаемое значение: Ничего не возвращает 3280 */ 3281 3282 void SLI_On() 3283 { 3284 void SLI_Off(); 3285 SLI_SetState(1); 3286 GBS_StartTimerProc(&sli_tmr,TMR_SECOND>>2, SLI_Off); 3287 } 3288 3289 void SLI_Off() 3290 { 3291 SLI_SetState(2); 3292 GBS_StartTimerProc(&sli_tmr, TMR_SECOND>>2, SLI_On); 3293 } 3294 3295 /* 3296 * Функция: SLI_check 3297 * Описание: Если есть неотвеченные сообщения, то запускает функцию мигания SLI 3298 * Параметры: Никаких 3299 * Возвращаемое значение: Ничего не возвращает 3300 */ 3301 void SLI_check() 3302 { 3303 if(!Is_SLI_On) return; 3304 GBS_DelTimer(&sli_tmr); 3305 if(total_unread) SLI_On(); 3306 else SLI_SetState(0); 3307 } 3308 #endif 3309 3310 3311 3312 /*********************************************************************/ 3313 3314 3315 #ifdef GUI_INTERFACE 3316 /* 3317 * Здесть пошел код прорисовки графического контакт листа 3318 */ 3319 //static GUIMENU clistm;//clist menu 3320 3321 char clrBlack[] = {0x00,0x00,0x00,0x64}; 3322 char clrWhite[] = {0xFF,0xFF,0xFF,0x64}; 3323 char clrRed[] = {0xFF,0x00,0x00,0x64}; \ In segment DATA_Z, align 4, align-sorted 3324 char transparent[] = {0x00,0x00,0x00,0x00}; \ transparent: \ 00000000 DS8 4 3325 char blue[] = "\x00\x00\xFF\x64"; 3326 3327 const char _t[] = "%t"; 3328 const char _d[] = "%d"; 3329 const char _s[] = "%s"; 3330 3331 unsigned int HeaderY;//Размер размера заголовка по У 3332 \ In segment DATA_Z, align 4, align-sorted 3333 int PNG_SOFTKEY=0; \ PNG_SOFTKEY: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 3334 int PNG_HEADER=0; \ PNG_HEADER: \ 00000000 DS8 4 3335 /* 3336 #ifdef ELKA 3337 #define ICONBAR //Если нужен иконбар 3338 #endif 3339 */ 3340 #ifdef ELKA 3341 #ifndef ICONBAR 3342 #undef YDISP 3343 #define YDISP 0 3344 #endif 3345 #endif 3346 3347 #define CLIST_Y1 (YDISP+FontH(ClFont)+4) 3348 3349 3350 //------------------------------------------ 3351 3352 \ In segment CODE, align 4, keep-with-next 3353 void Get_Online_Contact() 3354 { 3355 CLIST *t; 3356 online_contact=0; \ Get_Online_Contact: \ 00000000 ........ LDR R0,??DataTable155 ;; popup \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 541380E5 STR R1,[R0, #+852] 3357 total_contact=0; \ 0000000C 581380E5 STR R1,[R0, #+856] 3358 t=(CLIST *)(&cltop); \ 00000010 C01F80E2 ADD R1,R0,#+768 \ 00000014 FF30A0E3 MOV R3,#+255 \ 00000018 FF3C83E3 ORR R3,R3,#0xFF00 \ 0000001C 0A0000EA B ??Get_Online_Contact_0 3359 while(t=(CLIST *)(t->next)) 3360 { 3361 if (!t->isgroup) \ ??Get_Online_Contact_1: \ 00000020 082091E5 LDR R2,[R1, #+8] \ 00000024 000052E3 CMP R2,#+0 \ 00000028 0700001A BNE ??Get_Online_Contact_0 3362 { 3363 total_contact++; \ 0000002C 582390E5 LDR R2,[R0, #+856] \ 00000030 012082E2 ADD R2,R2,#+1 \ 00000034 582380E5 STR R2,[R0, #+856] 3364 if (t->state!=0xFFFF) online_contact++; \ 00000038 B425D1E1 LDRH R2,[R1, #+84] \ 0000003C 030052E1 CMP R2,R3 \ 00000040 54239015 LDRNE R2,[R0, #+852] \ 00000044 01208212 ADDNE R2,R2,#+1 \ 00000048 54238015 STRNE R2,[R0, #+852] 3365 } 3366 } \ ??Get_Online_Contact_0: \ 0000004C 001091E5 LDR R1,[R1, #+0] \ 00000050 000051E3 CMP R1,#+0 \ 00000054 F1FFFF1A BNE ??Get_Online_Contact_1 3367 } \ 00000058 1EFF2FE1 BX LR ;; return 3368 3369 3370 //------------------------------------------ 3371 3372 /* 3373 * Функция: DoScreen 3374 * Описание: делаем скрин экрана, и возвращаем его в IMGHDR 3375 * Параметры: 3376 * ScrH - высота скриншота 3377 * ShiftY - смещение по Y 3378 * Возвращаемое значение: Возвращает скриншот выбранной области экрана в IMGHDR 3379 */ \ In segment CODE, align 4, keep-with-next 3380 IMGHDR DoScreen(int ScrH,int ShiftY) 3381 { \ DoScreen: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0150A0E1 MOV R5,R1 3382 IMGHDR screen = {0,0,8,""}; \ 00000008 60109FE5 LDR R1,??DoScreen_0 ;; `?` \ 0000000C 08D04DE2 SUB SP,SP,#+8 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0260A0E1 MOV R6,R2 \ 00000018 0C0091E8 LDM R1,{R2,R3} \ 0000001C 0D00A0E1 MOV R0,SP \ 00000020 0C0080E8 STM R0,{R2,R3} 3383 int ScrW = ScreenW(); \ 00000024 888100EF SWI +33160 \ 00000028 0080A0E1 MOV R8,R0 3384 char *ms = RamScreenBuffer(); \ 0000002C E08000EF SWI +32992 \ 00000030 0070A0E1 MOV R7,R0 3385 screen.w = ScrW; 3386 screen.h = ScrH; 3387 screen.bitmap = malloc(ScrW*ScrH*2); \ 00000034 950800E0 MUL R0,R5,R8 \ 00000038 0080CDE5 STRB R8,[SP, #+0] \ 0000003C 0150CDE5 STRB R5,[SP, #+1] \ 00000040 8050A0E1 LSL R5,R0,#+1 \ 00000044 0500A0E1 MOV R0,R5 \ 00000048 140000EF SWI +20 \ 0000004C 04008DE5 STR R0,[SP, #+4] 3388 ms += (ShiftY*2); 3389 memcpy(screen.bitmap, ms, ScrW*ScrH*2); \ 00000050 0520A0E1 MOV R2,R5 \ 00000054 861087E0 ADD R1,R7,R6, LSL #+1 \ 00000058 1E0100EF SWI +286 3390 return screen; \ 0000005C 0D00A0E1 MOV R0,SP \ 00000060 0C0090E8 LDM R0,{R2,R3} \ 00000064 0400A0E1 MOV R0,R4 \ 00000068 0C0084E8 STM R4,{R2,R3} \ 0000006C F681BDE8 POP {R1,R2,R4-R8,PC} ;; return \ ??DoScreen_0: \ 00000070 ........ DC32 `?` 3391 } 3392 3393 3394 //------------------------------------------ 3395 3396 \ In segment CODE, align 4, keep-with-next 3397 void RecountMenu(CLIST *req, int needfocus) 3398 { \ RecountMenu: \ 00000000 30402DE9 PUSH {R4,R5,LR} 3399 int i; 3400 int j; 3401 if(!needfocus) return; \ 00000004 000051E3 CMP R1,#+0 \ 00000008 3080BD08 POPEQ {R4,R5,PC} 3402 if (!maingui_id) return; //Нечего считать \ 0000000C ........ LDR R4,??DataTable155 ;; popup \ 00000010 081394E5 LDR R1,[R4, #+776] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 3080BD08 POPEQ {R4,R5,PC} 3403 if (req==NULL) \ 0000001C 000050E3 CMP R0,#+0 3404 { 3405 j=0; \ 00000020 0050A003 MOVEQ R5,#+0 \ 00000024 0100000A BEQ ??RecountMenu_0 3406 } 3407 else 3408 { 3409 j=FindContactByContact(req); \ 00000028 ........ _BLF FindContactByContact,??FindContactByContact??rA \ 0000002C 0050A0E1 MOV R5,R0 3410 } 3411 i=CountContacts(); \ ??RecountMenu_0: \ 00000030 ........ _BLF CountContacts,??CountContacts??rA 3412 if (j>=i) j=i-1; \ 00000034 000055E1 CMP R5,R0 \ 00000038 015040A2 SUBGE R5,R0,#+1 3413 if (j<0) j=0; 3414 //if(needfocus) 3415 clistm->curpos=j; \ 0000003C 4C0394E5 LDR R0,[R4, #+844] \ 00000040 000055E3 CMP R5,#+0 \ 00000044 0050A043 MOVMI R5,#+0 \ 00000048 005080E5 STR R5,[R0, #+0] 3416 SMART_REDRAW(); \ 0000004C ........ BL SMART_REDRAW 3417 } \ 00000050 3080BDE8 POP {R4,R5,PC} ;; return 3418 3419 3420 //------------------------------------------ 3421 /* 3422 //#pragma inline 3423 int FontH(int font) 3424 { 3425 return GetFontYSIZE(font); 3426 } 3427 */ 3428 //#define FontH(font) GetFontYSIZE(font) 3429 //------------------------------------------ 3430 3431 3432 /* 3433 #pragma inline 3434 int GetWidth(WSHDR *ws, int font) 3435 { 3436 return Get_WS_width(ws,font); 3437 } 3438 */ 3439 3440 3441 //#pragma inline 3442 /* 3443 * Функция: GetWidth 3444 * Описание: Получение длинны текстовой строки в пикселях 3445 * Параметры: 3446 * char *s - строка текста 3447 * inr font - шрифт, которым строка отрисовывается 3448 * Возвращаемое значение: Длинна в пикселях 3449 */ \ In segment CODE, align 4, keep-with-next 3450 int GetWidth(char *s, int font) 3451 { \ GetWidth: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 3452 WSHDR *ws=AllocWS(strlen(s)); \ 0000000C 1B0000EF SWI +27 \ 00000010 250100EF SWI +293 3453 wsprintf(ws,_t,s); \ 00000014 ........ LDR R1,??DataTable137 ;; _t \ 00000018 0060A0E1 MOV R6,R0 \ 0000001C 0420A0E1 MOV R2,R4 \ 00000020 240100EF SWI +292 3454 unsigned short *body=ws->wsbody; \ 00000024 004096E5 LDR R4,[R6, #+0] 3455 int len=body[0],width; \ 00000028 B070D4E1 LDRH R7,[R4, #+0] 3456 if(len>0) width=1; else width=0; \ 0000002C 010057E3 CMP R7,#+1 \ 00000030 0C0000BA BLT ??GetWidth_0 \ 00000034 0180A0E3 MOV R8,#+1 3457 while(len>0) 3458 { 3459 width+=GetSymbolWidth(body[len],font); \ ??GetWidth_1: \ 00000038 870084E0 ADD R0,R4,R7, LSL #+1 \ 0000003C B000D0E1 LDRH R0,[R0, #+0] \ 00000040 0510A0E1 MOV R1,R5 3460 len--; \ 00000044 017047E2 SUB R7,R7,#+1 \ 00000048 E10100EF SWI +481 \ 0000004C 088080E0 ADD R8,R0,R8 3461 } \ 00000050 010057E3 CMP R7,#+1 \ 00000054 F7FFFFAA BGE ??GetWidth_1 3462 FreeWS(ws); \ ??GetWidth_2: \ 00000058 0600A0E1 MOV R0,R6 \ 0000005C 290100EF SWI +297 3463 return (width+1); \ 00000060 010088E2 ADD R0,R8,#+1 \ 00000064 F081BDE8 POP {R4-R8,PC} ;; return \ ??GetWidth_0: \ 00000068 0080A0E3 MOV R8,#+0 \ 0000006C F9FFFFEA B ??GetWidth_2 3464 } 3465 3466 3467 //------------------------------------------ 3468 3469 /* 3470 * Функция: DrwStr 3471 * Описание: Альтернатива DrawString, вроде как быстрее отрисовывает... 3472 * Параметры: Как и в DrawString 3473 * Возвращаемое значение: Ничего не возвращает 3474 */ \ In segment CODE, align 4, keep-with-next 3475 void DrawWSStr(WSHDR *ws, int x, int y,int w,int h, int font,int flag,char *pen, char *brush) 3476 { \ DrawWSStr: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 \ 00000008 48509DE5 LDR R5,[SP, #+72] \ 0000000C 4C609DE5 LDR R6,[SP, #+76] \ 00000010 50709DE5 LDR R7,[SP, #+80] \ 00000014 54809DE5 LDR R8,[SP, #+84] \ 00000018 0040A0E1 MOV R4,R0 \ 0000001C 44009DE5 LDR R0,[SP, #+68] 3477 RECT rc; 3478 DRWOBJ drwobj; 3479 StoreXYWHtoRECT(&rc,x,y,w,h); \ 00000020 01002DE9 PUSH {R0} \ 00000024 04008DE2 ADD R0,SP,#+4 \ 00000028 330100EF SWI +307 3480 SetPropTo_Obj1(&drwobj,&rc,0,ws,font,flag); \ 0000002C 40002DE9 PUSH {R6} \ 00000030 20002DE9 PUSH {R5} \ 00000034 0430A0E1 MOV R3,R4 \ 00000038 0020A0E3 MOV R2,#+0 \ 0000003C 0C108DE2 ADD R1,SP,#+12 \ 00000040 14008DE2 ADD R0,SP,#+20 \ 00000044 490100EF SWI +329 3481 SetColor(&drwobj,pen,brush); \ 00000048 0820A0E1 MOV R2,R8 \ 0000004C 0710A0E1 MOV R1,R7 \ 00000050 14008DE2 ADD R0,SP,#+20 \ 00000054 4B0100EF SWI +331 3482 DrawObject(&drwobj); \ 00000058 14008DE2 ADD R0,SP,#+20 \ 0000005C 2A0100EF SWI +298 3483 } \ 00000060 38D08DE2 ADD SP,SP,#+56 \ 00000064 F081BDE8 POP {R4-R8,PC} ;; return 3484 3485 /* 3486 void TextOut(char *text, int x, int y, int font, int flag, char *pen, char *brush) 3487 { 3488 WSHDR *txt = AllocWS(strlen(text)); 3489 wsprintf(txt, "%s", text); 3490 int textlen = 0; 3491 for(int i = 0; i < strlen(text); i++) 3492 textlen += GetSymbolWidth(text[i], font); 3493 DrwStr(txt, x, y, textlen, GetFontYSIZE(font), font, flag, pen, brush); 3494 }*/ 3495 3496 3497 /* 3498 * Функция: DrawStr 3499 * Описание: Тот же DrawString, только с возможностью обрезания выводимого текста находу, по размерам x2-x 3500 * Параметры: 3501 * char *str - выводимая строка 3502 * int x,y,x2,y2 - координаты поля для вывода 3503 * int needcut - флаг указания, нужно обрезать строку по размеру поля x2-x или нет. 3504 * Возвращаемое значение: Ничего не возвращает 3505 */ \ In segment CODE, align 4, keep-with-next 3506 void DrawStr(char *str, int x, int y, int x2,int y2, int align, int font, char *color,int needcut) 3507 { \ DrawStr: \ 00000000 F64F2DE9 PUSH {R1,R2,R4-R11,LR} \ 00000004 2C609DE5 LDR R6,[SP, #+44] \ 00000008 30709DE5 LDR R7,[SP, #+48] \ 0000000C 34809DE5 LDR R8,[SP, #+52] \ 00000010 38909DE5 LDR R9,[SP, #+56] \ 00000014 3CA09DE5 LDR R10,[SP, #+60] \ 00000018 0040A0E1 MOV R4,R0 \ 0000001C 0350A0E1 MOV R5,R3 3508 if(!str) return; \ 00000020 000054E3 CMP R4,#+0 \ 00000024 F38FBD08 POPEQ {R0,R1,R4-R11,PC} 3509 if(!strlen(str)) return; \ 00000028 1B0000EF SWI +27 \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 F38FBD08 POPEQ {R0,R1,R4-R11,PC} 3510 WSHDR *ws = AllocWS(strlen(str)); \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1B0000EF SWI +27 \ 0000003C 250100EF SWI +293 3511 wsprintf(ws,_t,str); \ 00000040 ........ LDR R1,??DataTable137 ;; _t \ 00000044 00B0A0E1 MOV R11,R0 \ 00000048 0420A0E1 MOV R2,R4 \ 0000004C 240100EF SWI +292 3512 3513 if(needcut) \ 00000050 00005AE3 CMP R10,#+0 \ 00000054 1400000A BEQ ??DrawStr_0 3514 { 3515 int len = GetWidth(str,font); 3516 if(len > x2-x)//Если имя длиннее области для рисования,отрезаем лишние символы \ 00000058 00009DE5 LDR R0,[SP, #+0] \ 0000005C 0810A0E1 MOV R1,R8 \ 00000060 00A045E0 SUB R10,R5,R0 \ 00000064 0400A0E1 MOV R0,R4 \ 00000068 ........ BL GetWidth \ 0000006C 00005AE1 CMP R10,R0 \ 00000070 0D0000AA BGE ??DrawStr_0 3517 { 3518 int pos = ws->wsbody[0] + 1; \ 00000074 00009BE5 LDR R0,[R11, #+0] \ 00000078 B000D0E1 LDRH R0,[R0, #+0] \ 0000007C 014080E2 ADD R4,R0,#+1 \ ??DrawStr_1: \ 00000080 000054E3 CMP R4,#+0 \ 00000084 0800000A BEQ ??DrawStr_0 3519 while((len > x2-x) && pos) 3520 { 3521 CutWSTR(ws,pos); \ 00000088 0410A0E1 MOV R1,R4 \ 0000008C 0B00A0E1 MOV R0,R11 \ 00000090 260100EF SWI +294 3522 len = Get_WS_width(ws,font); \ 00000094 0810A0E1 MOV R1,R8 \ 00000098 0B00A0E1 MOV R0,R11 \ 0000009C 080200EF SWI +520 3523 pos--; \ 000000A0 014044E2 SUB R4,R4,#+1 3524 } \ 000000A4 00005AE1 CMP R10,R0 \ 000000A8 F4FFFFBA BLT ??DrawStr_1 3525 } 3526 } 3527 3528 // void DrwStr(WSHDR *ws, int x, int y,int w,int h, int font,int flag,char *pen, char *brush) 3529 //DrwStr(ws,x,y,x2,y2,font,align,color,0); 3530 DrawString(ws, x, y, x2, y2, font, align, color, 0); \ ??DrawStr_0: \ 000000AC 0000A0E3 MOV R0,#+0 \ 000000B0 01002DE9 PUSH {R0} \ 000000B4 00022DE9 PUSH {R9} \ 000000B8 80002DE9 PUSH {R7} \ 000000BC 00012DE9 PUSH {R8} \ 000000C0 40002DE9 PUSH {R6} \ 000000C4 18209DE5 LDR R2,[SP, #+24] \ 000000C8 14109DE5 LDR R1,[SP, #+20] \ 000000CC 0530A0E1 MOV R3,R5 \ 000000D0 0B00A0E1 MOV R0,R11 \ 000000D4 4C0100EF SWI +332 3531 FreeWS(ws); \ 000000D8 0B00A0E1 MOV R0,R11 \ 000000DC 290100EF SWI +297 3532 } \ 000000E0 14D08DE2 ADD SP,SP,#+20 \ 000000E4 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return 3533 3534 3535 //------------------------------------------ 3536 3537 3538 static volatile int scroll_disp; 3539 static volatile int max_scroll_disp; 3540 GBSTMR tmr_scroll; 3541 3542 /* 3543 * Функция: scroll_timer_proc 3544 * Описание: Таймер для плавной прорисовки бегущей строки 3545 * Параметры: Никаких 3546 * Возвращаемое значение: Ничего не возвращает 3547 */ \ In segment CODE, align 4, keep-with-next 3548 static void scroll_timer_proc(void) 3549 { 3550 int i=max_scroll_disp; \ scroll_timer_proc: \ 00000000 ........ LDR R1,??DataTable155 ;; popup \ 00000004 00402DE9 PUSH {LR} \ 00000008 843491E5 LDR R3,[R1, #+1156] 3551 if (i) \ 0000000C 000053E3 CMP R3,#+0 \ 00000010 0080BD08 POPEQ {PC} 3552 { 3553 if (scroll_disp>=i) \ 00000014 80C491E5 LDR R12,[R1, #+1152] \ 00000018 ........ LDR R2,??DataTable159 ;; scroll_timer_proc \ 0000001C 6C00A0E3 MOV R0,#+108 \ 00000020 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000024 010080E0 ADD R0,R0,R1 \ 00000028 03005CE1 CMP R12,R3 \ 0000002C 030000BA BLT ??scroll_timer_proc_0 3554 { 3555 scroll_disp=0; \ 00000030 0030A0E3 MOV R3,#+0 \ 00000034 803481E5 STR R3,[R1, #+1152] 3556 GBS_StartTimerProc(&tmr_scroll,TMR_SECOND,scroll_timer_proc); \ 00000038 D810A0E3 MOV R1,#+216 \ 0000003C 060000EA B ??scroll_timer_proc_1 3557 } 3558 else 3559 { 3560 scroll_disp+=3; \ ??scroll_timer_proc_0: \ 00000040 80C491E5 LDR R12,[R1, #+1152] \ 00000044 03C08CE2 ADD R12,R12,#+3 \ 00000048 80C481E5 STR R12,[R1, #+1152] 3561 GBS_StartTimerProc(&tmr_scroll,scroll_disp0;i-=2) \ 000000B4 0A00A0E1 MOV R0,R10 \ 000000B8 C50100EF SWI +453 \ 000000BC 0090A0E1 MOV R9,R0 \ 000000C0 010059E3 CMP R9,#+1 \ 000000C4 14D08DE2 ADD SP,SP,#+20 \ 000000C8 160000BA BLT ??DrawSoftKeys_1 \ 000000CC 04109DE5 LDR R1,[SP, #+4] \ 000000D0 011047E0 SUB R1,R7,R1 \ 000000D4 00108DE5 STR R1,[SP, #+0] \ 000000D8 021041E2 SUB R1,R1,#+2 \ 000000DC 10108DE5 STR R1,[SP, #+16] 3676 DrawRoundedFrame(0,scr_h-FntH-2,scr_w,scr_h-FntH+i+2,0,0,0,SoftBackgrClr,SoftBackgrClr); \ ??DrawSoftKeys_2: \ 000000E0 0800A0E1 MOV R0,R8 \ 000000E4 01002DE9 PUSH {R0} \ 000000E8 01002DE9 PUSH {R0} \ 000000EC 0620A0E1 MOV R2,R6 \ 000000F0 0000A0E3 MOV R0,#+0 \ 000000F4 01002DE9 PUSH {R0} \ 000000F8 01002DE9 PUSH {R0} \ 000000FC 01002DE9 PUSH {R0} \ 00000100 24109DE5 LDR R1,[SP, #+36] \ 00000104 14009DE5 LDR R0,[SP, #+20] \ 00000108 000089E0 ADD R0,R9,R0 \ 0000010C 023080E2 ADD R3,R0,#+2 \ 00000110 0000A0E3 MOV R0,#+0 \ 00000114 500100EF SWI +336 \ 00000118 029049E2 SUB R9,R9,#+2 \ 0000011C 010059E3 CMP R9,#+1 \ 00000120 14D08DE2 ADD SP,SP,#+20 \ 00000124 EDFFFFAA BGE ??DrawSoftKeys_2 3677 } 3678 #ifdef ELKA 3679 int ScrH = FntH+2; 3680 int HSIZE = (ScreenH()-FntH)*ScreenW(); 3681 SoftShot = DoScreen(ScrH, HSIZE); 3682 shot_soft++; 3683 SMART_REDRAW(); 3684 return; 3685 } 3686 else 3687 if(SoftBackgrClr[3]!=0) 3688 DrwImage(&SoftShot,0,scr_h-FntH,0); 3689 #endif 3690 3691 // return; 3692 3693 if(sendq_l)//Если есть не отправленные данные в буфере, то выведем вместо текста на правой клавише. \ ??DrawSoftKeys_1: \ 00000128 04109DE5 LDR R1,[SP, #+4] \ 0000012C E4919FE5 LDR R9,??DrawSoftKeys_0+0x4 ;; SoftFontClr \ 00000130 010047E2 SUB R0,R7,#+1 \ 00000134 018040E0 SUB R8,R0,R1 \ 00000138 4C049BE5 LDR R0,[R11, #+1100] \ 0000013C 000050E3 CMP R0,#+0 \ 00000140 1500000A BEQ ??DrawSoftKeys_3 3694 { 3695 sprintf(s,"Q: %d b",sendq_l); \ 00000144 4C249BE5 LDR R2,[R11, #+1100] \ 00000148 CC119FE5 LDR R1,??DrawSoftKeys_0+0x8 ;; `?` + 76 \ 0000014C 0400A0E1 MOV R0,R4 \ 00000150 160000EF SWI +22 3696 DrawStr(s, scr_w - GetWidth(s,ClFont), scr_h-1-FntH, scr_w,scr_h,0,HeadFont,(char*)SoftFontClr,0); \ 00000154 0A10A0E1 MOV R1,R10 \ 00000158 0400A0E1 MOV R0,R4 \ 0000015C ........ BL GetWidth \ 00000160 0010A0E3 MOV R1,#+0 \ 00000164 02002DE9 PUSH {R1} \ 00000168 0630A0E1 MOV R3,R6 \ 0000016C 0820A0E1 MOV R2,R8 \ 00000170 0910A0E1 MOV R1,R9 \ 00000174 02002DE9 PUSH {R1} \ 00000178 0510A0E1 MOV R1,R5 \ 0000017C 02002DE9 PUSH {R1} \ 00000180 0010A0E3 MOV R1,#+0 \ 00000184 02002DE9 PUSH {R1} \ 00000188 0710A0E1 MOV R1,R7 \ 0000018C 02002DE9 PUSH {R1} \ 00000190 001046E0 SUB R1,R6,R0 \ 00000194 0400A0E1 MOV R0,R4 \ 00000198 100000EA B ??DrawSoftKeys_4 3697 } 3698 else 3699 DrawStr(right, scr_w-GetWidth(right,ClFont), scr_h-1-FntH, scr_w,scr_h,0,HeadFont,(char*)SoftFontClr,0); \ ??DrawSoftKeys_3: \ 0000019C 18009DE5 LDR R0,[SP, #+24] \ 000001A0 0A10A0E1 MOV R1,R10 \ 000001A4 ........ BL GetWidth \ 000001A8 0010A0E3 MOV R1,#+0 \ 000001AC 02002DE9 PUSH {R1} \ 000001B0 0630A0E1 MOV R3,R6 \ 000001B4 0820A0E1 MOV R2,R8 \ 000001B8 0910A0E1 MOV R1,R9 \ 000001BC 02002DE9 PUSH {R1} \ 000001C0 0510A0E1 MOV R1,R5 \ 000001C4 02002DE9 PUSH {R1} \ 000001C8 0010A0E3 MOV R1,#+0 \ 000001CC 02002DE9 PUSH {R1} \ 000001D0 0710A0E1 MOV R1,R7 \ 000001D4 02002DE9 PUSH {R1} \ 000001D8 001046E0 SUB R1,R6,R0 \ 000001DC 2C009DE5 LDR R0,[SP, #+44] 3700 3701 3702 GetDateTime(0,&t); 3703 sprintf(s,"%02d:%02d",t.hour,t.min); 3704 DrawStr(s,0,scr_h-1-FntH,scr_w,scr_h,TEXT_ALIGNMIDDLE,HeadFont,(char*)SoftFontClr,0); 3705 3706 if(!strlen(ContactT9Key))//если нет нажатых клавиш \ ??DrawSoftKeys_4: \ 000001E0 E8A0A0E3 MOV R10,#+232 \ 000001E4 ........ BL DrawStr \ 000001E8 14D08DE2 ADD SP,SP,#+20 \ 000001EC 08108DE2 ADD R1,SP,#+8 \ 000001F0 0000A0E3 MOV R0,#+0 \ 000001F4 B40000EF SWI +180 \ 000001F8 0930DDE5 LDRB R3,[SP, #+9] \ 000001FC 0820DDE5 LDRB R2,[SP, #+8] \ 00000200 ........ LDR R1,??DataTable154 ;; `?` \ 00000204 0400A0E1 MOV R0,R4 \ 00000208 160000EF SWI +22 \ 0000020C 0000A0E3 MOV R0,#+0 \ 00000210 01002DE9 PUSH {R0} \ 00000214 0630A0E1 MOV R3,R6 \ 00000218 0820A0E1 MOV R2,R8 \ 0000021C 0010A0E3 MOV R1,#+0 \ 00000220 0900A0E1 MOV R0,R9 \ 00000224 01002DE9 PUSH {R0} \ 00000228 60AE8AE3 ORR R10,R10,#0x600 \ 0000022C 0500A0E1 MOV R0,R5 \ 00000230 01002DE9 PUSH {R0} \ 00000234 0200A0E3 MOV R0,#+2 \ 00000238 01002DE9 PUSH {R0} \ 0000023C 0700A0E1 MOV R0,R7 \ 00000240 01002DE9 PUSH {R0} \ 00000244 0400A0E1 MOV R0,R4 \ 00000248 ........ BL DrawStr \ 0000024C 0B008AE0 ADD R0,R10,R11 \ 00000250 1B0000EF SWI +27 \ 00000254 000050E3 CMP R0,#+0 \ 00000258 14D08DE2 ADD SP,SP,#+20 \ 0000025C 0800001A BNE ??DrawSoftKeys_5 3707 DrawStr(left,2,scr_h-1-FntH,scr_w,scr_h,0,HeadFont,(char*)SoftFontClr,0); \ 00000260 0000A0E3 MOV R0,#+0 \ 00000264 01002DE9 PUSH {R0} \ 00000268 00022DE9 PUSH {R9} \ 0000026C 20002DE9 PUSH {R5} \ 00000270 01002DE9 PUSH {R0} \ 00000274 80002DE9 PUSH {R7} \ 00000278 0630A0E1 MOV R3,R6 \ 0000027C 28009DE5 LDR R0,[SP, #+40] \ 00000280 1B0000EA B ??DrawSoftKeys_6 3708 else 3709 if(strlen(ContactT9Key)==1)//если есть нажатая кнопка,то выводим текст для лонг пресса на левом софте \ ??DrawSoftKeys_5: \ 00000284 0B008AE0 ADD R0,R10,R11 \ 00000288 1B0000EF SWI +27 \ 0000028C 010050E3 CMP R0,#+1 \ 00000290 0F00001A BNE ??DrawSoftKeys_7 3710 DrawStr(GetLongPressText(),2,scr_h-1-FntH,(scr_w/2)-(GetWidth(s,HeadFont)/2),scr_h,0,HeadFont,(char*)SoftFontClr,0); \ 00000294 0510A0E1 MOV R1,R5 \ 00000298 0400A0E1 MOV R0,R4 \ 0000029C ........ BL GetWidth \ 000002A0 00A0A0E1 MOV R10,R0 \ 000002A4 ........ BL GetLongPressText \ 000002A8 0010A0E3 MOV R1,#+0 \ 000002AC 02002DE9 PUSH {R1} \ 000002B0 00022DE9 PUSH {R9} \ 000002B4 20002DE9 PUSH {R5} \ 000002B8 02002DE9 PUSH {R1} \ 000002BC 80002DE9 PUSH {R7} \ 000002C0 AA2F8AE0 ADD R2,R10,R10, LSR #+31 \ 000002C4 A61F86E0 ADD R1,R6,R6, LSR #+31 \ 000002C8 C110A0E1 ASR R1,R1,#+1 \ 000002CC C23041E0 SUB R3,R1,R2, ASR #+1 \ 000002D0 070000EA B ??DrawSoftKeys_6 3711 else//очистить т9 буффер 3712 DrawStr("Очистить Т9",2,scr_h-1-FntH,scr_w,scr_h,0,HeadFont,(char*)SoftFontClr,0); \ ??DrawSoftKeys_7: \ 000002D4 0000A0E3 MOV R0,#+0 \ 000002D8 01002DE9 PUSH {R0} \ 000002DC 00022DE9 PUSH {R9} \ 000002E0 20002DE9 PUSH {R5} \ 000002E4 01002DE9 PUSH {R0} \ 000002E8 30009FE5 LDR R0,??DrawSoftKeys_0+0xC ;; `?` + 84 \ 000002EC 80002DE9 PUSH {R7} \ 000002F0 0630A0E1 MOV R3,R6 \ ??DrawSoftKeys_6: \ 000002F4 0820A0E1 MOV R2,R8 \ 000002F8 0210A0E3 MOV R1,#+2 \ 000002FC ........ BL DrawStr \ 00000300 14D08DE2 ADD SP,SP,#+20 3713 3714 3715 mfree(s); \ 00000304 0400A0E1 MOV R0,R4 \ 00000308 150000EF SWI +21 3716 } \ 0000030C 1CD08DE2 ADD SP,SP,#+28 \ 00000310 F08FBDE8 POP {R4-R11,PC} ;; return \ ??DrawSoftKeys_0: \ 00000314 ........ DC32 SoftBackgrClr \ 00000318 ........ DC32 SoftFontClr \ 0000031C ........ DC32 `?` + 76 \ 00000320 ........ DC32 `?` + 84 3717 3718 3719 //------------------------------------------ 3720 3721 3722 int shot_header=0; 3723 IMGHDR HeaderShot={0,0,8,""}; 3724 3725 extern IMGHDR *GetIconByItem(int curitem); 3726 extern IMGHDR *GetXIconByItem(int curitem); 3727 3728 /* 3729 * Функция: GetPrivateIcon 3730 * Описание: Формирует номер картинки своего приватного статуса 3731 * Параметры: Никаких 3732 * Возвращаемое значение: Номер картинки 3733 */ \ In segment CODE, align 4, keep-with-next 3734 int GetPrivateIcon() 3735 { 3736 int private_icon = 0; 3737 switch(CurrentPrivateStatus) \ GetPrivateIcon: \ 00000000 48109FE5 LDR R1,??GetPrivateIcon_1 ;; popup + 1028 \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 001091E5 LDR R1,[R1, #+0] \ 0000000C 040051E3 CMP R1,#+4 \ 00000010 1EFF2F81 BXHI LR \ 00000014 012F8FE2 ADR R2,??GetPrivateIcon_0 \ 00000018 0120D2E7 LDRB R2,[R2, R1] \ 0000001C 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??GetPrivateIcon_0: \ 00000020 01030507 DC8 +1,+3,+5,+7 \ 00000024 09000000 DC8 +9,+0,+0,+0 3738 { 3739 case 0: private_icon = ICON_ALL_CAN_SEE; break; \ ??GetPrivateIcon_2: \ 00000028 1700A0E3 MOV R0,#+23 \ 0000002C 1EFF2FE1 BX LR 3740 case 1: private_icon = ICON_NOBODY_CAN_SEE; break; \ ??GetPrivateIcon_3: \ 00000030 1B00A0E3 MOV R0,#+27 \ 00000034 1EFF2FE1 BX LR 3741 case 2: private_icon = ICON_VISLIST_CAN_SEE; break; \ ??GetPrivateIcon_4: \ 00000038 1800A0E3 MOV R0,#+24 \ 0000003C 1EFF2FE1 BX LR 3742 case 3: private_icon = ICON_INVISLIST_CANNOT_SEE; break; \ ??GetPrivateIcon_5: \ 00000040 1900A0E3 MOV R0,#+25 \ 00000044 1EFF2FE1 BX LR 3743 case 4: private_icon = ICON_CONTACTLIST_CAN_SEE; break; \ ??GetPrivateIcon_6: \ 00000048 1A00A0E3 MOV R0,#+26 3744 } 3745 return private_icon; \ ??GetPrivateIcon_7: \ 0000004C 1EFF2FE1 BX LR ;; return \ ??GetPrivateIcon_1: \ 00000050 ........ DC32 popup + 1028 3746 } 3747 3748 /* 3749 * Функция: DrawHeader 3750 * Описание: Отрисовывает бар заголовка 3751 * Параметры: Никаких 3752 * Возвращаемое значение: Ничего не возвращает 3753 */ \ In segment CODE, align 4, keep-with-next 3754 void DrawHeader() 3755 { \ DrawHeader: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3756 int scr_w = ScreenW()-1; 3757 int scr_h = ScreenH()-1; 3758 char *s = malloc(128); 3759 int drawFont = HeadFont; 3760 HeaderY = FontH(drawFont); \ 00000004 ........ LDR R7,??DataTable155 ;; popup 3761 3762 HeaderY = (clistm->FontH < 16) ? 16 : (clistm->FontH); 3763 HeaderY += YDISP; 3764 3765 // DrawRoundedFrame(0,YDISP,scr_w,HeaderY+2,0,0,0,clrBlack,clrBlack); 3766 3767 3768 #ifdef ELKA 3769 //делаем скрин заголовка и потом его рисуем,на сг и нсг ненад..там и так быстро рисуется... 3770 if(shot_header!=2)//два раза,чтобы экран обновился 3771 { 3772 #endif 3773 if(HeadBackgrClr[3]!=0)//если непрозрачный цвет \ 00000008 3C859FE5 LDR R8,??DrawHeader_0+0x8 ;; HeadBackgrClr \ 0000000C 08D04DE2 SUB SP,SP,#+8 \ 00000010 888100EF SWI +33160 \ 00000014 015040E2 SUB R5,R0,#+1 \ 00000018 898100EF SWI +33161 \ 0000001C 8000A0E3 MOV R0,#+128 \ 00000020 140000EF SWI +20 \ 00000024 0040A0E1 MOV R4,R0 \ 00000028 ........ LDR R0,??DataTable156 ;; HeadFont \ 0000002C 006090E5 LDR R6,[R0, #+0] \ 00000030 0600A0E1 MOV R0,R6 \ 00000034 C50100EF SWI +453 \ 00000038 7C0487E5 STR R0,[R7, #+1148] \ 0000003C 4C0397E5 LDR R0,[R7, #+844] \ 00000040 200090E5 LDR R0,[R0, #+32] \ 00000044 100050E3 CMP R0,#+16 \ 00000048 1000A033 MOVCC R0,#+16 \ 0000004C 7C0487E5 STR R0,[R7, #+1148] \ 00000050 0300D8E5 LDRB R0,[R8, #+3] \ 00000054 000050E3 CMP R0,#+0 \ 00000058 2500000A BEQ ??DrawHeader_1 3774 { 3775 DrawRoundedFrame(0,YDISP,scr_w,HeaderY+2,0,0,0,clrBlack,clrBlack); \ 0000005C 5800A0E3 MOV R0,#+88 \ 00000060 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000064 070080E0 ADD R0,R0,R7 \ 00000068 0010A0E1 MOV R1,R0 \ 0000006C 02002DE9 PUSH {R1} \ 00000070 01002DE9 PUSH {R0} \ 00000074 0520A0E1 MOV R2,R5 \ 00000078 0010A0E3 MOV R1,#+0 \ 0000007C 0000A0E3 MOV R0,#+0 \ 00000080 01002DE9 PUSH {R0} \ 00000084 01002DE9 PUSH {R0} \ 00000088 01002DE9 PUSH {R0} \ 0000008C 7C0497E5 LDR R0,[R7, #+1148] \ 00000090 023080E2 ADD R3,R0,#+2 \ 00000094 0000A0E3 MOV R0,#+0 \ 00000098 500100EF SWI +336 3776 for(int i = HeaderY-YDISP ; i > 0 ; i-=2) \ 0000009C 7C9497E5 LDR R9,[R7, #+1148] \ 000000A0 14D08DE2 ADD SP,SP,#+20 \ 000000A4 010059E3 CMP R9,#+1 \ 000000A8 110000BA BLT ??DrawHeader_1 3777 DrawRoundedFrame(0,YDISP,scr_w,HeaderY-i+2,0,0,0,HeadBackgrClr,HeadBackgrClr); \ ??DrawHeader_2: \ 000000AC 0800A0E1 MOV R0,R8 \ 000000B0 01002DE9 PUSH {R0} \ 000000B4 01002DE9 PUSH {R0} \ 000000B8 0520A0E1 MOV R2,R5 \ 000000BC 0010A0E3 MOV R1,#+0 \ 000000C0 0000A0E3 MOV R0,#+0 \ 000000C4 01002DE9 PUSH {R0} \ 000000C8 01002DE9 PUSH {R0} \ 000000CC 01002DE9 PUSH {R0} \ 000000D0 7C0497E5 LDR R0,[R7, #+1148] \ 000000D4 090040E0 SUB R0,R0,R9 \ 000000D8 023080E2 ADD R3,R0,#+2 \ 000000DC 0000A0E3 MOV R0,#+0 \ 000000E0 500100EF SWI +336 \ 000000E4 029049E2 SUB R9,R9,#+2 \ 000000E8 010059E3 CMP R9,#+1 \ 000000EC 14D08DE2 ADD SP,SP,#+20 \ 000000F0 EDFFFFAA BGE ??DrawHeader_2 3778 } 3779 #ifdef ELKA 3780 int HSIZE = (HeaderY-YDISP+8)*ScreenW(); 3781 int ScrH = HeaderY-YDISP+2; 3782 HeaderShot = DoScreen(ScrH, HSIZE); 3783 shot_header++; 3784 SMART_REDRAW(); 3785 return; 3786 } 3787 else 3788 if(HeadBackgrClr[3]!=0)//если цвет не полностью прозрачен 3789 DrwImage(&HeaderShot,0,YDISP,0); 3790 #endif 3791 3792 // return; 3793 int x=1; 3794 if(HEAD_STATUS) //Показывать статус \ ??DrawHeader_1: \ 000000F4 54049FE5 LDR R0,??DrawHeader_0+0xC ;; HEAD_STATUS \ 000000F8 0180A0E3 MOV R8,#+1 \ 000000FC 000090E5 LDR R0,[R0, #+0] \ 00000100 000050E3 CMP R0,#+0 \ 00000104 0F00000A BEQ ??DrawHeader_3 3795 { 3796 int icon; 3797 if(total_unread) icon = IS_MSG; \ 00000108 380397E5 LDR R0,[R7, #+824] \ 0000010C 000050E3 CMP R0,#+0 \ 00000110 0D00A013 MOVNE R0,#+13 \ 00000114 0500001A BNE ??DrawHeader_4 3798 else 3799 { 3800 switch(connect_state) \ 00000118 340497E5 LDR R0,[R7, #+1076] \ 0000011C 000050E3 CMP R0,#+0 \ 00000120 0200000A BEQ ??DrawHeader_4 \ 00000124 030050E2 SUBS R0,R0,#+3 3801 { 3802 case 0: icon=IS_OFFLINE; break; 3803 case 3: icon=CurrentStatus; break; \ 00000128 FC039705 LDREQ R0,[R7, #+1020] 3804 default: icon=IS_UNKNOWN; break; \ 0000012C 0E00A013 MOVNE R0,#+14 3805 } 3806 } 3807 x += DrwImage(GetIconByItem(icon),x,YDISP,RET_X) + 2; \ ??DrawHeader_4: \ 00000130 ........ _BLF GetIconByItem,??GetIconByItem??rA \ 00000134 0130A0E3 MOV R3,#+1 \ 00000138 0020A0E3 MOV R2,#+0 \ 0000013C 0310A0E1 MOV R1,R3 \ 00000140 ........ BL DrwImage \ 00000144 038080E2 ADD R8,R0,#+3 3808 } 3809 3810 if(total_unread && isShowUnread)// есть не прочитанные, выводим кол-во не прочитаннх сообщений и кол-во контактов от которых пришли сообщения \ ??DrawHeader_3: \ 00000148 382397E5 LDR R2,[R7, #+824] \ 0000014C 00949FE5 LDR R9,??DrawHeader_0+0x10 ;; HeadFontClr \ 00000150 ........ LDR R11,??DataTable157 ;; percent_t \ 00000154 000052E3 CMP R2,#+0 \ 00000158 2100000A BEQ ??DrawHeader_5 \ 0000015C F4039FE5 LDR R0,??DrawHeader_0+0x14 ;; isShowUnread \ 00000160 000090E5 LDR R0,[R0, #+0] \ 00000164 000050E3 CMP R0,#+0 \ 00000168 1D00000A BEQ ??DrawHeader_5 3811 { 3812 sprintf(s,"%d/%d",total_unread,total_unread_all); \ 0000016C 3C3397E5 LDR R3,[R7, #+828] \ 00000170 94108BE2 ADD R1,R11,#+148 \ 00000174 0400A0E1 MOV R0,R4 \ 00000178 160000EF SWI +22 3813 DrawStr(s,x,YDISP+1,x+GetWidth(s,drawFont),YDISP+1+HeaderY,0,drawFont,(char*)HeadFontClr,0); \ 0000017C 0610A0E1 MOV R1,R6 \ 00000180 0400A0E1 MOV R0,R4 \ 00000184 ........ BL GetWidth \ 00000188 0010A0E3 MOV R1,#+0 \ 0000018C 02002DE9 PUSH {R1} \ 00000190 083080E0 ADD R3,R0,R8 \ 00000194 0120A0E3 MOV R2,#+1 \ 00000198 0400A0E1 MOV R0,R4 \ 0000019C 0910A0E1 MOV R1,R9 \ 000001A0 02002DE9 PUSH {R1} \ 000001A4 0610A0E1 MOV R1,R6 \ 000001A8 02002DE9 PUSH {R1} \ 000001AC 0010A0E3 MOV R1,#+0 \ 000001B0 02002DE9 PUSH {R1} \ 000001B4 7C1497E5 LDR R1,[R7, #+1148] \ 000001B8 011081E2 ADD R1,R1,#+1 \ 000001BC 02002DE9 PUSH {R1} \ 000001C0 0810A0E1 MOV R1,R8 \ 000001C4 ........ BL DrawStr 3814 x += GetWidth(s,ClFont)+1; \ 000001C8 ........ LDR R0,??DataTable161 ;; ClFont \ 000001CC 001090E5 LDR R1,[R0, #+0] \ 000001D0 0400A0E1 MOV R0,R4 \ 000001D4 ........ BL GetWidth \ 000001D8 010080E2 ADD R0,R0,#+1 \ 000001DC 088080E0 ADD R8,R0,R8 \ 000001E0 14D08DE2 ADD SP,SP,#+20 3815 } 3816 3817 if(CurrentXStatus!=0 && HEAD_XSTATUS)//если есть хстатус и показывать х-статус \ ??DrawHeader_5: \ 000001E4 000497E5 LDR R0,[R7, #+1024] \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 0E00000A BEQ ??DrawHeader_6 \ 000001F0 64139FE5 LDR R1,??DrawHeader_0+0x18 ;; HEAD_XSTATUS \ 000001F4 001091E5 LDR R1,[R1, #+0] \ 000001F8 000051E3 CMP R1,#+0 \ 000001FC 0A00000A BEQ ??DrawHeader_6 3818 { 3819 if(GetXIconByItem(CurrentXStatus)) \ 00000200 ........ _BLF GetXIconByItem,??GetXIconByItem??rA \ 00000204 000050E3 CMP R0,#+0 \ 00000208 0700000A BEQ ??DrawHeader_6 3820 x += DrwImage(GetXIconByItem(CurrentXStatus),x,YDISP+1,RET_X) + 2; \ 0000020C 000497E5 LDR R0,[R7, #+1024] \ 00000210 ........ _BLF GetXIconByItem,??GetXIconByItem??rA \ 00000214 0130A0E3 MOV R3,#+1 \ 00000218 0120A0E3 MOV R2,#+1 \ 0000021C 0810A0E1 MOV R1,R8 \ 00000220 ........ BL DrwImage \ 00000224 020080E2 ADD R0,R0,#+2 \ 00000228 088080E0 ADD R8,R0,R8 3821 } 3822 3823 if(HEAD_PRIVATE)//выводить картинку своего приватного статуса \ ??DrawHeader_6: \ 0000022C 2C039FE5 LDR R0,??DrawHeader_0+0x1C ;; HEAD_PRIVATE \ 00000230 000090E5 LDR R0,[R0, #+0] \ 00000234 000050E3 CMP R0,#+0 \ 00000238 0700000A BEQ ??DrawHeader_7 3824 { 3825 x += DrwImage(GetIconByItem(GetPrivateIcon()),x,YDISP,RET_X) + 2; \ 0000023C ........ BL GetPrivateIcon \ 00000240 ........ _BLF GetIconByItem,??GetIconByItem??rA \ 00000244 0130A0E3 MOV R3,#+1 \ 00000248 0020A0E3 MOV R2,#+0 \ 0000024C 0810A0E1 MOV R1,R8 \ 00000250 ........ BL DrwImage \ 00000254 020080E2 ADD R0,R0,#+2 \ 00000258 088080E0 ADD R8,R0,R8 3826 } 3827 3828 #ifdef ELKA 3829 int y = YDISP-1; 3830 #else 3831 int y = 1; 3832 #endif 3833 if(strlen(ContactT9Key))//Есть введенный поиск по т9 \ ??DrawHeader_7: \ 0000025C 7810A0E3 MOV R1,#+120 \ 00000260 681D81E3 ORR R1,R1,#0x1A00 \ 00000264 071081E0 ADD R1,R1,R7 \ 00000268 00108DE5 STR R1,[SP, #+0] \ 0000026C E8A0A0E3 MOV R10,#+232 \ 00000270 60AE8AE3 ORR R10,R10,#0x600 \ 00000274 07008AE0 ADD R0,R10,R7 \ 00000278 1B0000EF SWI +27 \ 0000027C 000050E3 CMP R0,#+0 \ 00000280 1D00000A BEQ ??DrawHeader_8 3834 { 3835 sprintf(s,key_clm_hdr_text); \ 00000284 5800A0E3 MOV R0,#+88 \ 00000288 680D80E3 ORR R0,R0,#0x1A00 \ 0000028C 071080E0 ADD R1,R0,R7 \ 00000290 0400A0E1 MOV R0,R4 \ 00000294 160000EF SWI +22 3836 strcat(s,ContactT9Key); \ 00000298 07108AE0 ADD R1,R10,R7 \ 0000029C 0400A0E1 MOV R0,R4 \ 000002A0 170000EF SWI +23 3837 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 000002A4 4F0D8AE2 ADD R0,R10,#+5056 \ 000002A8 071080E0 ADD R1,R0,R7 \ 000002AC 00009DE5 LDR R0,[SP, #+0] \ 000002B0 1A0000EF SWI +26 3838 DrawStr(s,scr_w - GetWidth(s,drawFont),y, scr_w,y+FontH(drawFont),TEXT_ALIGNRIGHT,drawFont,(char*)HeadFontClr,1); \ 000002B4 0600A0E1 MOV R0,R6 \ 000002B8 C50100EF SWI +453 \ 000002BC 0070A0E1 MOV R7,R0 \ 000002C0 0610A0E1 MOV R1,R6 \ 000002C4 0400A0E1 MOV R0,R4 \ 000002C8 ........ BL GetWidth \ 000002CC 0110A0E3 MOV R1,#+1 \ 000002D0 02002DE9 PUSH {R1} \ 000002D4 00022DE9 PUSH {R9} \ 000002D8 40002DE9 PUSH {R6} \ 000002DC 0410A0E3 MOV R1,#+4 \ 000002E0 02002DE9 PUSH {R1} \ 000002E4 0530A0E1 MOV R3,R5 \ 000002E8 0120A0E3 MOV R2,#+1 \ 000002EC 011087E2 ADD R1,R7,#+1 \ 000002F0 02002DE9 PUSH {R1} \ 000002F4 001045E0 SUB R1,R5,R0 \ 000002F8 8B0000EA B ??DrawHeader_9 3839 } 3840 else //если кто то подключился/отключился, выводим кто подключился 3841 if(on_off_timer > 0 && strlen(on_off_buf)!=0) \ ??DrawHeader_8: \ 000002FC 8810A0E3 MOV R1,#+136 \ 00000300 681D81E3 ORR R1,R1,#0x1A00 \ 00000304 071081E0 ADD R1,R1,R7 \ 00000308 04108DE5 STR R1,[SP, #+4] \ 0000030C 500397E5 LDR R0,[R7, #+848] \ 00000310 010050E3 CMP R0,#+1 \ 00000314 440000BA BLT ??DrawHeader_10 \ 00000318 0800A0E3 MOV R0,#+8 \ 0000031C 5C0D80E3 ORR R0,R0,#0x1700 \ 00000320 07A080E0 ADD R10,R0,R7 \ 00000324 0A00A0E1 MOV R0,R10 \ 00000328 1B0000EF SWI +27 \ 0000032C 000050E3 CMP R0,#+0 \ 00000330 3D00000A BEQ ??DrawHeader_10 3842 { 3843 int i=GetWidth(on_off_buf, drawFont); \ 00000334 0610A0E1 MOV R1,R6 \ 00000338 0A00A0E1 MOV R0,R10 \ 0000033C ........ BL GetWidth \ 00000340 00B0A0E1 MOV R11,R0 3844 if((i<0) || (i < scr_w-x-2))//не нада скролла \ 00000344 6C00A0E3 MOV R0,#+108 \ 00000348 6C0D80E3 ORR R0,R0,#0x1B00 \ 0000034C 070080E0 ADD R0,R0,R7 \ 00000350 00005BE3 CMP R11,#+0 \ 00000354 0300004A BMI ??DrawHeader_11 \ 00000358 081045E0 SUB R1,R5,R8 \ 0000035C 021041E2 SUB R1,R1,#+2 \ 00000360 01005BE1 CMP R11,R1 \ 00000364 150000AA BGE ??DrawHeader_12 3845 { 3846 int xx = scr_w-i-2; 3847 DisableScroll(); \ ??DrawHeader_11: \ 00000368 8C0100EF SWI +396 \ 0000036C 0000A0E3 MOV R0,#+0 \ 00000370 840487E5 STR R0,[R7, #+1156] \ 00000374 800487E5 STR R0,[R7, #+1152] 3848 DrawStr(on_off_buf,xx,y,scr_w,y+FontH(drawFont),TEXT_ALIGNRIGHT,drawFont,(char*)HeadFontClr,0); \ 00000378 0600A0E1 MOV R0,R6 \ 0000037C C50100EF SWI +453 \ 00000380 0010A0E3 MOV R1,#+0 \ 00000384 02002DE9 PUSH {R1} \ 00000388 00022DE9 PUSH {R9} \ 0000038C 40002DE9 PUSH {R6} \ 00000390 0410A0E3 MOV R1,#+4 \ 00000394 02002DE9 PUSH {R1} \ 00000398 010080E2 ADD R0,R0,#+1 \ 0000039C 01002DE9 PUSH {R0} \ 000003A0 0530A0E1 MOV R3,R5 \ 000003A4 0120A0E3 MOV R2,#+1 \ 000003A8 0B0045E0 SUB R0,R5,R11 \ 000003AC 021040E2 SUB R1,R0,#+2 \ 000003B0 0A00A0E1 MOV R0,R10 \ 000003B4 ........ BL DrawStr \ 000003B8 14D08DE2 ADD SP,SP,#+20 \ 000003BC 140000EA B ??DrawHeader_13 3849 } 3850 else//иначе скроллим 3851 { 3852 if(!max_scroll_disp) \ ??DrawHeader_12: \ 000003C0 841497E5 LDR R1,[R7, #+1156] \ 000003C4 000051E3 CMP R1,#+0 \ 000003C8 0200001A BNE ??DrawHeader_14 3853 GBS_StartTimerProc(&tmr_scroll,TMR_SECOND,scroll_timer_proc); \ 000003CC ........ LDR R2,??DataTable159 ;; scroll_timer_proc \ 000003D0 D810A0E3 MOV R1,#+216 \ 000003D4 4D0000EF SWI +77 3854 3855 max_scroll_disp = (x - (scr_w-i)) - 4; \ ??DrawHeader_14: \ 000003D8 050048E0 SUB R0,R8,R5 \ 000003DC 00008BE0 ADD R0,R11,R0 \ 000003E0 040040E2 SUB R0,R0,#+4 \ 000003E4 840487E5 STR R0,[R7, #+1156] 3856 DrawScrollStr(on_off_buf,x,y,scr_w,y+HeaderY,drawFont,(char*)HeadFontClr); \ 000003E8 00022DE9 PUSH {R9} \ 000003EC 40002DE9 PUSH {R6} \ 000003F0 7C0497E5 LDR R0,[R7, #+1148] \ 000003F4 0530A0E1 MOV R3,R5 \ 000003F8 010080E2 ADD R0,R0,#+1 \ 000003FC 01002DE9 PUSH {R0} \ 00000400 0120A0E3 MOV R2,#+1 \ 00000404 0810A0E1 MOV R1,R8 \ 00000408 0A00A0E1 MOV R0,R10 \ 0000040C ........ BL DrawScrollStr \ 00000410 0CD08DE2 ADD SP,SP,#+12 3857 } 3858 3859 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ ??DrawHeader_13: \ 00000414 04109DE5 LDR R1,[SP, #+4] \ 00000418 00009DE5 LDR R0,[SP, #+0] \ 0000041C 1A0000EF SWI +26 \ 00000420 0400A0E1 MOV R0,R4 \ 00000424 150000EF SWI +21 \ 00000428 F38FBDE8 POP {R0,R1,R4-R11,PC} 3860 } 3861 else//Штатный вывод 3862 { 3863 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ ??DrawHeader_10: \ 0000042C 04109DE5 LDR R1,[SP, #+4] \ 00000430 00009DE5 LDR R0,[SP, #+0] \ 00000434 1A0000EF SWI +26 3864 strcpy(s,empty_str); \ 00000438 03108BE2 ADD R1,R11,#+3 \ 0000043C 0400A0E1 MOV R0,R4 \ 00000440 1A0000EF SWI +26 3865 strcpy(clistm->s,empty_str); \ 00000444 4C0397E5 LDR R0,[R7, #+844] \ 00000448 03108BE2 ADD R1,R11,#+3 \ 0000044C 2C0080E2 ADD R0,R0,#+44 \ 00000450 1A0000EF SWI +26 3866 /* 3867 if(away_m && isShowA) 3868 { 3869 sprintf(clistm->s,"[A:%s]",away_msg_time_dace); 3870 strcat(s,clistm->s); 3871 }*/ 3872 3873 if(Is_Vibra_Enabled && isShowV) strcat(s,"[V]") ; \ 00000454 1C0397E5 LDR R0,[R7, #+796] \ 00000458 000050E3 CMP R0,#+0 \ 0000045C 0600000A BEQ ??DrawHeader_15 \ 00000460 FC009FE5 LDR R0,??DrawHeader_0+0x20 ;; isShowV \ 00000464 000090E5 LDR R0,[R0, #+0] \ 00000468 000050E3 CMP R0,#+0 \ 0000046C 0200000A BEQ ??DrawHeader_15 \ 00000470 331F8FE2 ADR R1,??DrawHeader_0 ;; "[V]" \ 00000474 0400A0E1 MOV R0,R4 \ 00000478 170000EF SWI +23 3874 if(Is_Sounds_Enabled && isShowS) strcat(s,"[S]") ; \ ??DrawHeader_15: \ 0000047C 200397E5 LDR R0,[R7, #+800] \ 00000480 000050E3 CMP R0,#+0 \ 00000484 0600000A BEQ ??DrawHeader_16 \ 00000488 D8009FE5 LDR R0,??DrawHeader_0+0x24 ;; isShowS \ 0000048C 000090E5 LDR R0,[R0, #+0] \ 00000490 000050E3 CMP R0,#+0 \ 00000494 0200000A BEQ ??DrawHeader_16 \ 00000498 2A1F8FE2 ADR R1,??DrawHeader_0+0x4 ;; "[S]" \ 0000049C 0400A0E1 MOV R0,R4 \ 000004A0 170000EF SWI +23 3875 //if(Is_Double_Vibra_On && isShowVr) strcat(s,"[Vr]") ; 3876 3877 // if(isShowCont) 3878 { 3879 sprintf(clistm->s,"[%d/%d]",online_contact,total_contact); \ ??DrawHeader_16: \ 000004A4 4C0397E5 LDR R0,[R7, #+844] \ 000004A8 583397E5 LDR R3,[R7, #+856] \ 000004AC 542397E5 LDR R2,[R7, #+852] \ 000004B0 9C108BE2 ADD R1,R11,#+156 \ 000004B4 2C0080E2 ADD R0,R0,#+44 \ 000004B8 160000EF SWI +22 3880 strcat(s,clistm->s); \ 000004BC 4C0397E5 LDR R0,[R7, #+844] \ 000004C0 2C1080E2 ADD R1,R0,#+44 \ 000004C4 0400A0E1 MOV R0,R4 \ 000004C8 170000EF SWI +23 3881 } 3882 3883 // if(isShowBat) 3884 { 3885 sprintf(clistm->s,"[%d%%]",*RamCap()); \ 000004CC C88000EF SWI +32968 \ 000004D0 B020D0E1 LDRH R2,[R0, #+0] \ 000004D4 4C0397E5 LDR R0,[R7, #+844] \ 000004D8 5B1F8BE2 ADD R1,R11,#+364 \ 000004DC 2C0080E2 ADD R0,R0,#+44 \ 000004E0 160000EF SWI +22 3886 strcat(s,clistm->s); \ 000004E4 4C0397E5 LDR R0,[R7, #+844] \ 000004E8 2C1080E2 ADD R1,R0,#+44 \ 000004EC 0400A0E1 MOV R0,R4 \ 000004F0 170000EF SWI +23 3887 } 3888 3889 DrawStr(s,(scr_w/2),y,scr_w,y+FontH(drawFont),TEXT_ALIGNRIGHT,drawFont,(char*)HeadFontClr,0); \ 000004F4 0600A0E1 MOV R0,R6 \ 000004F8 C50100EF SWI +453 \ 000004FC 0010A0E3 MOV R1,#+0 \ 00000500 02002DE9 PUSH {R1} \ 00000504 00022DE9 PUSH {R9} \ 00000508 40002DE9 PUSH {R6} \ 0000050C 0410A0E3 MOV R1,#+4 \ 00000510 02002DE9 PUSH {R1} \ 00000514 010080E2 ADD R0,R0,#+1 \ 00000518 01002DE9 PUSH {R0} \ 0000051C 0530A0E1 MOV R3,R5 \ 00000520 0120A0E3 MOV R2,#+1 \ 00000524 A50F85E0 ADD R0,R5,R5, LSR #+31 \ 00000528 C010A0E1 ASR R1,R0,#+1 \ ??DrawHeader_9: \ 0000052C 0400A0E1 MOV R0,R4 \ 00000530 ........ BL DrawStr \ 00000534 14D08DE2 ADD SP,SP,#+20 3890 /* 3891 int i = GetWidth(s, drawFont); 3892 if((i<0) || (i < scr_w-x-5)) 3893 { 3894 clistm->i = scr_w - i - 2; 3895 DisableScroll(); 3896 DrawStr(s,clistm->i,y,scr_w,y+FontH(drawFont),TEXT_ALIGNRIGHT,drawFont,(char*)HeadFontClr,0); 3897 } 3898 else 3899 { 3900 clistm->i = x+3; 3901 if (!max_scroll_disp) 3902 { 3903 GBS_StartTimerProc(&tmr_scroll,TMR_SECOND,scroll_timer_proc); 3904 } 3905 max_scroll_disp = clistm->i-(scr_w-i); 3906 DrawScrollStr(s,clistm->i,y,scr_w,y+HeaderY,drawFont,(char*)HeadFontClr); 3907 }*/ 3908 } 3909 mfree(s); \ 00000538 0400A0E1 MOV R0,R4 \ 0000053C 150000EF SWI +21 3910 } \ 00000540 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??DrawHeader_0: \ 00000544 5B565D00 DC8 "[V]" \ 00000548 5B535D00 DC8 "[S]" \ 0000054C ........ DC32 HeadBackgrClr \ 00000550 ........ DC32 HEAD_STATUS \ 00000554 ........ DC32 HeadFontClr \ 00000558 ........ DC32 isShowUnread \ 0000055C ........ DC32 HEAD_XSTATUS \ 00000560 ........ DC32 HEAD_PRIVATE \ 00000564 ........ DC32 isShowV \ 00000568 ........ DC32 isShowS 3911 3912 //------------------------------------------ 3913 3914 3915 /* 3916 * Функция: DrawScrollBar 3917 * Описание: Рисуем полосу прокрутки в контакт листе 3918 * Параметры: 3919 * int cur - текущее положение курсора 3920 * int total - общее кол-во пунктов в меню, для вычисления позиции курсора 3921 * Возвращаемое значение: Ничего не возвращает 3922 */ \ In segment CODE, align 4, keep-with-next 3923 void DrawScrollBar(int cur,int total) 3924 { \ DrawScrollBar: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0070A0E1 MOV R7,R0 3925 int scr_h = ScreenH()-1; 3926 int scr_w = ScreenW()-1; 3927 int y = scr_h - CLIST_Y1 - clistm->FontH - 2; \ 00000008 ........ LDR R10,??DataTable175 ;; popup \ 0000000C 0180A0E1 MOV R8,R1 \ 00000010 898100EF SWI +33161 \ 00000014 014040E2 SUB R4,R0,#+1 \ 00000018 888100EF SWI +33160 \ 0000001C 015040E2 SUB R5,R0,#+1 \ 00000020 ........ LDR R0,??DataTable161 ;; ClFont \ 00000024 006090E5 LDR R6,[R0, #+0] \ 00000028 0600A0E1 MOV R0,R6 \ 0000002C C50100EF SWI +453 \ 00000030 4C139AE5 LDR R1,[R10, #+844] \ 00000034 000044E0 SUB R0,R4,R0 \ 00000038 201091E5 LDR R1,[R1, #+32] \ 0000003C 040040E2 SUB R0,R0,#+4 \ 00000040 010040E0 SUB R0,R0,R1 \ 00000044 029040E2 SUB R9,R0,#+2 3928 int pos = sdiv(total, y*cur); \ 00000048 970901E0 MUL R1,R7,R9 \ 0000004C 0800A0E1 MOV R0,R8 \ 00000050 B80000EF SWI +184 \ 00000054 0070A0E1 MOV R7,R0 3929 int y2 = sdiv(total, y); \ 00000058 0910A0E1 MOV R1,R9 \ 0000005C 0800A0E1 MOV R0,R8 \ 00000060 B80000EF SWI +184 \ 00000064 0080A0E1 MOV R8,R0 3930 int i = 0; 3931 3932 DrawLine(scr_w - 2, CLIST_Y1, scr_w - 2, scr_h - FontH(ClFont) - 2, 1, clrBlack); \ 00000068 0600A0E1 MOV R0,R6 \ 0000006C C50100EF SWI +453 \ 00000070 0090A0E1 MOV R9,R0 \ 00000074 0600A0E1 MOV R0,R6 \ 00000078 C50100EF SWI +453 \ 0000007C 5820A0E3 MOV R2,#+88 \ 00000080 6C2D82E3 ORR R2,R2,#0x1B00 \ 00000084 0AA082E0 ADD R10,R2,R10 \ 00000088 0A20A0E1 MOV R2,R10 \ 0000008C 04002DE9 PUSH {R2} \ 00000090 0010A0E1 MOV R1,R0 \ 00000094 020045E2 SUB R0,R5,#+2 \ 00000098 041081E2 ADD R1,R1,#+4 \ 0000009C 0120A0E3 MOV R2,#+1 \ 000000A0 04002DE9 PUSH {R2} \ 000000A4 092044E0 SUB R2,R4,R9 \ 000000A8 023042E2 SUB R3,R2,#+2 3933 DrawRoundedFrame(scr_w-4,CLIST_Y1+pos+1,scr_w,CLIST_Y1+pos+y2,0,0,0,clrBlack,clrBlack); \ 000000AC 044045E2 SUB R4,R5,#+4 \ 000000B0 0020A0E1 MOV R2,R0 \ 000000B4 B30100EF SWI +435 \ 000000B8 0600A0E1 MOV R0,R6 \ 000000BC C50100EF SWI +453 \ 000000C0 0090A0E1 MOV R9,R0 \ 000000C4 0600A0E1 MOV R0,R6 \ 000000C8 C50100EF SWI +453 \ 000000CC 0A10A0E1 MOV R1,R10 \ 000000D0 02002DE9 PUSH {R1} \ 000000D4 00042DE9 PUSH {R10} \ 000000D8 0520A0E1 MOV R2,R5 \ 000000DC 0010A0E3 MOV R1,#+0 \ 000000E0 02002DE9 PUSH {R1} \ 000000E4 02002DE9 PUSH {R1} \ 000000E8 02002DE9 PUSH {R1} \ 000000EC 000087E0 ADD R0,R7,R0 \ 000000F0 091087E0 ADD R1,R7,R9 3934 3935 for(i=0;ionline 3950 * Параметры: Никаких 3951 * Возвращаемое значение: Ничего не возвращает 3952 */ \ In segment CODE, align 4, keep-with-next 3953 void RedrawOnline() 3954 { \ RedrawOnline: \ 00000000 70402DE9 PUSH {R4-R6,LR} 3955 int f = 0; 3956 CLIST *t=(CLIST*)cltop; \ 00000004 ........ LDR R4,??DataTable175 ;; popup \ 00000008 0000A0E3 MOV R0,#+0 \ 0000000C 001394E5 LDR R1,[R4, #+768] \ 00000010 0050A0E3 MOV R5,#+0 \ 00000014 0120A0E1 MOV R2,R1 \ 00000018 000000EA B ??RedrawOnline_0 3957 while(t=t->next) 3958 { 3959 if(t->isonline) 3960 { 3961 f = 1; 3962 t->online =! t->online; \ ??RedrawOnline_1: \ 0000001C 903082E5 STR R3,[R2, #+144] \ ??RedrawOnline_0: \ 00000020 002092E5 LDR R2,[R2, #+0] \ 00000024 0130A0E3 MOV R3,#+1 \ 00000028 000052E3 CMP R2,#+0 \ 0000002C 0700000A BEQ ??RedrawOnline_2 \ 00000030 8C6092E5 LDR R6,[R2, #+140] \ 00000034 000056E3 CMP R6,#+0 \ 00000038 F8FFFF0A BEQ ??RedrawOnline_0 \ 0000003C 906092E5 LDR R6,[R2, #+144] \ 00000040 0100A0E3 MOV R0,#+1 \ 00000044 000056E3 CMP R6,#+0 \ 00000048 0030A013 MOVNE R3,#+0 \ 0000004C F2FFFFEA B ??RedrawOnline_1 3963 } 3964 } 3965 3966 if(f)//еще есть подключившиеся,мигаем \ ??RedrawOnline_2: \ 00000050 7C20A0E3 MOV R2,#+124 \ 00000054 6C2D82E3 ORR R2,R2,#0x1B00 \ 00000058 046082E0 ADD R6,R2,R4 \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 0600000A BEQ ??RedrawOnline_3 3967 { 3968 isonline = 1; \ 00000064 5C3384E5 STR R3,[R4, #+860] 3969 SMART_REDRAW(); \ 00000068 ........ BL SMART_REDRAW 3970 GBS_StartTimerProc(&online_tmr,TMR_SECOND,RedrawOnline); \ 0000006C 3C209FE5 LDR R2,??RedrawOnline_4 ;; RedrawOnline \ 00000070 D810A0E3 MOV R1,#+216 \ 00000074 0600A0E1 MOV R0,R6 \ 00000078 4D0000EF SWI +77 \ 0000007C 7080BDE8 POP {R4-R6,PC} 3971 } 3972 else//иначе обнуляем все и удаляем таймер 3973 { 3974 FIRST_START = 0;//показывать попапы после того как все контакты промигают первый раз \ ??RedrawOnline_3: \ 00000080 1C5484E5 STR R5,[R4, #+1052] 3975 t=(CLIST*)cltop; \ 00000084 0120A0E1 MOV R2,R1 \ 00000088 010000EA B ??RedrawOnline_5 3976 while(t=t->next){ t->online=0; t->isonline=0; } \ ??RedrawOnline_6: \ 0000008C 905082E5 STR R5,[R2, #+144] \ 00000090 8C5082E5 STR R5,[R2, #+140] \ ??RedrawOnline_5: \ 00000094 002092E5 LDR R2,[R2, #+0] \ 00000098 000052E3 CMP R2,#+0 \ 0000009C FAFFFF1A BNE ??RedrawOnline_6 3977 GBS_DelTimer(&online_tmr); \ 000000A0 0600A0E1 MOV R0,R6 \ 000000A4 8C0100EF SWI +396 3978 isonline = 0; \ 000000A8 5C5384E5 STR R5,[R4, #+860] 3979 } 3980 } \ 000000AC 7080BDE8 POP {R4-R6,PC} ;; return \ ??RedrawOnline_4: \ 000000B0 ........ DC32 RedrawOnline 3981 #endif 3982 3983 /* 3984 * Функция: DrawOnlineContact 3985 * Описание: Сама отрисовка контакта в цвете 3986 * Параметры: 3987 * RECT *rc - область прорисовки 3988 * CLIST *t 3989 * Возвращаемое значение: Ничего не возвращает 3990 */ \ In segment CODE, align 4, keep-with-next 3991 void DrawOnlineContact(RECT *rc,CLIST *cl) 3992 { \ DrawOnlineContact: \ 00000000 00402DE9 PUSH {LR} \ 00000004 01C0A0E1 MOV R12,R1 3993 DrawStr(cl->name,rc->x,rc->y,rc->x2,rc->y2,0,ClBoldFont,((!cl->online) ? (blue) : (clrRed)) ,1); \ 00000008 ........ LDR R1,??DataTable175 ;; popup \ 0000000C 90209CE5 LDR R2,[R12, #+144] \ 00000010 000052E3 CMP R2,#+0 \ 00000014 6420A003 MOVEQ R2,#+100 \ 00000018 6020A013 MOVNE R2,#+96 \ 0000001C 6C2D82E3 ORR R2,R2,#0x1B00 \ 00000020 011082E0 ADD R1,R2,R1 \ 00000024 0120A0E3 MOV R2,#+1 \ 00000028 04002DE9 PUSH {R2} \ 0000002C 02002DE9 PUSH {R1} \ 00000030 ........ LDR R1,??DataTable172 ;; ClBoldFont \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 02002DE9 PUSH {R1} \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 02002DE9 PUSH {R1} \ 00000044 F610D0E1 LDRSH R1,[R0, #+6] \ 00000048 02002DE9 PUSH {R1} \ 0000004C F430D0E1 LDRSH R3,[R0, #+4] \ 00000050 F220D0E1 LDRSH R2,[R0, #+2] \ 00000054 F010D0E1 LDRSH R1,[R0, #+0] \ 00000058 14008CE2 ADD R0,R12,#+20 \ 0000005C ........ BL DrawStr 3994 #ifdef DEBUG 3995 // DrawStr(cl->name,rc->x,rc->y,rc->x2,rc->y2,0,ClBoldFont,((!cl->online) ? (GetColor(cl)) : (clrRed)) ,1); 3996 cl->online=!cl->online; 3997 #endif 3998 } \ 00000060 14D08DE2 ADD SP,SP,#+20 \ 00000064 0080BDE8 POP {PC} ;; return 3999 4000 4001 //------------------------------------------ 4002 4003 4004 #define SENDED 0 4005 #define SEND 1 4006 #define NOTSEND 2 4007 4008 typedef struct 4009 { 4010 unsigned int type; //0-доставлен, 1-отправлен, 2-не отправлено 4011 unsigned int count;//кол-во недоставленных 4012 }ACKED; 4013 4014 ACKED *myack; 4015 4016 /* 4017 * Функция: GetAck 4018 * Описание: Функция проверяет состояния отправки сообщений у контакта 4019 * Параметры: CLIST *t 4020 * Возвращаемое значение: возвращает структура ACKED 4021 */ 4022 static ACKED *GetAck(CLIST *t) 4023 { 4024 if(!ShowProcessSend) return 0; 4025 if(!t) return 0; 4026 if(!t->isactive) return 0; 4027 if(t->state==0xFFFF) return 0; 4028 4029 ACKED *ack = myack;//malloc(sizeof(ACKED)); 4030 ack->type=0; 4031 ack->count=0; 4032 LOGQ *lp; 4033 lp=t->log; 4034 4035 while(lp) 4036 { 4037 if(lp->acked) 4038 { 4039 if (lp->acked==1)//отправлен,но не доставлен 4040 { 4041 ack->type = SEND; 4042 ack->count++; 4043 } 4044 else 4045 { 4046 ack->type = SENDED;//доставлен(прозрачный) 4047 4048 if(!lp->next)//если последний отправлен, чтобы не было такого еси пред. не отправлено, то не висело значение 4049 { 4050 ack->type=0; 4051 ack->count=0; 4052 } 4053 } 4054 } 4055 else 4056 if (lp->ID!=0xFFFFFFFF)//не доставлено 4057 { 4058 ack->type = NOTSEND; 4059 ack->count++; 4060 } 4061 lp=lp->next; 4062 } 4063 return ack; 4064 } 4065 4066 4067 //------------------------------------------ 4068 4069 4070 //Получаем цвет для своих статусов,если стоит в настройках 4071 /* 4072 * Функция: GetColor 4073 * Описание: Получаем цвет для вывода имен контактов разными цветами, в зависимости от установленного у оного статуса 4074 * Параметры: CLIST *t 4075 * Возвращаемое значение: Цвет, настроенный в конфиге 4076 */ \ In segment CODE, align 4, keep-with-next 4077 char* GetColor(CLIST *t) 4078 { \ GetColor: \ 00000000 10402DE9 PUSH {R4,LR} 4079 if(t->isgroup) return (char*)GroupClr;//если группа то сразу выходим \ 00000004 081090E5 LDR R1,[R0, #+8] \ 00000008 000051E3 CMP R1,#+0 \ 0000000C ........ LDRNE R0,??DataTable171 ;; GroupClr \ 00000010 1080BD18 POPNE {R4,PC} 4080 if(isIndividualColor) \ 00000014 A0309FE5 LDR R3,??GetColor_1 ;; isIndividualColor \ 00000018 742090E5 LDR R2,[R0, #+116] \ 0000001C 003093E5 LDR R3,[R3, #+0] \ 00000020 98409FE5 LDR R4,??GetColor_1+0x4 ;; NotActiveClr \ 00000024 98109FE5 LDR R1,??GetColor_1+0x8 ;; ActiveClr \ 00000028 000053E3 CMP R3,#+0 \ 0000002C 1E00000A BEQ ??GetColor_2 4081 { 4082 if(t->isactive) return (char*)ActiveClr;//если есть активные чаты то выделяем \ 00000030 000052E3 CMP R2,#+0 \ 00000034 0100A011 MOVNE R0,R1 \ 00000038 1080BD18 POPNE {R4,PC} 4083 switch(GetIconIndex(t)) \ 0000003C ........ BL GetIconIndex \ 00000040 0C0050E3 CMP R0,#+12 \ 00000044 1A00008A BHI ??GetColor_3 \ 00000048 011F8FE2 ADR R1,??GetColor_0 \ 0000004C 0010D1E7 LDRB R1,[R1, R0] \ 00000050 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??GetColor_0: \ 00000054 11130507 DC8 +17,+19,+5,+7 \ 00000058 090B0D13 DC8 +9,+11,+13,+19 \ 0000005C 03030303 DC8 +3,+3,+3,+3 \ 00000060 0F000000 DC8 +15,+0,+0,+0 4084 { 4085 case IS_ONLINE: case IS_HOME: case IS_LUNCH: case IS_WORK: return (char*)CLColorsOnline; \ ??GetColor_4: \ 00000064 5C009FE5 LDR R0,??GetColor_1+0xC ;; CLColorsOnline \ 00000068 1080BDE8 POP {R4,PC} 4086 case IS_AWAY: return (char*)CLColorsAway; \ ??GetColor_5: \ 0000006C 58009FE5 LDR R0,??GetColor_1+0x10 ;; CLColorsAway \ 00000070 1080BDE8 POP {R4,PC} 4087 case IS_NA: return (char*)CLColorsNA; \ ??GetColor_6: \ 00000074 54009FE5 LDR R0,??GetColor_1+0x14 ;; CLColorsNA \ 00000078 1080BDE8 POP {R4,PC} 4088 case IS_OCCUPIED: return (char*)CLColorsOccupied; \ ??GetColor_7: \ 0000007C 50009FE5 LDR R0,??GetColor_1+0x18 ;; CLColorsOccupied \ 00000080 1080BDE8 POP {R4,PC} 4089 case IS_DND: return (char*)CLColorsDND; \ ??GetColor_8: \ 00000084 4C009FE5 LDR R0,??GetColor_1+0x1C ;; CLColorsDND \ 00000088 1080BDE8 POP {R4,PC} 4090 case IS_DEPRESSION: return (char*)CLColorsDepression; \ ??GetColor_9: \ 0000008C 48009FE5 LDR R0,??GetColor_1+0x20 ;; CLColorsDepression \ 00000090 1080BDE8 POP {R4,PC} 4091 case IS_FFC: return (char*)CLColorsFFC; \ ??GetColor_10: \ 00000094 44009FE5 LDR R0,??GetColor_1+0x24 ;; CLColorsFFC \ 00000098 1080BDE8 POP {R4,PC} 4092 case IS_OFFLINE: return (char*)CLColorsOff; \ ??GetColor_11: \ 0000009C 40009FE5 LDR R0,??GetColor_1+0x28 ;; CLColorsOff \ 000000A0 1080BDE8 POP {R4,PC} 4093 default : return t->isactive ? (char*)ActiveClr : (char*)NotActiveClr; \ ??GetColor_12: \ 000000A4 0400A0E1 MOV R0,R4 \ 000000A8 1080BDE8 POP {R4,PC} 4094 } 4095 } 4096 //если не включена опция то по старинке 4097 return t->isactive ? (char*)ActiveClr : (char*)NotActiveClr; \ ??GetColor_2: \ 000000AC 000052E3 CMP R2,#+0 \ 000000B0 0140A011 MOVNE R4,R1 \ ??GetColor_3: \ 000000B4 0400A0E1 MOV R0,R4 \ 000000B8 1080BDE8 POP {R4,PC} ;; return \ ??GetColor_1: \ 000000BC ........ DC32 isIndividualColor \ 000000C0 ........ DC32 NotActiveClr \ 000000C4 ........ DC32 ActiveClr \ 000000C8 ........ DC32 CLColorsOnline \ 000000CC ........ DC32 CLColorsAway \ 000000D0 ........ DC32 CLColorsNA \ 000000D4 ........ DC32 CLColorsOccupied \ 000000D8 ........ DC32 CLColorsDND \ 000000DC ........ DC32 CLColorsDepression \ 000000E0 ........ DC32 CLColorsFFC \ 000000E4 ........ DC32 CLColorsOff 4098 } 4099 4100 4101 //------------------------------------------ 4102 4103 unsigned int scr_w; 4104 unsigned int scr_h; 4105 4106 //#pragma optimize=z 9 4107 /* 4108 * Функция: DrawList 4109 * Описание: Функция отрисовки ников 4110 * Параметры: Никаких 4111 * Возвращаемое значение: Ничего не возвращает 4112 */ \ In segment CODE, align 4, keep-with-next 4113 void DrawList() 4114 { \ DrawList: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4115 unsigned int font_y = 0; //высота шрифта 4116 unsigned int SoftH = 0; //высота софтов 4117 unsigned int start_y; //начальное смещение итема на экране 4118 unsigned int icon; //иконка статуса 4119 4120 unsigned int oldY = 0; 4121 unsigned int drawFont; //номер шрифта каким рисуем 4122 char *drawColor; //цвет каким будем рисовать 4123 4124 if(!cltop) return; \ 00000004 ........ LDR R5,??DataTable175 ;; popup \ 00000008 30D04DE2 SUB SP,SP,#+48 \ 0000000C 000395E5 LDR R0,[R5, #+768] \ 00000010 0040A0E3 MOV R4,#+0 \ 00000014 1C408DE5 STR R4,[SP, #+28] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 6B02000A BEQ ??DrawList_0 4125 4126 SetVisibleScreen(); \ 00000020 ........ BL SetVisibleScreen 4127 4128 font_y = clistm->FontH + 2; //FontH(ClFont)+2; \ 00000024 4C0395E5 LDR R0,[R5, #+844] 4129 4130 SoftH = 0; \ 00000028 0080A0E3 MOV R8,#+0 \ 0000002C 200090E5 LDR R0,[R0, #+32] \ 00000030 026080E2 ADD R6,R0,#+2 4131 if(SOFT_MODE) SoftH = FontH(HeadFont);//если показывать софты,то высота равна высоте шрифта \ 00000034 ........ LDR R0,??DataTable167 ;; SOFT_MODE \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 0300000A BEQ ??DrawList_1 \ 00000044 ........ LDR R0,??DataTable168 ;; HeadFont \ 00000048 000090E5 LDR R0,[R0, #+0] \ 0000004C C50100EF SWI +453 \ 00000050 0080A0E1 MOV R8,R0 4132 clistm->itemFromDisp = sdiv(font_y, ScreenH()-CLIST_Y1-SoftH-2 ); //вол-во контактов на экране \ ??DrawList_1: \ 00000054 898100EF SWI +33161 \ 00000058 0090A0E1 MOV R9,R0 \ 0000005C ........ LDR R0,??DataTable169 ;; ClFont \ 00000060 007090E5 LDR R7,[R0, #+0] \ 00000064 0700A0E1 MOV R0,R7 \ 00000068 C50100EF SWI +453 \ 0000006C 000049E0 SUB R0,R9,R0 \ 00000070 040040E2 SUB R0,R0,#+4 \ 00000074 080040E0 SUB R0,R0,R8 \ 00000078 021040E2 SUB R1,R0,#+2 \ 0000007C 0600A0E1 MOV R0,R6 \ 00000080 B80000EF SWI +184 \ 00000084 4C1395E5 LDR R1,[R5, #+844] \ 00000088 040081E5 STR R0,[R1, #+4] 4133 if(VIEW_MODE) clistm->itemFromDisp = (clistm->itemFromDisp*2)-2; //еси в 2 столбца \ 0000008C ........ LDR R0,??DataTable174 ;; VIEW_MODE \ 00000090 008090E5 LDR R8,[R0, #+0] \ 00000094 000058E3 CMP R8,#+0 \ 00000098 0300000A BEQ ??DrawList_2 \ 0000009C 040091E5 LDR R0,[R1, #+4] \ 000000A0 8000A0E1 LSL R0,R0,#+1 \ 000000A4 020040E2 SUB R0,R0,#+2 \ 000000A8 040081E5 STR R0,[R1, #+4] 4134 if(LINE_MODE) clistm->itemFromDisp--; //курсор в 2 линии,удаляем лишний котакт на экране \ ??DrawList_2: \ 000000AC 24299FE5 LDR R2,??DrawList_3 ;; LINE_MODE \ 000000B0 002092E5 LDR R2,[R2, #+0] \ 000000B4 20208DE5 STR R2,[SP, #+32] \ 000000B8 000052E3 CMP R2,#+0 \ 000000BC 04009115 LDRNE R0,[R1, #+4] \ 000000C0 01004012 SUBNE R0,R0,#+1 \ 000000C4 04008115 STRNE R0,[R1, #+4] 4135 4136 CLIST *cl; 4137 RECT rc; 4138 ACKED *ack; 4139 4140 char *name = malloc(32); \ 000000C8 2000A0E3 MOV R0,#+32 \ 000000CC 140000EF SWI +20 \ 000000D0 0090A0E1 MOV R9,R0 4141 4142 drawFont = ClFont; //наш шрифт \ 000000D4 10708DE5 STR R7,[SP, #+16] 4143 clistm->column = 0; //столбик \ 000000D8 4C0395E5 LDR R0,[R5, #+844] \ 000000DC 104080E5 STR R4,[R0, #+16] 4144 clistm->nlines = 0; //кол-во линий \ 000000E0 184080E5 STR R4,[R0, #+24] 4145 clistm->curitem = 0; //текущий итем \ 000000E4 244080E5 STR R4,[R0, #+36] 4146 clistm->totalItems = CountContacts(); //общее кол-во контактов \ 000000E8 ........ _BLF CountContacts,??CountContacts??rA \ 000000EC 4C1395E5 LDR R1,[R5, #+844] \ 000000F0 080081E5 STR R0,[R1, #+8] 4147 //чтоб не было глюков с пропаданием контактов)) 4148 if( clistm->itemFromDisp > clistm->totalItems ) clistm->itemFromDisp = clistm->totalItems; \ 000000F4 042091E5 LDR R2,[R1, #+4] \ 000000F8 020050E1 CMP R0,R2 \ 000000FC 04008135 STRCC R0,[R1, #+4] 4149 4150 int start_item = ((VIEW_MODE==0) ? (clistm->startItem) : (0)); \ 00000100 000058E3 CMP R8,#+0 \ 00000104 2300001A BNE ??DrawList_4 \ 00000108 141091E5 LDR R1,[R1, #+20] \ 0000010C 14108DE5 STR R1,[SP, #+20] \ ??DrawList_5: \ 00000110 4C0395E5 LDR R0,[R5, #+844] \ 00000114 041090E5 LDR R1,[R0, #+4] \ ??DrawList_6: \ 00000118 4C2395E5 LDR R2,[R5, #+844] \ 0000011C 240092E5 LDR R0,[R2, #+36] \ 00000120 010050E1 CMP R0,R1 \ 00000124 2702002A BCS ??DrawList_7 4151 for(; (clistm->curitem < ((VIEW_MODE!=0)?(clistm->totalItems):(clistm->itemFromDisp))) ; clistm->curitem++) 4152 { 4153 if(!VIEW_MODE) goto next;//если не два столбика то пропускаем условие \ 00000128 000058E3 CMP R8,#+0 \ 0000012C 0500000A BEQ ??DrawList_8 4154 if(clistm->curitem >= (clistm->curpage-1)*clistm->itemFromDisp)//если те итемы который нужно выводить на экран со страници clistm->curpage \ 00000130 0C1092E5 LDR R1,[R2, #+12] \ 00000134 042092E5 LDR R2,[R2, #+4] \ 00000138 011041E2 SUB R1,R1,#+1 \ 0000013C 920101E0 MUL R1,R2,R1 \ 00000140 010050E1 CMP R0,R1 \ 00000144 1102003A BCC ??DrawList_9 4155 { 4156 next: 4157 cl = FindContactByN(clistm->curitem + start_item); \ ??DrawList_8: \ 00000148 14109DE5 LDR R1,[SP, #+20] \ 0000014C 000081E0 ADD R0,R1,R0 \ 00000150 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000154 00A0B0E1 MOVS R10,R0 4158 if(!cl) return; \ 00000158 1C02000A BEQ ??DrawList_0 4159 //if(cl) //если такой есть то рисуем его 4160 { 4161 icon = GetIconIndex(cl); \ 0000015C ........ BL GetIconIndex \ 00000160 18008DE5 STR R0,[SP, #+24] 4162 start_y = 0; 4163 if(LINE_MODE) //если в две линии \ 00000164 20109DE5 LDR R1,[SP, #+32] \ 00000168 4C0395E5 LDR R0,[R5, #+844] \ 0000016C 00B0A0E3 MOV R11,#+0 \ 00000170 000051E3 CMP R1,#+0 \ 00000174 0C00000A BEQ ??DrawList_10 4164 { 4165 //если итем ниже курсора,то смещаем на размер фонта + 3 4166 if(clistm->curitem + start_item > clistm->curpos ) start_y += font_y + 3; \ 00000178 001090E5 LDR R1,[R0, #+0] \ 0000017C 242090E5 LDR R2,[R0, #+36] \ 00000180 14309DE5 LDR R3,[SP, #+20] \ 00000184 022083E0 ADD R2,R3,R2 \ 00000188 020051E1 CMP R1,R2 \ 0000018C 03B08632 ADDCC R11,R6,#+3 4167 clistm->nlines = 2; \ 00000190 0210A0E3 MOV R1,#+2 \ 00000194 050000EA B ??DrawList_11 4168 } \ ??DrawList_4: \ 00000198 0010A0E3 MOV R1,#+0 \ 0000019C 14108DE5 STR R1,[SP, #+20] \ ??DrawList_12: \ 000001A0 4C0395E5 LDR R0,[R5, #+844] \ 000001A4 081090E5 LDR R1,[R0, #+8] \ 000001A8 DAFFFFEA B ??DrawList_6 4169 else clistm->nlines = 1; \ ??DrawList_10: \ 000001AC 0110A0E3 MOV R1,#+1 \ ??DrawList_11: \ 000001B0 181080E5 STR R1,[R0, #+24] 4170 4171 if(VIEW_MODE) //если в две колонки \ 000001B4 000058E3 CMP R8,#+0 \ 000001B8 3100000A BEQ ??DrawList_13 4172 { 4173 if(!clistm->column) //если первая колонка \ 000001BC 101090E5 LDR R1,[R0, #+16] \ 000001C0 000051E3 CMP R1,#+0 \ 000001C4 1B00001A BNE ??DrawList_14 4174 { 4175 //определяем начальное смещение по у 4176 start_y += ( CLIST_Y1 + ( sdiv(2,(clistm->curitem - (clistm->curpage-1)*clistm->itemFromDisp)*font_y) ) ); \ 000001C8 0700A0E1 MOV R0,R7 \ 000001CC C50100EF SWI +453 \ 000001D0 08008DE5 STR R0,[SP, #+8] \ 000001D4 4C0395E5 LDR R0,[R5, #+844] \ 000001D8 241090E5 LDR R1,[R0, #+36] \ 000001DC 0C2090E5 LDR R2,[R0, #+12] \ 000001E0 040090E5 LDR R0,[R0, #+4] \ 000001E4 012042E2 SUB R2,R2,#+1 \ 000001E8 900202E0 MUL R2,R0,R2 \ 000001EC 020041E0 SUB R0,R1,R2 \ 000001F0 960001E0 MUL R1,R6,R0 \ 000001F4 0200A0E3 MOV R0,#+2 \ 000001F8 B80000EF SWI +184 \ 000001FC 08109DE5 LDR R1,[SP, #+8] 4177 oldY = start_y;//сохраняем чтобы вывести во втором столбике,без повторного расчета 4178 patch_rect(&rc, 1, start_y, (scr_w/2)-5, start_y+(font_y*clistm->nlines)); \ 00000200 0130A0E3 MOV R3,#+1 \ 00000204 000081E0 ADD R0,R1,R0 \ 00000208 040080E2 ADD R0,R0,#+4 \ 0000020C 0BB080E0 ADD R11,R0,R11 \ 00000210 1CB08DE5 STR R11,[SP, #+28] \ 00000214 4C0395E5 LDR R0,[R5, #+844] \ 00000218 181090E5 LDR R1,[R0, #+24] \ 0000021C 91B620E0 MLA R0,R1,R6,R11 \ 00000220 941495E5 LDR R1,[R5, #+1172] \ 00000224 B030CDE1 STRH R3,[SP, #+0] \ 00000228 A110A0E1 LSR R1,R1,#+1 \ 0000022C 051041E2 SUB R1,R1,#+5 \ 00000230 B2B0CDE1 STRH R11,[SP, #+2] \ 00000234 090000EA B ??DrawList_15 4179 } 4180 else//если вторая 4181 { 4182 patch_rect(&rc, (scr_w/2)-4, oldY, scr_w-5, oldY+(font_y*clistm->nlines)); \ ??DrawList_14: \ 00000238 182090E5 LDR R2,[R0, #+24] \ 0000023C 1C109DE5 LDR R1,[SP, #+28] \ 00000240 921620E0 MLA R0,R2,R6,R1 \ 00000244 942495E5 LDR R2,[R5, #+1172] \ 00000248 051042E2 SUB R1,R2,#+5 \ 0000024C A220A0E1 LSR R2,R2,#+1 \ 00000250 042042E2 SUB R2,R2,#+4 \ 00000254 B020CDE1 STRH R2,[SP, #+0] \ 00000258 1C309DE5 LDR R3,[SP, #+28] \ 0000025C B230CDE1 STRH R3,[SP, #+2] \ ??DrawList_15: \ 00000260 B410CDE1 STRH R1,[SP, #+4] \ 00000264 B600CDE1 STRH R0,[SP, #+6] 4183 } 4184 clistm->column = !clistm->column;//меняем колонку \ 00000268 4C0395E5 LDR R0,[R5, #+844] \ 0000026C 101090E5 LDR R1,[R0, #+16] \ 00000270 000051E3 CMP R1,#+0 \ 00000274 0110A003 MOVEQ R1,#+1 \ 00000278 0010A013 MOVNE R1,#+0 \ 0000027C 101080E5 STR R1,[R0, #+16] \ 00000280 0F0000EA B ??DrawList_16 4185 } 4186 else 4187 { 4188 start_y += (CLIST_Y1 + 2 + (clistm->curitem*font_y)); \ ??DrawList_13: \ 00000284 0700A0E1 MOV R0,R7 \ 00000288 C50100EF SWI +453 \ 0000028C 4C1395E5 LDR R1,[R5, #+844] \ 00000290 060080E2 ADD R0,R0,#+6 \ 00000294 242091E5 LDR R2,[R1, #+36] 4189 patch_rect(&rc,2,start_y,scr_w-5,start_y+(font_y*clistm->nlines)); \ 00000298 181091E5 LDR R1,[R1, #+24] \ 0000029C 960220E0 MLA R0,R6,R2,R0 \ 000002A0 0230A0E3 MOV R3,#+2 \ 000002A4 0BB080E0 ADD R11,R0,R11 \ 000002A8 91B620E0 MLA R0,R1,R6,R11 \ 000002AC 941495E5 LDR R1,[R5, #+1172] \ 000002B0 B030CDE1 STRH R3,[SP, #+0] \ 000002B4 051041E2 SUB R1,R1,#+5 \ 000002B8 B2B0CDE1 STRH R11,[SP, #+2] \ 000002BC B410CDE1 STRH R1,[SP, #+4] \ 000002C0 B600CDE1 STRH R0,[SP, #+6] 4190 } 4191 4192 if(cl->isgroup && Is_Show_Groups)//группа \ ??DrawList_16: \ 000002C4 10179FE5 LDR R1,??DrawList_3+0x4 ;; ShowProcessSend \ 000002C8 001091E5 LDR R1,[R1, #+0] \ 000002CC 08108DE5 STR R1,[SP, #+8] \ 000002D0 08009AE5 LDR R0,[R10, #+8] \ 000002D4 000050E3 CMP R0,#+0 \ 000002D8 28039515 LDRNE R0,[R5, #+808] \ 000002DC 00005013 CMPNE R0,#+0 \ 000002E0 3A00000A BEQ ??DrawList_17 4193 { 4194 int onlinetotal[2]; 4195 GetOnTotalContact(cl->group,onlinetotal); \ 000002E4 10009AE5 LDR R0,[R10, #+16] \ 000002E8 24108DE2 ADD R1,SP,#+36 \ 000002EC ........ BL GetOnTotalContact 4196 if(!VIEW_MODE) //если не в два столбца \ 000002F0 000058E3 CMP R8,#+0 \ 000002F4 2400001A BNE ??DrawList_18 4197 { 4198 snprintf(name,32,_s,cl->name); \ 000002F8 E0269FE5 LDR R2,??DrawList_3+0x8 ;; Canvas + 14 \ 000002FC 14308AE2 ADD R3,R10,#+20 \ 00000300 2010A0E3 MOV R1,#+32 \ 00000304 0900A0E1 MOV R0,R9 \ 00000308 1B0100EF SWI +283 4199 snprintf(clistm->s,32,"(%d/%d)",onlinetotal[0],onlinetotal[1]); \ 0000030C 28009DE5 LDR R0,[SP, #+40] \ 00000310 CC269FE5 LDR R2,??DrawList_3+0xC ;; Canvas + 420 \ 00000314 01002DE9 PUSH {R0} \ 00000318 28309DE5 LDR R3,[SP, #+40] \ 0000031C 4C0395E5 LDR R0,[R5, #+844] \ 00000320 2010A0E3 MOV R1,#+32 \ 00000324 2C0080E2 ADD R0,R0,#+44 \ 00000328 1B0100EF SWI +283 4200 DrawStr(clistm->s,scr_w-7-GetWidth(clistm->s,ClFont),start_y,scr_w-7,start_y+font_y,TEXT_ALIGNRIGHT,ClFont,(char*)GroupClr,1); \ 0000032C 4C0395E5 LDR R0,[R5, #+844] \ 00000330 0710A0E1 MOV R1,R7 \ 00000334 2C0080E2 ADD R0,R0,#+44 \ 00000338 ........ BL GetWidth \ 0000033C 941495E5 LDR R1,[R5, #+1172] \ 00000340 0120A0E3 MOV R2,#+1 \ 00000344 04002DE9 PUSH {R2} \ 00000348 ........ LDR R2,??DataTable171 ;; GroupClr \ 0000034C 071041E2 SUB R1,R1,#+7 \ 00000350 04002DE9 PUSH {R2} \ 00000354 0130A0E1 MOV R3,R1 \ 00000358 001041E0 SUB R1,R1,R0 \ 0000035C 0720A0E1 MOV R2,R7 \ 00000360 04002DE9 PUSH {R2} \ 00000364 0420A0E3 MOV R2,#+4 \ 00000368 04002DE9 PUSH {R2} \ 0000036C 0B2086E0 ADD R2,R6,R11 \ 00000370 04002DE9 PUSH {R2} \ 00000374 4C0395E5 LDR R0,[R5, #+844] \ 00000378 0B20A0E1 MOV R2,R11 \ 0000037C 2C0080E2 ADD R0,R0,#+44 \ 00000380 ........ BL DrawStr \ 00000384 18D08DE2 ADD SP,SP,#+24 \ 00000388 090000EA B ??DrawList_19 4201 } 4202 else 4203 snprintf(name,32,"%s(%d/%d)",cl->name,onlinetotal[0],onlinetotal[1]); \ ??DrawList_18: \ 0000038C 28009DE5 LDR R0,[SP, #+40] \ 00000390 50269FE5 LDR R2,??DrawList_3+0x10 ;; Canvas + 428 \ 00000394 01002DE9 PUSH {R0} \ 00000398 28009DE5 LDR R0,[SP, #+40] \ 0000039C 14308AE2 ADD R3,R10,#+20 \ 000003A0 01002DE9 PUSH {R0} \ 000003A4 2010A0E3 MOV R1,#+32 \ 000003A8 0900A0E1 MOV R0,R9 \ 000003AC 1B0100EF SWI +283 \ 000003B0 08D08DE2 ADD SP,SP,#+8 4204 if (cl->state) icon++; //Модификация иконки группы \ ??DrawList_19: \ 000003B4 B405DAE1 LDRH R0,[R10, #+84] \ 000003B8 000050E3 CMP R0,#+0 \ 000003BC 3100000A BEQ ??DrawList_20 \ 000003C0 18109DE5 LDR R1,[SP, #+24] \ 000003C4 011081E2 ADD R1,R1,#+1 \ 000003C8 18108DE5 STR R1,[SP, #+24] \ 000003CC 2D0000EA B ??DrawList_20 4205 } 4206 else 4207 { 4208 ack = GetAck(cl);//Обработка процесса отправки \ ??DrawList_17: \ 000003D0 000051E3 CMP R1,#+0 \ 000003D4 0100001A BNE ??DrawList_21 \ ??DrawList_22: \ 000003D8 0010A0E3 MOV R1,#+0 \ 000003DC 230000EA B ??DrawList_23 \ ??DrawList_21: \ 000003E0 74009AE5 LDR R0,[R10, #+116] \ 000003E4 000050E3 CMP R0,#+0 \ 000003E8 FAFFFF0A BEQ ??DrawList_22 \ 000003EC B405DAE1 LDRH R0,[R10, #+84] \ 000003F0 FF10A0E3 MOV R1,#+255 \ 000003F4 FF1C81E3 ORR R1,R1,#0xFF00 \ 000003F8 010050E1 CMP R0,R1 \ 000003FC F5FFFF0A BEQ ??DrawList_22 \ 00000400 901495E5 LDR R1,[R5, #+1168] \ 00000404 004081E5 STR R4,[R1, #+0] \ 00000408 044081E5 STR R4,[R1, #+4] \ 0000040C 68009AE5 LDR R0,[R10, #+104] \ 00000410 000050E3 CMP R0,#+0 \ 00000414 1500000A BEQ ??DrawList_23 \ ??DrawList_24: \ 00000418 042090E5 LDR R2,[R0, #+4] \ 0000041C 000052E3 CMP R2,#+0 \ 00000420 0700000A BEQ ??DrawList_25 \ 00000424 010052E3 CMP R2,#+1 \ 00000428 0900000A BEQ ??DrawList_26 \ 0000042C 004081E5 STR R4,[R1, #+0] \ 00000430 002090E5 LDR R2,[R0, #+0] \ 00000434 000052E3 CMP R2,#+0 \ 00000438 0900001A BNE ??DrawList_27 \ 0000043C 044081E5 STR R4,[R1, #+4] \ 00000440 070000EA B ??DrawList_27 \ ??DrawList_25: \ 00000444 082090E5 LDR R2,[R0, #+8] \ 00000448 010072E3 CMN R2,#+1 \ 0000044C 0400000A BEQ ??DrawList_27 \ 00000450 0220A0E3 MOV R2,#+2 \ ??DrawList_26: \ 00000454 002081E5 STR R2,[R1, #+0] \ 00000458 042091E5 LDR R2,[R1, #+4] \ 0000045C 012082E2 ADD R2,R2,#+1 \ 00000460 042081E5 STR R2,[R1, #+4] \ ??DrawList_27: \ 00000464 000090E5 LDR R0,[R0, #+0] \ 00000468 000050E3 CMP R0,#+0 \ 0000046C E9FFFF1A BNE ??DrawList_24 4209 snprintf(name,32,_s,cl->name); \ ??DrawList_23: \ 00000470 68259FE5 LDR R2,??DrawList_3+0x8 ;; Canvas + 14 \ 00000474 0C108DE5 STR R1,[SP, #+12] \ 00000478 14308AE2 ADD R3,R10,#+20 \ 0000047C 2010A0E3 MOV R1,#+32 \ 00000480 0900A0E1 MOV R0,R9 \ 00000484 1B0100EF SWI +283 4210 } 4211 4212 //рисуем статуc 4213 /*if( (clistm->img = GetIconByItem((cl->online && BlinkIconByOnline)?(IS_OFFLINE):(icon))) ) 4214 rc.x += DrwImage(clistm->img,rc.x,rc.y+1,RET_X) + 2; 4215 */ 4216 rc.x += DrwImage(GetIconByItem((cl->online && BlinkIconByOnline && FIRST_START == 0)?(IS_OFFLINE):(icon)),rc.x,rc.y+1,RET_X) + 2; \ ??DrawList_20: \ 00000488 90009AE5 LDR R0,[R10, #+144] \ 0000048C 000050E3 CMP R0,#+0 \ 00000490 0600000A BEQ ??DrawList_28 \ 00000494 50059FE5 LDR R0,??DrawList_3+0x14 ;; BlinkIconByOnline \ 00000498 000090E5 LDR R0,[R0, #+0] \ 0000049C 000050E3 CMP R0,#+0 \ 000004A0 0200000A BEQ ??DrawList_28 \ 000004A4 1C0495E5 LDR R0,[R5, #+1052] \ 000004A8 000050E3 CMP R0,#+0 \ 000004AC 0000000A BEQ ??DrawList_29 \ ??DrawList_28: \ 000004B0 18009DE5 LDR R0,[SP, #+24] \ ??DrawList_29: \ 000004B4 ........ _BLF GetIconByItem,??GetIconByItem??rA \ 000004B8 F210DDE1 LDRSH R1,[SP, #+2] \ 000004BC 0130A0E3 MOV R3,#+1 \ 000004C0 012081E2 ADD R2,R1,#+1 \ 000004C4 F010DDE1 LDRSH R1,[SP, #+0] \ 000004C8 ........ BL DrwImage \ 000004CC F020DDE1 LDRSH R2,[SP, #+0] \ 000004D0 020080E2 ADD R0,R0,#+2 \ 000004D4 020080E0 ADD R0,R0,R2 \ 000004D8 B000CDE1 STRH R0,[SP, #+0] 4217 4218 if(cl->unread_msg!=0)//кол-во не прочитанных \ 000004DC 88309AE5 LDR R3,[R10, #+136] \ 000004E0 000053E3 CMP R3,#+0 \ 000004E4 1F00000A BEQ ??DrawList_30 4219 { 4220 snprintf(clistm->s,32,_d,cl->unread_msg); \ 000004E8 4C0395E5 LDR R0,[R5, #+844] \ 000004EC FC249FE5 LDR R2,??DrawList_3+0x18 ;; Canvas + 11 \ 000004F0 2010A0E3 MOV R1,#+32 \ 000004F4 2C0080E2 ADD R0,R0,#+44 \ 000004F8 1B0100EF SWI +283 4221 DrawStr(clistm->s,rc.x,rc.y,rc.x2,rc.y2,0,ClFont,clrRed,0); \ 000004FC 0000A0E3 MOV R0,#+0 \ 00000500 01002DE9 PUSH {R0} \ 00000504 6000A0E3 MOV R0,#+96 \ 00000508 6C0D80E3 ORR R0,R0,#0x1B00 \ 0000050C 050080E0 ADD R0,R0,R5 \ 00000510 01002DE9 PUSH {R0} \ 00000514 0700A0E1 MOV R0,R7 \ 00000518 01002DE9 PUSH {R0} \ 0000051C 0400A0E1 MOV R0,R4 \ 00000520 01002DE9 PUSH {R0} \ 00000524 F601DDE1 LDRSH R0,[SP, #+22] \ 00000528 01002DE9 PUSH {R0} \ 0000052C F831DDE1 LDRSH R3,[SP, #+24] \ 00000530 F621DDE1 LDRSH R2,[SP, #+22] \ 00000534 F411DDE1 LDRSH R1,[SP, #+20] \ 00000538 4C0395E5 LDR R0,[R5, #+844] \ 0000053C 2C0080E2 ADD R0,R0,#+44 \ 00000540 ........ BL DrawStr 4222 rc.x += GetWidth(clistm->s,ClFont)+2; \ 00000544 4C0395E5 LDR R0,[R5, #+844] \ 00000548 0710A0E1 MOV R1,R7 \ 0000054C 2C0080E2 ADD R0,R0,#+44 \ 00000550 ........ BL GetWidth \ 00000554 F421DDE1 LDRSH R2,[SP, #+20] \ 00000558 020080E2 ADD R0,R0,#+2 \ 0000055C 020080E0 ADD R0,R0,R2 \ 00000560 B401CDE1 STRH R0,[SP, #+20] \ 00000564 14D08DE2 ADD SP,SP,#+20 \ ??DrawList_30: \ 00000568 0C009DE5 LDR R0,[SP, #+12] \ 0000056C 000050E3 CMP R0,#+0 \ 00000570 04309015 LDRNE R3,[R0, #+4] \ 00000574 00005313 CMPNE R3,#+0 \ 00000578 3200000A BEQ ??DrawList_31 \ 0000057C 08009DE5 LDR R0,[SP, #+8] \ 00000580 010050E3 CMP R0,#+1 \ 00000584 03005013 CMPNE R0,#+3 4223 } 4224 4225 //Рисуем кол-во отправленных или не доставленных сообщений 4226 if(ack && ack->count!=0 && (ShowProcessSend==1 || ShowProcessSend==3)) 4227 { 4228 if(!cl->isgroup && cl->state!=0xFFFF) \ 00000588 08009A05 LDREQ R0,[R10, #+8] \ 0000058C 00005003 CMPEQ R0,#+0 \ 00000590 2C00001A BNE ??DrawList_31 \ 00000594 B405DAE1 LDRH R0,[R10, #+84] \ 00000598 FF10A0E3 MOV R1,#+255 \ 0000059C FF1C81E3 ORR R1,R1,#0xFF00 \ 000005A0 010050E1 CMP R0,R1 \ 000005A4 2700000A BEQ ??DrawList_31 4229 { 4230 //тут пробел ставим если есть непрочитанные,чтобы не сливались непрочитанные и не отправленные 4231 snprintf(clistm->s,3, (cl->unread_msg ? "/%d" : _d),ack->count); \ 000005A8 88009AE5 LDR R0,[R10, #+136] \ 000005AC 0310A0E3 MOV R1,#+3 \ 000005B0 000050E3 CMP R0,#+0 \ 000005B4 4C0395E5 LDR R0,[R5, #+844] \ 000005B8 30249F05 LDREQ R2,??DrawList_3+0x18 ;; Canvas + 11 \ 000005BC 2C0080E2 ADD R0,R0,#+44 \ 000005C0 D72F8F12 ADRNE R2,??DrawList_32 ;; "/%d" \ 000005C4 1B0100EF SWI +283 4232 drawColor = (ack->type==SEND) ? ((char*)SendClr) : ((ack->type==NOTSEND)?((char*)UnAckedClr):0); \ 000005C8 0C009DE5 LDR R0,[SP, #+12] \ 000005CC 000090E5 LDR R0,[R0, #+0] \ 000005D0 010050E3 CMP R0,#+1 \ 000005D4 18B49F05 LDREQ R11,??DrawList_3+0x1C ;; SendClr \ 000005D8 0200000A BEQ ??DrawList_33 \ 000005DC 020050E3 CMP R0,#+2 \ 000005E0 10B49F05 LDREQ R11,??DrawList_3+0x20 ;; UnAckedClr \ 000005E4 00B0A013 MOVNE R11,#+0 4233 DrawStr(clistm->s,rc.x,rc.y, rc.x2,rc.y2,0,drawFont,drawColor,0); \ ??DrawList_33: \ 000005E8 0000A0E3 MOV R0,#+0 \ 000005EC 01002DE9 PUSH {R0} \ 000005F0 00082DE9 PUSH {R11} \ 000005F4 18009DE5 LDR R0,[SP, #+24] \ 000005F8 01002DE9 PUSH {R0} \ 000005FC 0400A0E1 MOV R0,R4 \ 00000600 01002DE9 PUSH {R0} \ 00000604 F601DDE1 LDRSH R0,[SP, #+22] \ 00000608 01002DE9 PUSH {R0} \ 0000060C F831DDE1 LDRSH R3,[SP, #+24] \ 00000610 F621DDE1 LDRSH R2,[SP, #+22] \ 00000614 F411DDE1 LDRSH R1,[SP, #+20] \ 00000618 4C0395E5 LDR R0,[R5, #+844] \ 0000061C 2C0080E2 ADD R0,R0,#+44 \ 00000620 ........ BL DrawStr 4234 rc.x += GetWidth(clistm->s,drawFont) + 2; \ 00000624 4C0395E5 LDR R0,[R5, #+844] \ 00000628 24109DE5 LDR R1,[SP, #+36] \ 0000062C 2C0080E2 ADD R0,R0,#+44 \ 00000630 ........ BL GetWidth \ 00000634 F421DDE1 LDRSH R2,[SP, #+20] \ 00000638 020080E2 ADD R0,R0,#+2 \ 0000063C 020080E0 ADD R0,R0,R2 \ 00000640 B401CDE1 STRH R0,[SP, #+20] \ 00000644 14D08DE2 ADD SP,SP,#+20 4235 } 4236 } 4237 4238 if( clistm->curitem + start_item == clistm->curpos )//Если наш итем то выделяем \ ??DrawList_31: \ 00000648 4C0395E5 LDR R0,[R5, #+844] \ 0000064C 14209DE5 LDR R2,[SP, #+20] \ 00000650 241090E5 LDR R1,[R0, #+36] \ 00000654 000090E5 LDR R0,[R0, #+0] \ 00000658 011082E0 ADD R1,R2,R1 \ 0000065C 000051E1 CMP R1,R0 \ 00000660 5100001A BNE ??DrawList_34 4239 { 4240 DrawRoundedFrame(rc.x-1,rc.y-1,rc.x2-1,rc.y2-1,0,0,0,ClCursorBordClr,ClCursorClr); \ 00000664 90039FE5 LDR R0,??DrawList_3+0x24 ;; ClCursorClr \ 00000668 01002DE9 PUSH {R0} \ 0000066C 8C039FE5 LDR R0,??DrawList_3+0x28 ;; ClCursorBordClr \ 00000670 01002DE9 PUSH {R0} \ 00000674 0000A0E3 MOV R0,#+0 \ 00000678 01002DE9 PUSH {R0} \ 0000067C 01002DE9 PUSH {R0} \ 00000680 01002DE9 PUSH {R0} \ 00000684 FA01DDE1 LDRSH R0,[SP, #+26] \ 00000688 013040E2 SUB R3,R0,#+1 \ 0000068C F801DDE1 LDRSH R0,[SP, #+24] \ 00000690 012040E2 SUB R2,R0,#+1 \ 00000694 F601DDE1 LDRSH R0,[SP, #+22] \ 00000698 011040E2 SUB R1,R0,#+1 \ 0000069C F401DDE1 LDRSH R0,[SP, #+20] \ 000006A0 010040E2 SUB R0,R0,#+1 \ 000006A4 500100EF SWI +336 4241 if(LINE_MODE && !cl->isgroup) \ 000006A8 34009DE5 LDR R0,[SP, #+52] \ 000006AC 14D08DE2 ADD SP,SP,#+20 \ 000006B0 000050E3 CMP R0,#+0 \ 000006B4 3400000A BEQ ??DrawList_35 \ 000006B8 08009AE5 LDR R0,[R10, #+8] \ 000006BC 000050E3 CMP R0,#+0 \ 000006C0 3100001A BNE ??DrawList_35 4242 { 4243 if ((cl->xtext && cl->xtext[0]!=0) && (cl->state!=0xFFFF)) \ 000006C4 7C109AE5 LDR R1,[R10, #+124] \ 000006C8 4C0395E5 LDR R0,[R5, #+844] \ 000006CC 000051E3 CMP R1,#+0 \ 000006D0 0010D115 LDRBNE R1,[R1, #+0] \ 000006D4 00005113 CMPNE R1,#+0 \ 000006D8 1000000A BEQ ??DrawList_36 \ 000006DC B415DAE1 LDRH R1,[R10, #+84] \ 000006E0 FF20A0E3 MOV R2,#+255 \ 000006E4 FF2C82E3 ORR R2,R2,#0xFF00 \ 000006E8 020051E1 CMP R1,R2 \ 000006EC 0B00000A BEQ ??DrawList_36 4244 { 4245 int i; 4246 zeromem(clistm->s,64); \ 000006F0 4010A0E3 MOV R1,#+64 \ 000006F4 2C0080E2 ADD R0,R0,#+44 \ 000006F8 1D0100EF SWI +285 4247 i=cl->xtext[0]; \ 000006FC 7C009AE5 LDR R0,[R10, #+124] \ 00000700 0020D0E5 LDRB R2,[R0, #+0] 4248 if (i>63) i=63; 4249 strncpy(clistm->s,cl->xtext+1,i); \ 00000704 011080E2 ADD R1,R0,#+1 \ 00000708 4C0395E5 LDR R0,[R5, #+844] \ 0000070C 400052E3 CMP R2,#+64 \ 00000710 3F20A0A3 MOVGE R2,#+63 \ 00000714 2C0080E2 ADD R0,R0,#+44 \ 00000718 160100EF SWI +278 \ 0000071C 040000EA B ??DrawList_37 4250 } 4251 else 4252 snprintf(clistm->s,64,percent_d,cl->uin); \ ??DrawList_36: \ 00000720 0C309AE5 LDR R3,[R10, #+12] \ 00000724 D8229FE5 LDR R2,??DrawList_3+0x2C ;; Canvas + 8 \ 00000728 4010A0E3 MOV R1,#+64 \ 0000072C 2C0080E2 ADD R0,R0,#+44 \ 00000730 1B0100EF SWI +283 4253 //вторая строчка 4254 DrawStr(clistm->s,rc.x+1,rc.y+font_y,rc.x2-rc.x-3,rc.y2+font_y,0,ClFont,(char*)CLDescriptClr,1); \ ??DrawList_37: \ 00000734 F000DDE1 LDRSH R0,[SP, #+0] \ 00000738 0110A0E3 MOV R1,#+1 \ 0000073C 02002DE9 PUSH {R1} \ 00000740 C0129FE5 LDR R1,??DrawList_3+0x30 ;; CLDescriptClr \ 00000744 02002DE9 PUSH {R1} \ 00000748 0710A0E1 MOV R1,R7 \ 0000074C 02002DE9 PUSH {R1} \ 00000750 0010A0E3 MOV R1,#+0 \ 00000754 02002DE9 PUSH {R1} \ 00000758 F611DDE1 LDRSH R1,[SP, #+22] \ 0000075C 011086E0 ADD R1,R6,R1 \ 00000760 02002DE9 PUSH {R1} \ 00000764 F811DDE1 LDRSH R1,[SP, #+24] \ 00000768 001041E0 SUB R1,R1,R0 \ 0000076C 033041E2 SUB R3,R1,#+3 \ 00000770 F611DDE1 LDRSH R1,[SP, #+22] \ 00000774 012086E0 ADD R2,R6,R1 \ 00000778 011080E2 ADD R1,R0,#+1 \ 0000077C 4C0395E5 LDR R0,[R5, #+844] \ 00000780 2C0080E2 ADD R0,R0,#+44 \ 00000784 ........ BL DrawStr \ 00000788 14D08DE2 ADD SP,SP,#+20 4255 } 4256 if(clistm->totalItems > 1) \ ??DrawList_35: \ 0000078C 4C0395E5 LDR R0,[R5, #+844] \ 00000790 081090E5 LDR R1,[R0, #+8] \ 00000794 020051E3 CMP R1,#+2 \ 00000798 0300003A BCC ??DrawList_34 4257 DrawScrollBar(clistm->curitem+clistm->startItem,clistm->totalItems); \ 0000079C 242090E5 LDR R2,[R0, #+36] \ 000007A0 140090E5 LDR R0,[R0, #+20] \ 000007A4 020080E0 ADD R0,R0,R2 \ 000007A8 ........ BL DrawScrollBar 4258 } 4259 4260 //рисуем хстатус 4261 if((cl->xstate!=0 && cl->state!=0xFFFF)/* && GetXIconByItem(cl->xstate)*/) \ ??DrawList_34: \ 000007AC B605DAE1 LDRH R0,[R10, #+86] \ 000007B0 000050E3 CMP R0,#+0 \ 000007B4 0C00000A BEQ ??DrawList_38 \ 000007B8 B415DAE1 LDRH R1,[R10, #+84] \ 000007BC FF20A0E3 MOV R2,#+255 \ 000007C0 FF2C82E3 ORR R2,R2,#0xFF00 \ 000007C4 020051E1 CMP R1,R2 \ 000007C8 0700000A BEQ ??DrawList_38 4262 { 4263 unsigned int i; 4264 i = DrwImage(GetXIconByItem(cl->xstate),rc.x,rc.y,RET_X); \ 000007CC ........ _BLF GetXIconByItem,??GetXIconByItem??rA \ 000007D0 F220DDE1 LDRSH R2,[SP, #+2] \ 000007D4 F010DDE1 LDRSH R1,[SP, #+0] \ 000007D8 0130A0E3 MOV R3,#+1 \ 000007DC ........ BL DrwImage 4265 rc.x += i ;//( i>32 ? 32 : i ); \ 000007E0 F020DDE1 LDRSH R2,[SP, #+0] \ 000007E4 020080E0 ADD R0,R0,R2 \ 000007E8 B000CDE1 STRH R0,[SP, #+0] 4266 // rc.x = DrwImage(GetXIconByItem(cl->xstate),rc.x,rc.y,RET_X); 4267 } 4268 4269 //Наш фонт,каким буим рисовать 4270 if(cl->isgroup) drawFont = ClBoldFont; //группы \ ??DrawList_38: \ 000007EC 08009AE5 LDR R0,[R10, #+8] \ 000007F0 000050E3 CMP R0,#+0 \ 000007F4 0300000A BEQ ??DrawList_39 \ ??DrawList_40: \ 000007F8 ........ LDR R1,??DataTable172 ;; ClBoldFont \ 000007FC 001091E5 LDR R1,[R1, #+0] \ 00000800 10108DE5 STR R1,[SP, #+16] \ 00000804 0C0000EA B ??DrawList_41 4271 else drawFont = ( (SelBoldActiveChat==1 && (cl->isactive && cl->state!=0xFFFF)) ? ClBoldFont : ClFont ); \ ??DrawList_39: \ 00000808 FC019FE5 LDR R0,??DrawList_3+0x34 ;; SelBoldActiveChat \ 0000080C 000090E5 LDR R0,[R0, #+0] \ 00000810 010050E3 CMP R0,#+1 \ 00000814 0700001A BNE ??DrawList_42 \ 00000818 74009AE5 LDR R0,[R10, #+116] \ 0000081C 000050E3 CMP R0,#+0 \ 00000820 0400000A BEQ ??DrawList_42 \ 00000824 B405DAE1 LDRH R0,[R10, #+84] \ 00000828 FF10A0E3 MOV R1,#+255 \ 0000082C FF1C81E3 ORR R1,R1,#0xFF00 \ 00000830 010050E1 CMP R0,R1 \ 00000834 EFFFFF1A BNE ??DrawList_40 \ ??DrawList_42: \ 00000838 10708DE5 STR R7,[SP, #+16] 4272 4273 if(ShowProcessSend==2 || ShowProcessSend==3) \ ??DrawList_41: \ 0000083C 08009DE5 LDR R0,[SP, #+8] \ 00000840 020050E3 CMP R0,#+2 \ 00000844 03005013 CMPNE R0,#+3 \ 00000848 2300001A BNE ??DrawList_43 4274 { 4275 if(ack && ack->type!=SENDED)//если есть не отправленные \ 0000084C 0C009DE5 LDR R0,[SP, #+12] \ 00000850 000050E3 CMP R0,#+0 \ 00000854 00009015 LDRNE R0,[R0, #+0] \ 00000858 00005013 CMPNE R0,#+0 \ 0000085C 1E00000A BEQ ??DrawList_43 4276 { 4277 drawColor = (ack->type==SEND) ? ((char*)SendClr) : ((ack->type==NOTSEND)?((char*)UnAckedClr):0); \ 00000860 010050E3 CMP R0,#+1 \ 00000864 88B19F05 LDREQ R11,??DrawList_3+0x1C ;; SendClr \ 00000868 0200000A BEQ ??DrawList_44 \ 0000086C 020050E3 CMP R0,#+2 \ 00000870 80B19F05 LDREQ R11,??DrawList_3+0x20 ;; UnAckedClr \ 00000874 00B0A013 MOVNE R11,#+0 4278 clistm->i = (VIEW_MODE) ? (rc.x2-1) : (rc.x+GetWidth(name, drawFont)+3);//если в одну колонку, расчитаем х2 для рисования линии по длинне имени \ ??DrawList_44: \ 00000878 000058E3 CMP R8,#+0 \ 0000087C F400DD11 LDRSHNE R0,[SP, #+4] \ 00000880 01104012 SUBNE R1,R0,#+1 \ 00000884 0500001A BNE ??DrawList_45 \ 00000888 10109DE5 LDR R1,[SP, #+16] \ 0000088C 0900A0E1 MOV R0,R9 \ 00000890 ........ BL GetWidth \ 00000894 F010DDE1 LDRSH R1,[SP, #+0] \ 00000898 000081E0 ADD R0,R1,R0 \ 0000089C 031080E2 ADD R1,R0,#+3 \ ??DrawList_45: \ 000008A0 4C0395E5 LDR R0,[R5, #+844] \ 000008A4 281080E5 STR R1,[R0, #+40] 4279 DrawRoundedFrame(rc.x,rc.y,clistm->i,rc.y2-2,0,0,0,0,drawColor); \ 000008A8 00082DE9 PUSH {R11} \ 000008AC 0010A0E3 MOV R1,#+0 \ 000008B0 02002DE9 PUSH {R1} \ 000008B4 02002DE9 PUSH {R1} \ 000008B8 02002DE9 PUSH {R1} \ 000008BC 02002DE9 PUSH {R1} \ 000008C0 282090E5 LDR R2,[R0, #+40] \ 000008C4 F401DDE1 LDRSH R0,[SP, #+20] \ 000008C8 FA11DDE1 LDRSH R1,[SP, #+26] \ 000008CC 023041E2 SUB R3,R1,#+2 \ 000008D0 F611DDE1 LDRSH R1,[SP, #+22] \ 000008D4 500100EF SWI +336 \ 000008D8 14D08DE2 ADD SP,SP,#+20 4280 } 4281 } 4282 4283 rc.x+=3; \ ??DrawList_43: \ 000008DC F010DDE1 LDRSH R1,[SP, #+0] \ 000008E0 031081E2 ADD R1,R1,#+3 \ 000008E4 B010CDE1 STRH R1,[SP, #+0] 4284 if(cl->isonline && cl->state!=0xFFFF && FIRST_START == 0)//если контакт тока подключился то мигаем \ 000008E8 8C009AE5 LDR R0,[R10, #+140] \ 000008EC 000050E3 CMP R0,#+0 \ 000008F0 0C00000A BEQ ??DrawList_46 \ 000008F4 B405DAE1 LDRH R0,[R10, #+84] \ 000008F8 FF10A0E3 MOV R1,#+255 \ 000008FC FF1C81E3 ORR R1,R1,#0xFF00 \ 00000900 010050E1 CMP R0,R1 \ 00000904 0700000A BEQ ??DrawList_46 \ 00000908 1C0495E5 LDR R0,[R5, #+1052] \ 0000090C 000050E3 CMP R0,#+0 \ 00000910 0400001A BNE ??DrawList_46 4285 DrawOnlineContact(&rc,cl); \ 00000914 0A10A0E1 MOV R1,R10 \ 00000918 0D00A0E1 MOV R0,SP \ 0000091C ........ BL DrawOnlineContact \ 00000920 1A0000EA B ??DrawList_9 \ ??DrawList_32: \ 00000924 2F256400 DC8 "/%d" 4286 else 4287 { 4288 // drawColor = (cl->isgroup) ? ((char*)GroupClr) : ((cl->isactive!=0)?((char*)ActiveClr):((char*)NotActiveClr)); 4289 if( clistm->curitem + start_item == clistm->curpos ) \ ??DrawList_46: \ 00000928 4C0395E5 LDR R0,[R5, #+844] \ 0000092C 14209DE5 LDR R2,[SP, #+20] \ 00000930 241090E5 LDR R1,[R0, #+36] \ 00000934 000090E5 LDR R0,[R0, #+0] \ 00000938 011082E0 ADD R1,R2,R1 \ 0000093C 000051E1 CMP R1,R0 4290 drawColor = (char*)CLColorSelCont; \ 00000940 C8B09F05 LDREQ R11,??DrawList_3+0x38 ;; CLColorSelCont \ 00000944 0200000A BEQ ??DrawList_47 4291 else 4292 drawColor = GetColor(cl); \ 00000948 0A00A0E1 MOV R0,R10 \ 0000094C ........ BL GetColor \ 00000950 00B0A0E1 MOV R11,R0 4293 DrawStr(name, rc.x, rc.y, rc.x2, rc.y2, 0, drawFont, drawColor, 1); \ ??DrawList_47: \ 00000954 0100A0E3 MOV R0,#+1 \ 00000958 01002DE9 PUSH {R0} \ 0000095C 00082DE9 PUSH {R11} \ 00000960 18009DE5 LDR R0,[SP, #+24] \ 00000964 01002DE9 PUSH {R0} \ 00000968 0000A0E3 MOV R0,#+0 \ 0000096C 01002DE9 PUSH {R0} \ 00000970 F601DDE1 LDRSH R0,[SP, #+22] \ 00000974 01002DE9 PUSH {R0} \ 00000978 F831DDE1 LDRSH R3,[SP, #+24] \ 0000097C F621DDE1 LDRSH R2,[SP, #+22] \ 00000980 F411DDE1 LDRSH R1,[SP, #+20] \ 00000984 0900A0E1 MOV R0,R9 \ 00000988 ........ BL DrawStr \ 0000098C 14D08DE2 ADD SP,SP,#+20 4294 } 4295 }//if(cl) 4296 }//if( i>=(clistm->curpage-1)*clistm->itemFromDisp ) 4297 4298 //Если рисуем больше чем нужно 4299 if( (clistm->curitem > clistm->itemFromDisp*(clistm->curpage)) && (VIEW_MODE) ) break; \ ??DrawList_9: \ 00000990 4C0395E5 LDR R0,[R5, #+844] \ 00000994 042090E5 LDR R2,[R0, #+4] \ 00000998 0C3090E5 LDR R3,[R0, #+12] \ 0000099C 241090E5 LDR R1,[R0, #+36] \ 000009A0 930202E0 MUL R2,R3,R2 \ 000009A4 010052E1 CMP R2,R1 \ 000009A8 0100002A BCS ??DrawList_48 \ 000009AC 000058E3 CMP R8,#+0 \ 000009B0 0400001A BNE ??DrawList_7 4300 // if( clistm->i > clistm->itemFromDisp*((VIEW_MODE!=0)?(clistm->curpage):(1)) ) break; 4301 }//for(...) \ ??DrawList_48: \ 000009B4 011081E2 ADD R1,R1,#+1 \ 000009B8 241080E5 STR R1,[R0, #+36] \ 000009BC 000058E3 CMP R8,#+0 \ 000009C0 F6FDFF1A BNE ??DrawList_12 \ 000009C4 D1FDFFEA B ??DrawList_5 4302 mfree(name); \ ??DrawList_7: \ 000009C8 0900A0E1 MOV R0,R9 \ 000009CC 150000EF SWI +21 4303 } \ ??DrawList_0: \ 000009D0 30D08DE2 ADD SP,SP,#+48 ;; stack cleaning \ 000009D4 F08FBDE8 POP {R4-R11,PC} ;; return \ ??DrawList_3: \ 000009D8 ........ DC32 LINE_MODE \ 000009DC ........ DC32 ShowProcessSend \ 000009E0 ........ DC32 Canvas + 14 \ 000009E4 ........ DC32 Canvas + 420 \ 000009E8 ........ DC32 Canvas + 428 \ 000009EC ........ DC32 BlinkIconByOnline \ 000009F0 ........ DC32 Canvas + 11 \ 000009F4 ........ DC32 SendClr \ 000009F8 ........ DC32 UnAckedClr \ 000009FC ........ DC32 ClCursorClr \ 00000A00 ........ DC32 ClCursorBordClr \ 00000A04 ........ DC32 Canvas + 8 \ 00000A08 ........ DC32 CLDescriptClr \ 00000A0C ........ DC32 SelBoldActiveChat \ 00000A10 ........ DC32 CLColorSelCont 4304 4305 4306 /************** Управление курсором *****************/ 4307 4308 /* 4309 * Функция: GotoFirstPosition 4310 * Описание: Переход на первую позицию 4311 * Параметры: Никаких 4312 * Возвращаемое значение: Ничего не возвращает 4313 */ \ In segment CODE, align 4, keep-with-next 4314 void GotoFirstPosition() 4315 { \ GotoFirstPosition: \ 00000000 ........ LDR R0,??DataTable179 ;; popup + 844 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 000090E5 LDR R0,[R0, #+0] 4316 clistm->startItem = 0; 4317 clistm->curpage = 1; \ 0000000C 0120A0E3 MOV R2,#+1 \ 00000010 141080E5 STR R1,[R0, #+20] \ 00000014 0C2080E5 STR R2,[R0, #+12] 4318 clistm->curpos = 0; \ 00000018 001080E5 STR R1,[R0, #+0] 4319 } \ 0000001C 1EFF2FE1 BX LR ;; return 4320 4321 4322 /* 4323 * Функция: SetVisibleScreen 4324 * Описание: Бегаем за курсором, чтоб экран не уходил ни куда 4325 * Параметры: Никаких 4326 * Возвращаемое значение: Ничего не возвращает 4327 */ \ In segment CODE, align 4, keep-with-next 4328 void SetVisibleScreen() 4329 { 4330 int *curpos = &clistm->curpos; 4331 unsigned int *itemFromDisp = &clistm->itemFromDisp; 4332 unsigned int *curpage = &clistm->curpage; 4333 unsigned int *totalItems = &clistm->totalItems; 4334 unsigned int *startItems = &clistm->startItem; 4335 4336 if(VIEW_MODE)//в 2 столбца \ SetVisibleScreen: \ 00000000 ........ LDR R1,??DataTable174 ;; VIEW_MODE \ 00000004 F0432DE9 PUSH {R4-R9,LR} \ 00000008 ........ LDR R4,??DataTable175 ;; popup \ 0000000C 001091E5 LDR R1,[R1, #+0] \ 00000010 4C8394E5 LDR R8,[R4, #+844] \ 00000014 0170A0E3 MOV R7,#+1 \ 00000018 045088E2 ADD R5,R8,#+4 \ 0000001C 0C0088E2 ADD R0,R8,#+12 \ 00000020 086088E2 ADD R6,R8,#+8 \ 00000024 149088E2 ADD R9,R8,#+20 \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 001095E5 LDR R1,[R5, #+0] \ 00000030 2500000A BEQ ??SetVisibleScreen_0 4337 { 4338 if(*curpos > *itemFromDisp)//если курсор не на первой странице,то ищем нашу страницу \ 00000034 002098E5 LDR R2,[R8, #+0] \ 00000038 020051E1 CMP R1,R2 \ 0000003C 0C00002A BCS ??SetVisibleScreen_1 4339 { 4340 int i = 1; 4341 int j = *curpos; 4342 if(*itemFromDisp == *totalItems)//та мало ли =) можт кто-то отключился \ 00000040 009096E5 LDR R9,[R6, #+0] \ 00000044 0130A0E3 MOV R3,#+1 \ 00000048 090051E1 CMP R1,R9 \ 0000004C 0400001A BNE ??SetVisibleScreen_2 4343 *curpage = 1; \ 00000050 007080E5 STR R7,[R0, #+0] \ 00000054 0B0000EA B ??SetVisibleScreen_3 4344 else 4345 { 4346 while(j > *itemFromDisp)//пока j больше кол-ва итемов на одной странице 4347 { 4348 j -= *itemFromDisp; \ ??SetVisibleScreen_4: \ 00000058 012042E0 SUB R2,R2,R1 4349 i++;//номер страницы \ 0000005C 013083E2 ADD R3,R3,#+1 4350 RefreshCL(); \ 00000060 607384E5 STR R7,[R4, #+864] 4351 } \ ??SetVisibleScreen_2: \ 00000064 020051E1 CMP R1,R2 \ 00000068 FAFFFF3A BCC ??SetVisibleScreen_4 4352 *curpage = i; \ 0000006C 003080E5 STR R3,[R0, #+0] \ 00000070 010000EA B ??SetVisibleScreen_5 4353 } 4354 } 4355 else 4356 { 4357 *curpage = 1; \ ??SetVisibleScreen_1: \ 00000074 007080E5 STR R7,[R0, #+0] 4358 RefreshCL(); \ 00000078 607384E5 STR R7,[R4, #+864] 4359 } 4360 4361 if(*curpage == 1 && *itemFromDisp != *totalItems) \ ??SetVisibleScreen_5: \ 0000007C 000090E5 LDR R0,[R0, #+0] \ 00000080 010050E3 CMP R0,#+1 \ 00000084 2C00001A BNE ??SetVisibleScreen_6 \ ??SetVisibleScreen_3: \ 00000088 0100A0E1 MOV R0,R1 \ 0000008C 001096E5 LDR R1,[R6, #+0] \ 00000090 010050E1 CMP R0,R1 \ 00000094 2800000A BEQ ??SetVisibleScreen_6 4362 { 4363 //если курсор убежал далеко за предел страницы, то попробуем вернуть его 4364 if(*curpos > *itemFromDisp) \ 00000098 001098E5 LDR R1,[R8, #+0] \ 0000009C 010050E1 CMP R0,R1 \ 000000A0 2500002A BCS ??SetVisibleScreen_6 4365 { 4366 while(*curpos > *itemFromDisp && *curpos > 0) \ ??SetVisibleScreen_7: \ 000000A4 000095E5 LDR R0,[R5, #+0] \ 000000A8 001098E5 LDR R1,[R8, #+0] \ 000000AC 010050E1 CMP R0,R1 \ 000000B0 2100002A BCS ??SetVisibleScreen_6 \ 000000B4 010051E3 CMP R1,#+1 \ 000000B8 1F0000BA BLT ??SetVisibleScreen_6 4367 { 4368 *curpos -= *itemFromDisp; \ 000000BC 000041E0 SUB R0,R1,R0 \ 000000C0 000088E5 STR R0,[R8, #+0] 4369 RefreshCL(); \ 000000C4 607384E5 STR R7,[R4, #+864] \ 000000C8 F5FFFFEA B ??SetVisibleScreen_7 4370 } 4371 } 4372 } 4373 } 4374 else // в один столбец 4375 { 4376 //если одна страница и курсор как то оказался на второй странице то ищем startItem, 4377 if( ((*totalItems - *itemFromDisp) <= 0) && (*curpos > *itemFromDisp)) \ ??SetVisibleScreen_0: \ 000000CC 000096E5 LDR R0,[R6, #+0] \ 000000D0 010050E0 SUBS R0,R0,R1 \ 000000D4 1800001A BNE ??SetVisibleScreen_6 \ 000000D8 000098E5 LDR R0,[R8, #+0] \ 000000DC 000051E1 CMP R1,R0 \ 000000E0 1500002A BCS ??SetVisibleScreen_6 4378 { 4379 unsigned int start = (sdiv(2,*itemFromDisp)+1) > 5 ? (sdiv(2,*itemFromDisp)+1) : (5); \ 000000E4 0200A0E3 MOV R0,#+2 \ 000000E8 B80000EF SWI +184 \ 000000EC 010080E2 ADD R0,R0,#+1 \ 000000F0 060050E3 CMP R0,#+6 \ 000000F4 040000BA BLT ??SetVisibleScreen_8 \ 000000F8 001095E5 LDR R1,[R5, #+0] \ 000000FC 0200A0E3 MOV R0,#+2 \ 00000100 B80000EF SWI +184 \ 00000104 010080E2 ADD R0,R0,#+1 \ 00000108 000000EA B ??SetVisibleScreen_9 \ ??SetVisibleScreen_8: \ 0000010C 0500A0E3 MOV R0,#+5 4380 4381 if(*curpos > start && *curpos < *totalItems - *itemFromDisp) \ ??SetVisibleScreen_9: \ 00000110 001096E5 LDR R1,[R6, #+0] \ 00000114 002095E5 LDR R2,[R5, #+0] \ 00000118 021041E0 SUB R1,R1,R2 \ 0000011C 002098E5 LDR R2,[R8, #+0] \ 00000120 020050E1 CMP R0,R2 \ 00000124 01005231 CMPCC R2,R1 4382 *startItems = *curpos - start; \ 00000128 00004230 SUBCC R0,R2,R0 \ 0000012C 00008935 STRCC R0,[R9, #+0] \ 00000130 0100003A BCC ??SetVisibleScreen_6 4383 else 4384 if(*curpos > *totalItems - *itemFromDisp) \ 00000134 020051E1 CMP R1,R2 4385 *startItems = *totalItems - *itemFromDisp; \ 00000138 00108935 STRCC R1,[R9, #+0] 4386 } 4387 } 4388 RefreshCL(); \ ??SetVisibleScreen_6: \ 0000013C 607384E5 STR R7,[R4, #+864] 4389 } \ 00000140 F083BDE8 POP {R4-R9,PC} ;; return 4390 4391 4392 4393 /* 4394 * Функция: MoveUpOneColumn 4395 * Описание: Перемещение курсора вверх, в режиме одного столбика 4396 * Параметры: int i - переход на указанное число позиций 4397 * Возвращаемое значение: Ничего не возвращает 4398 */ \ In segment CODE, align 4, keep-with-next 4399 void MoveUpOneCollumn(int i) 4400 { \ MoveUpOneCollumn: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 ........ LDR R0,??DataTable179 ;; popup + 844 \ 0000000C 008090E5 LDR R8,[R0, #+0] 4401 unsigned int *itemFromDisp = &clistm->itemFromDisp; 4402 unsigned int *totalItems = &clistm->totalItems; 4403 unsigned int *startItem = &clistm->startItem; 4404 int *curpos = &clistm->curpos; 4405 4406 //стартовый элемент, чтобы список прокручивался по мере передвижения 4407 int start = (sdiv(2,*itemFromDisp)+1) > 5 ? (sdiv(2,*itemFromDisp)+1) : (5); \ 00000010 0200A0E3 MOV R0,#+2 \ 00000014 045088E2 ADD R5,R8,#+4 \ 00000018 001095E5 LDR R1,[R5, #+0] \ 0000001C 086088E2 ADD R6,R8,#+8 \ 00000020 147088E2 ADD R7,R8,#+20 \ 00000024 B80000EF SWI +184 \ 00000028 010080E2 ADD R0,R0,#+1 \ 0000002C 060050E3 CMP R0,#+6 \ 00000030 040000BA BLT ??MoveUpOneCollumn_0 \ 00000034 001095E5 LDR R1,[R5, #+0] \ 00000038 0200A0E3 MOV R0,#+2 \ 0000003C B80000EF SWI +184 \ 00000040 011080E2 ADD R1,R0,#+1 \ 00000044 000000EA B ??MoveUpOneCollumn_1 \ ??MoveUpOneCollumn_0: \ 00000048 0510A0E3 MOV R1,#+5 4408 4409 if( (*curpos > *itemFromDisp + 2) && (*totalItems!=*itemFromDisp) )//если дальше чем контактов на экране \ ??MoveUpOneCollumn_1: \ 0000004C 003095E5 LDR R3,[R5, #+0] \ 00000050 00C098E5 LDR R12,[R8, #+0] \ 00000054 0000A0E3 MOV R0,#+0 \ 00000058 04204CE0 SUB R2,R12,R4 \ 0000005C 02E083E2 ADD LR,R3,#+2 \ 00000060 0C005EE1 CMP LR,R12 \ 00000064 0E00002A BCS ??MoveUpOneCollumn_2 \ 00000068 00E096E5 LDR LR,[R6, #+0] \ 0000006C 03005EE1 CMP LR,R3 \ 00000070 0B00000A BEQ ??MoveUpOneCollumn_2 4410 { 4411 *curpos -= i; \ 00000074 002088E5 STR R2,[R8, #+0] 4412 if(*startItem > 0 && *curpos > start && (*curpos < *totalItems - start)) *startItem -= i;//переменную смещения тоже вычитаем \ 00000078 003097E5 LDR R3,[R7, #+0] \ 0000007C 000053E3 CMP R3,#+0 \ 00000080 1600000A BEQ ??MoveUpOneCollumn_3 \ 00000084 020051E1 CMP R1,R2 \ 00000088 140000AA BGE ??MoveUpOneCollumn_3 \ 0000008C 01104EE0 SUB R1,LR,R1 \ 00000090 010052E1 CMP R2,R1 \ 00000094 1100002A BCS ??MoveUpOneCollumn_3 \ ??MoveUpOneCollumn_4: \ 00000098 041043E0 SUB R1,R3,R4 \ 0000009C 001087E5 STR R1,[R7, #+0] \ 000000A0 0E0000EA B ??MoveUpOneCollumn_3 4413 } 4414 else 4415 if(*curpos > 0)//первый экран с контактами \ ??MoveUpOneCollumn_2: \ 000000A4 01005CE3 CMP R12,#+1 \ 000000A8 0C0000BA BLT ??MoveUpOneCollumn_3 4416 { 4417 *curpos -= i; \ 000000AC 002088E5 STR R2,[R8, #+0] 4418 if(*startItem > 0 && *curpos > start && *totalItems != *itemFromDisp) *startItem -= i;//переменная смещения отнимаем до стартового значения смещения \ 000000B0 003097E5 LDR R3,[R7, #+0] \ 000000B4 000053E3 CMP R3,#+0 \ 000000B8 0600000A BEQ ??MoveUpOneCollumn_5 \ 000000BC 020051E1 CMP R1,R2 \ 000000C0 040000AA BGE ??MoveUpOneCollumn_5 \ 000000C4 001096E5 LDR R1,[R6, #+0] \ 000000C8 002095E5 LDR R2,[R5, #+0] \ 000000CC 020051E1 CMP R1,R2 \ 000000D0 0200000A BEQ ??MoveUpOneCollumn_3 \ 000000D4 EFFFFFEA B ??MoveUpOneCollumn_4 4419 else if(*curpos < start) *startItem = 0; //дошли до предела, обнуляемся \ ??MoveUpOneCollumn_5: \ 000000D8 010052E1 CMP R2,R1 \ 000000DC 000087B5 STRLT R0,[R7, #+0] 4420 } 4421 /* else 4422 { 4423 *curpos = *totalItems-1;//переход на последний контакт 4424 if((*totalItems - *itemFromDisp) <= 0) *startItem=0; //если одна страница 4425 else *startItem = *totalItems - *itemFromDisp; 4426 }*/ 4427 4428 //может за грань дозволенного выскачили? 4429 if(*curpos < 0) \ ??MoveUpOneCollumn_3: \ 000000E0 001098E5 LDR R1,[R8, #+0] \ 000000E4 000051E3 CMP R1,#+0 \ 000000E8 F081BD58 POPPL {R4-R8,PC} 4430 { 4431 //тогда идем на последний контакт 4432 *curpos = *totalItems-1; \ 000000EC 001096E5 LDR R1,[R6, #+0] \ 000000F0 011041E2 SUB R1,R1,#+1 \ 000000F4 001088E5 STR R1,[R8, #+0] 4433 if((*totalItems - *itemFromDisp) <= 0) *startItem = 0; //если одна страница, то смещение не нужно \ 000000F8 001096E5 LDR R1,[R6, #+0] \ 000000FC 002095E5 LDR R2,[R5, #+0] \ 00000100 021051E0 SUBS R1,R1,R2 \ 00000104 00008705 STREQ R0,[R7, #+0] \ 00000108 F081BD08 POPEQ {R4-R8,PC} 4434 else *startItem = *totalItems - *itemFromDisp; \ 0000010C 001087E5 STR R1,[R7, #+0] 4435 } 4436 } \ 00000110 F081BDE8 POP {R4-R8,PC} ;; return 4437 4438 4439 /* 4440 * Функция: MoveDownOneColumn 4441 * Описание: Перемещение курсора вниз, в режиме одного столбика 4442 * Параметры: int i - переход на указанное число позиций 4443 * Возвращаемое значение: Ничего не возвращает 4444 */ \ In segment CODE, align 4, keep-with-next 4445 void MoveDownOneCollumn(int i) 4446 { \ MoveDownOneCollumn: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 ........ LDR R0,??DataTable179 ;; popup + 844 \ 0000000C 007090E5 LDR R7,[R0, #+0] 4447 int *curpos = &clistm->curpos; 4448 unsigned int *itemFromDisp = &clistm->itemFromDisp; 4449 unsigned int *totalItems = &clistm->totalItems; 4450 unsigned int *startItem = &clistm->startItem; 4451 4452 int start = (sdiv(2,*itemFromDisp)+1) > 5 ? (sdiv(2,*itemFromDisp)+1) : (5);//*itemFromDisp/2+1; \ 00000010 0200A0E3 MOV R0,#+2 \ 00000014 048087E2 ADD R8,R7,#+4 \ 00000018 001098E5 LDR R1,[R8, #+0] \ 0000001C 085087E2 ADD R5,R7,#+8 \ 00000020 146087E2 ADD R6,R7,#+20 \ 00000024 B80000EF SWI +184 \ 00000028 010080E2 ADD R0,R0,#+1 \ 0000002C 060050E3 CMP R0,#+6 \ 00000030 040000BA BLT ??MoveDownOneCollumn_0 \ 00000034 001098E5 LDR R1,[R8, #+0] \ 00000038 0200A0E3 MOV R0,#+2 \ 0000003C B80000EF SWI +184 \ 00000040 011080E2 ADD R1,R0,#+1 \ 00000044 000000EA B ??MoveDownOneCollumn_1 \ ??MoveDownOneCollumn_0: \ 00000048 0510A0E3 MOV R1,#+5 4453 //if(start==0) *startItem=0; 4454 4455 if( *curpos < start && *totalItems!=*itemFromDisp ) \ ??MoveDownOneCollumn_1: \ 0000004C 002098E5 LDR R2,[R8, #+0] \ 00000050 008097E5 LDR R8,[R7, #+0] \ 00000054 003095E5 LDR R3,[R5, #+0] \ 00000058 0000A0E3 MOV R0,#+0 \ 0000005C 010058E1 CMP R8,R1 \ 00000060 040000AA BGE ??MoveDownOneCollumn_2 \ 00000064 020053E1 CMP R3,R2 \ 00000068 0200000A BEQ ??MoveDownOneCollumn_2 4456 { 4457 *curpos += i; \ ??MoveDownOneCollumn_3: \ 0000006C 081084E0 ADD R1,R4,R8 \ 00000070 001087E5 STR R1,[R7, #+0] \ 00000074 0C0000EA B ??MoveDownOneCollumn_4 4458 } 4459 else 4460 if( *curpos < *totalItems - 1 ) \ ??MoveDownOneCollumn_2: \ 00000078 011043E2 SUB R1,R3,#+1 \ 0000007C 010058E1 CMP R8,R1 \ 00000080 0700002A BCS ??MoveDownOneCollumn_5 4461 { 4462 if( *totalItems - *itemFromDisp > 0 ) \ 00000084 021053E0 SUBS R1,R3,R2 \ 00000088 F7FFFF0A BEQ ??MoveDownOneCollumn_3 4463 { 4464 if(*startItem < (*totalItems - *itemFromDisp)) *startItem+=i; \ 0000008C 002096E5 LDR R2,[R6, #+0] \ 00000090 010052E1 CMP R2,R1 \ 00000094 F4FFFF2A BCS ??MoveDownOneCollumn_3 \ 00000098 021084E0 ADD R1,R4,R2 \ 0000009C 001086E5 STR R1,[R6, #+0] \ 000000A0 F1FFFFEA B ??MoveDownOneCollumn_3 4465 } 4466 *curpos+=i; 4467 } 4468 else 4469 { 4470 *curpos=0; \ ??MoveDownOneCollumn_5: \ 000000A4 000087E5 STR R0,[R7, #+0] 4471 *startItem=0; \ 000000A8 000086E5 STR R0,[R6, #+0] 4472 } 4473 4474 //может за грань дозволенного выскачили? 4475 if(*curpos >= *totalItems){ *curpos = 0; *startItem = 0; } \ ??MoveDownOneCollumn_4: \ 000000AC 001097E5 LDR R1,[R7, #+0] \ 000000B0 030051E1 CMP R1,R3 \ 000000B4 00008725 STRCS R0,[R7, #+0] \ 000000B8 00008625 STRCS R0,[R6, #+0] 4476 } \ 000000BC F081BDE8 POP {R4-R8,PC} ;; return 4477 4478 /* 4479 * Функция: MoveUpTwoColumn 4480 * Описание: Перемещение курсора вверх в режиме два столбца 4481 * Параметры: int i - перемещение на указанное кол-во позиций 4482 * Возвращаемое значение: Ничего не возвращает 4483 */ \ In segment CODE, align 4, keep-with-next 4484 void MoveUpTwoCollumn(int i) 4485 { \ MoveUpTwoCollumn: \ 00000000 ........ LDR R1,??DataTable179 ;; popup + 844 \ 00000004 001091E5 LDR R1,[R1, #+0] \ 00000008 042091E5 LDR R2,[R1, #+4] \ 0000000C 000052E3 CMP R2,#+0 \ 00000010 1EFF2F01 BXEQ LR 4486 if(!clistm->itemFromDisp)return; 4487 4488 clistm->curpos -= i; \ 00000014 002091E5 LDR R2,[R1, #+0] \ 00000018 000052E0 SUBS R0,R2,R0 \ 0000001C 000081E5 STR R0,[R1, #+0] 4489 4490 if(clistm->curpos < 0) 4491 { 4492 clistm->curpos = clistm->totalItems - 1;//на последний \ 00000020 08009145 LDRMI R0,[R1, #+8] \ 00000024 01004042 SUBMI R0,R0,#+1 \ 00000028 00008145 STRMI R0,[R1, #+0] \ 0000002C 1EFF2FE1 BX LR ;; return 4493 /* 4494 if(clistm->itemFromDisp == clistm->totalItems)//если кол-во контактов на экране равно общему количеству контактов 4495 clistm->curpage = 1;//не меняем страницу 4496 else 4497 clistm->curpage = sdiv(clistm->itemFromDisp,clistm->totalItems)+1;//иначе на последнюю страницу 4498 */ 4499 } 4500 /* else 4501 { 4502 // if(clistm->curpos < (clistm->curpage-1)*(clistm->itemFromDisp)){ clistm->curpos+=1; clistm->curpage--; } 4503 }*/ 4504 } 4505 4506 /* 4507 * Функция: MoveDownTwoColumn 4508 * Описание: Перемещение курсора вниз в режиме два столбца 4509 * Параметры: int i - перемещение на указанное кол-во позиций 4510 * Возвращаемое значение: Ничего не возвращает 4511 */ \ In segment CODE, align 4, keep-with-next 4512 void MoveDownTwoCollumn(int i) 4513 { \ MoveDownTwoCollumn: \ 00000000 ........ LDR R1,??DataTable179 ;; popup + 844 \ 00000004 10002DE9 PUSH {R4} \ 00000008 001091E5 LDR R1,[R1, #+0] \ 0000000C 082091E5 LDR R2,[R1, #+8] \ 00000010 000052E3 CMP R2,#+0 \ 00000014 1300000A BEQ ??MoveDownTwoCollumn_0 4514 if(!clistm->totalItems) return; 4515 clistm->curpos += i; \ 00000018 003091E5 LDR R3,[R1, #+0] \ 0000001C 033080E0 ADD R3,R0,R3 \ 00000020 003081E5 STR R3,[R1, #+0] 4516 4517 4518 //Если курсор вышел за пределы, то на первую позицию 4519 if(clistm->curpos >= clistm->totalItems) { clistm->curpos = 0; clistm->curpage=1; } \ 00000024 020053E1 CMP R3,R2 \ 00000028 0300003A BCC ??MoveDownTwoCollumn_1 \ 0000002C 0020A0E3 MOV R2,#+0 \ 00000030 002081E5 STR R2,[R1, #+0] \ 00000034 0120A0E3 MOV R2,#+1 \ 00000038 0C2081E5 STR R2,[R1, #+12] 4520 4521 //смотрим убежал курсор на след. экран или нет 4522 if(clistm->curpos >= clistm->curpage*(clistm->itemFromDisp + i)) { clistm->curpos -= i; clistm->curpage++; } \ ??MoveDownTwoCollumn_1: \ 0000003C 0C2091E5 LDR R2,[R1, #+12] \ 00000040 04C091E5 LDR R12,[R1, #+4] \ 00000044 003091E5 LDR R3,[R1, #+0] \ 00000048 0CC080E0 ADD R12,R0,R12 \ 0000004C 9C0204E0 MUL R4,R12,R2 \ 00000050 040053E1 CMP R3,R4 \ 00000054 0300003A BCC ??MoveDownTwoCollumn_0 \ 00000058 000043E0 SUB R0,R3,R0 \ 0000005C 000081E5 STR R0,[R1, #+0] \ 00000060 010082E2 ADD R0,R2,#+1 \ 00000064 0C0081E5 STR R0,[R1, #+12] \ ??MoveDownTwoCollumn_0: \ 00000068 1000BDE8 POP {R4} \ 0000006C 1EFF2FE1 BX LR ;; return 4523 //if(clistm->curpos >= clistm->curpage*(clistm->itemFromDisp+(i?1:0))) { clistm->curpos-=(i?1:0); clistm->curpage++; } 4524 } 4525 4526 4527 //------------------------------------------ 4528 4529 /* 4530 * Функция: PrintMessage 4531 * Описание: Вывод всплывающего сообщения в контакт листе, текст находится в буфере prmsg 4532 * Параметры: Никаких 4533 * Возвращаемое значение: Ничего не возвращает 4534 */ \ In segment CODE, align 4, keep-with-next 4535 void PrintMess() 4536 { \ PrintMess: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 4537 int Font = FONT_MEDIUM_BOLD; 4538 int len = GetWidth(prmsg,Font); \ 00000004 ........ LDR R5,??DataTable200 ;; popup \ 00000008 E840A0E3 MOV R4,#+232 \ 0000000C 504E84E3 ORR R4,R4,#0x500 \ 00000010 0310A0E3 MOV R1,#+3 \ 00000014 050084E0 ADD R0,R4,R5 \ 00000018 ........ BL GetWidth \ 0000001C 0060A0E1 MOV R6,R0 4539 int nlines = (len > (ScreenW()-10)) ? sdiv((ScreenW()-10),len) : (1); \ 00000020 888100EF SWI +33160 \ 00000024 0A0040E2 SUB R0,R0,#+10 \ 00000028 060050E1 CMP R0,R6 \ 0000002C 050000AA BGE ??PrintMess_0 \ 00000030 888100EF SWI +33160 \ 00000034 0610A0E1 MOV R1,R6 \ 00000038 0A0040E2 SUB R0,R0,#+10 \ 0000003C B80000EF SWI +184 \ 00000040 0060A0E1 MOV R6,R0 \ 00000044 000000EA B ??PrintMess_1 \ ??PrintMess_0: \ 00000048 0160A0E3 MOV R6,#+1 4540 4541 for(int i=0 ; i1) ? 2 : 1)) ); \ 000000AC 898100EF SWI +33161 \ 000000B0 0090A0E1 MOV R9,R0 \ 000000B4 0300A0E3 MOV R0,#+3 \ 000000B8 C50100EF SWI +453 \ 000000BC 0080A0E1 MOV R8,R0 \ 000000C0 0710A0E1 MOV R1,R7 \ 000000C4 0200A0E3 MOV R0,#+2 \ 000000C8 B80000EF SWI +184 \ 000000CC 020057E3 CMP R7,#+2 \ 000000D0 0210A0A3 MOVGE R1,#+2 \ 000000D4 0110A0B3 MOVLT R1,#+1 \ 000000D8 000081E0 ADD R0,R1,R0 \ 000000DC 900801E0 MUL R1,R0,R8 \ 000000E0 A92F89E0 ADD R2,R9,R9, LSR #+31 \ 000000E4 C27081E0 ADD R7,R1,R2, ASR #+1 4551 4552 DrawRoundedFrame(0,y,ScreenW()-5,y2,0,0,0,clrWhite,"\x00\x00\x00\x40"); \ 000000E8 888100EF SWI +33160 \ 000000EC 5C10A0E3 MOV R1,#+92 \ 000000F0 6C1D81E3 ORR R1,R1,#0x1B00 \ 000000F4 058081E0 ADD R8,R1,R5 \ 000000F8 78109FE5 LDR R1,??PrintMess_4 ;; `?` \ 000000FC 0730A0E1 MOV R3,R7 \ 00000100 02002DE9 PUSH {R1} \ 00000104 052040E2 SUB R2,R0,#+5 \ 00000108 0000A0E3 MOV R0,#+0 \ 0000010C 0810A0E1 MOV R1,R8 \ 00000110 02002DE9 PUSH {R1} \ 00000114 0010A0E3 MOV R1,#+0 \ 00000118 02002DE9 PUSH {R1} \ 0000011C 02002DE9 PUSH {R1} \ 00000120 02002DE9 PUSH {R1} \ 00000124 0610A0E1 MOV R1,R6 \ 00000128 500100EF SWI +336 4553 DrawStr(prmsg,5,y+FontH(Font),ScreenW()-5,y2,TEXT_ALIGNMIDDLE,Font,clrWhite,0); \ 0000012C 888100EF SWI +33160 \ 00000130 0090A0E1 MOV R9,R0 \ 00000134 0300A0E3 MOV R0,#+3 \ 00000138 C50100EF SWI +453 \ 0000013C 0010A0E3 MOV R1,#+0 \ 00000140 02002DE9 PUSH {R1} \ 00000144 00012DE9 PUSH {R8} \ 00000148 053049E2 SUB R3,R9,#+5 \ 0000014C 0310A0E3 MOV R1,#+3 \ 00000150 02002DE9 PUSH {R1} \ 00000154 062080E0 ADD R2,R0,R6 \ 00000158 050084E0 ADD R0,R4,R5 \ 0000015C 0210A0E3 MOV R1,#+2 \ 00000160 02002DE9 PUSH {R1} \ 00000164 80002DE9 PUSH {R7} \ 00000168 0510A0E3 MOV R1,#+5 \ 0000016C ........ BL DrawStr \ 00000170 28D08DE2 ADD SP,SP,#+40 4554 } \ 00000174 F083BDE8 POP {R4-R9,PC} ;; return \ ??PrintMess_4: \ 00000178 ........ DC32 `?` 4555 4556 4557 //------------------------------------------ 4558 4559 /* 4560 * Функция: DrawContaclList 4561 * Описание: Функция отрисовки всего окна контакт листа 4562 * Параметры: Никаких 4563 * Возвращаемое значение: Ничего не возвращает 4564 */ \ In segment CODE, align 4, keep-with-next 4565 void DrawContactList() 4566 { \ DrawContactList: \ 00000000 10402DE9 PUSH {R4,LR} 4567 #ifdef ICONBAR 4568 DrawRoundedFrame(0,/*HeaderY*/YDISP,ScreenW()-1,ScreenH()-1,0,0,0,CLBackgrClr,CLBackgrClr); 4569 #else 4570 DrawRoundedFrame(0,0,ScreenW()-1,ScreenH()-1,0,0,0,CLBackgrClr,CLBackgrClr); \ 00000004 898100EF SWI +33161 \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 888100EF SWI +33160 \ 00000010 98109FE5 LDR R1,??DrawContactList_0 ;; CLBackgrClr \ 00000014 013044E2 SUB R3,R4,#+1 4571 #endif 4572 DrawImg(0,YDISP,S_ICONS[ICON_BG]); \ 00000018 ........ LDR R4,??DataTable200 ;; popup \ 0000001C 0120A0E1 MOV R2,R1 \ 00000020 04002DE9 PUSH {R2} \ 00000024 02002DE9 PUSH {R1} \ 00000028 0010A0E3 MOV R1,#+0 \ 0000002C 02002DE9 PUSH {R1} \ 00000030 02002DE9 PUSH {R1} \ 00000034 02002DE9 PUSH {R1} \ 00000038 012040E2 SUB R2,R0,#+1 \ 0000003C 0000A0E3 MOV R0,#+0 \ 00000040 500100EF SWI +336 \ 00000044 B02294E5 LDR R2,[R4, #+688] \ 00000048 0010A0E3 MOV R1,#+0 \ 0000004C 0100A0E1 MOV R0,R1 \ 00000050 230000EF SWI +35 4573 DrawHeader(); \ 00000054 ........ BL DrawHeader 4574 DrawList(); \ 00000058 ........ BL DrawList 4575 if(strlen(prmsg)!=0 && PrintTimer > 0) PrintMess(); \ 0000005C E800A0E3 MOV R0,#+232 \ 00000060 500E80E3 ORR R0,R0,#0x500 \ 00000064 040080E0 ADD R0,R0,R4 \ 00000068 1B0000EF SWI +27 \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 14D08DE2 ADD SP,SP,#+20 \ 00000074 0300000A BEQ ??DrawContactList_1 \ 00000078 6C0394E5 LDR R0,[R4, #+876] \ 0000007C 010050E3 CMP R0,#+1 \ 00000080 000000BA BLT ??DrawContactList_1 \ 00000084 ........ BL PrintMess 4576 if(SOFT_MODE) DrawSoftKeys(LG_MENU,clmenu_sk_r); \ ??DrawContactList_1: \ 00000088 ........ LDR R0,??DataTable182 ;; SOFT_MODE \ 0000008C 000090E5 LDR R0,[R0, #+0] \ 00000090 000050E3 CMP R0,#+0 \ 00000094 1080BD08 POPEQ {R4,PC} \ 00000098 7800A0E3 MOV R0,#+120 \ 0000009C 680D80E3 ORR R0,R0,#0x1A00 \ 000000A0 041080E0 ADD R1,R0,R4 \ 000000A4 08009FE5 LDR R0,??DrawContactList_0+0x4 ;; `?` \ 000000A8 ........ BL DrawSoftKeys 4577 } \ 000000AC 1080BDE8 POP {R4,PC} ;; return \ ??DrawContactList_0: \ 000000B0 ........ DC32 CLBackgrClr \ 000000B4 ........ DC32 `?` 4578 4579 4580 //------------------------------------------ 4581 4582 /* 4583 * Функция: ZeroOnline 4584 * Описание: Обнуляем контакты, чтоб не мигали, если нет таковых, то отчищаем лог сообщений 4585 * Параметры: CLIST *t 4586 * Возвращаемое значение: Ничего не возвращает 4587 */ \ In segment CODE, align 4, keep-with-next 4588 void ZeroOnline(CLIST *t) 4589 { \ ZeroOnline: \ 00000000 70402DE9 PUSH {R4-R6,LR} 4590 if(t) \ 00000004 ........ LDR R4,??DataTable200 ;; popup \ 00000008 0060B0E1 MOVS R6,R0 \ 0000000C 1E00000A BEQ ??ZeroOnline_0 4591 { 4592 if(t->isonline)//если контакт тока зашел,то обнуляем \ 00000010 8C0096E5 LDR R0,[R6, #+140] \ 00000014 0050A0E3 MOV R5,#+0 \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 0400000A BEQ ??ZeroOnline_1 4593 { 4594 CLIST *tt; 4595 tt=FindContactByUin(t->uin); \ 00000020 0C0096E5 LDR R0,[R6, #+12] \ 00000024 ........ _BLF FindContactByUin,??FindContactByUin??rA 4596 tt->isonline=0; \ 00000028 8C5080E5 STR R5,[R0, #+140] 4597 tt->online=0; \ 0000002C 905080E5 STR R5,[R0, #+144] \ 00000030 060000EA B ??ZeroOnline_2 4598 } 4599 else 4600 if(t->log && !(t->isonline))//очистить лог \ ??ZeroOnline_1: \ 00000034 680096E5 LDR R0,[R6, #+104] \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 0300000A BEQ ??ZeroOnline_2 4601 { 4602 FreeLOGQ(&t->log); \ 00000040 680086E2 ADD R0,R6,#+104 \ 00000044 ........ BL FreeLOGQ 4603 t->msg_count=0; \ 00000048 785086E5 STR R5,[R6, #+120] 4604 t->isactive=0; \ 0000004C 745086E5 STR R5,[R6, #+116] 4605 } 4606 4607 if(t->uin==UIN)//если нажали на Loopback, то обнуляем все isonline \ ??ZeroOnline_2: \ 00000050 ........ LDR R1,??DataTable190 ;; UIN \ 00000054 0C0096E5 LDR R0,[R6, #+12] \ 00000058 001091E5 LDR R1,[R1, #+0] \ 0000005C 010050E1 CMP R0,R1 \ 00000060 0900001A BNE ??ZeroOnline_0 4608 { 4609 isonline=0; \ 00000064 5C5384E5 STR R5,[R4, #+860] 4610 CLIST *tt; 4611 tt=(CLIST *)(&cltop); \ 00000068 C00F84E2 ADD R0,R4,#+768 \ 0000006C 030000EA B ??ZeroOnline_3 4612 while(tt=(CLIST *)(tt->next)) 4613 { 4614 if(tt->isonline){ tt->isonline=0; tt->online=0; } \ ??ZeroOnline_4: \ 00000070 8C1090E5 LDR R1,[R0, #+140] \ 00000074 000051E3 CMP R1,#+0 \ 00000078 8C508015 STRNE R5,[R0, #+140] \ 0000007C 90508015 STRNE R5,[R0, #+144] 4615 } \ ??ZeroOnline_3: \ 00000080 000090E5 LDR R0,[R0, #+0] \ 00000084 000050E3 CMP R0,#+0 \ 00000088 F8FFFF1A BNE ??ZeroOnline_4 4616 } 4617 } 4618 if(strlen(ContactT9Key)) ClearContactT9Key(); \ ??ZeroOnline_0: \ 0000008C E850A0E3 MOV R5,#+232 \ 00000090 605E85E3 ORR R5,R5,#0x600 \ 00000094 040085E0 ADD R0,R5,R4 \ 00000098 1B0000EF SWI +27 \ 0000009C 000050E3 CMP R0,#+0 \ 000000A0 0200000A BEQ ??ZeroOnline_5 \ 000000A4 2010A0E3 MOV R1,#+32 \ 000000A8 040085E0 ADD R0,R5,R4 \ 000000AC 1D0100EF SWI +285 4619 RecountMenu(NULL,0); \ ??ZeroOnline_5: \ 000000B0 0010A0E3 MOV R1,#+0 \ 000000B4 0000A0E3 MOV R0,#+0 \ 000000B8 ........ BL RecountMenu 4620 }; \ 000000BC 7080BDE8 POP {R4-R6,PC} ;; return 4621 4622 4623 4624 /* 4625 * Функция: FindMessage 4626 * Описание: Переход на не отвеченное сообщение, если таковых нет, то переходим на первую позицию 4627 * Параметры: CLIST *t 4628 * Возвращаемое значение: 4629 * 0 - не выполнили ничего 4630 * -1 - перерисовка 4631 */ \ In segment CODE, align 4, keep-with-next 4632 int FindMessage(CLIST *t) 4633 { \ FindMessage: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 4634 if(CountContacts()>0 && t) \ 00000008 ........ _BLF CountContacts,??CountContacts??rA \ 0000000C 010050E3 CMP R0,#+1 \ 00000010 010000BA BLT ??FindMessage_0 \ 00000014 000054E3 CMP R4,#+0 \ 00000018 0400001A BNE ??FindMessage_1 4635 { 4636 //t=FindContactByN(clistm->curpos); 4637 while(t=(CLIST *)(t->next)) 4638 { 4639 if (t->isunread) goto doit; 4640 } 4641 t=(CLIST *)(&cltop); 4642 while(t=(CLIST *)(t->next)) 4643 { 4644 if (t->isunread) goto doit; 4645 } 4646 if (t && Is_Show_Groups) 4647 { 4648 if (!t->isgroup) t=FindGroupByID(t->group); 4649 if (t && !t->state) 4650 { 4651 t->state^=0xFFFF; 4652 goto does; 4653 } 4654 } 4655 4656 GotoFirstPosition(); 4657 doit: 4658 { 4659 CLIST *g=FindGroupByID(t->group); 4660 if (g) 4661 { 4662 if (g->state) 4663 { 4664 g->state=0; 4665 } 4666 } 4667 } 4668 does: 4669 RecountMenu(t,1); 4670 return(-1); 4671 } 4672 return 0; \ ??FindMessage_0: \ 0000001C 0000A0E3 MOV R0,#+0 \ 00000020 1080BDE8 POP {R4,PC} ;; return \ ??FindMessage_2: \ 00000024 5C0094E5 LDR R0,[R4, #+92] \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 0B00001A BNE ??FindMessage_3 \ ??FindMessage_1: \ 00000030 004094E5 LDR R4,[R4, #+0] \ 00000034 000054E3 CMP R4,#+0 \ 00000038 F9FFFF1A BNE ??FindMessage_2 \ 0000003C ........ LDR R4,??DataTable185 ;; popup + 768 \ 00000040 020000EA B ??FindMessage_4 \ ??FindMessage_5: \ 00000044 5C0094E5 LDR R0,[R4, #+92] \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0300001A BNE ??FindMessage_3 \ ??FindMessage_4: \ 00000050 004094E5 LDR R4,[R4, #+0] \ 00000054 000054E3 CMP R4,#+0 \ 00000058 F9FFFF1A BNE ??FindMessage_5 \ 0000005C ........ BL GotoFirstPosition \ ??FindMessage_3: \ 00000060 100094E5 LDR R0,[R4, #+16] \ 00000064 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000068 000050E3 CMP R0,#+0 \ 0000006C B415D011 LDRHNE R1,[R0, #+84] \ 00000070 00005113 CMPNE R1,#+0 \ 00000074 0010A013 MOVNE R1,#+0 \ 00000078 B415C011 STRHNE R1,[R0, #+84] \ 0000007C 0110A0E3 MOV R1,#+1 \ 00000080 0400A0E1 MOV R0,R4 \ 00000084 ........ BL RecountMenu \ 00000088 0000E0E3 MVN R0,#+0 \ 0000008C 1080BDE8 POP {R4,PC} 4673 }; 4674 4675 4676 /* 4677 * Функция: ClOnKey 4678 * Описание: Функция обработки клавиш 4679 * Параметры: GUI_MSG *msg 4680 * Возвращаемое значение: результат выполения функции 4681 */ \ In segment CODE, align 4, keep-with-next 4682 int ClOnKey(GUI_MSG *msg) 4683 { \ ClOnKey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 80DF4DE2 SUB SP,SP,#+512 4684 int key=msg->gbsmsg->submess; 4685 CLIST *t; 4686 4687 if (msg->gbsmsg->msg==LONG_PRESS) \ 00000008 ........ LDR R6,??DataTable200 ;; popup \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 041094E5 LDR R1,[R4, #+4] \ 00000014 ........ LDR R0,??DataTable187 ;; VIEW_MODE \ 00000018 047091E5 LDR R7,[R1, #+4] \ 0000001C 009090E5 LDR R9,[R0, #+0] \ 00000020 F200D1E1 LDRSH R0,[R1, #+2] \ 00000024 E850A0E3 MOV R5,#+232 \ 00000028 605E85E3 ORR R5,R5,#0x600 \ 0000002C 00A0A0E3 MOV R10,#+0 \ 00000030 9520A0E3 MOV R2,#+149 \ 00000034 402F82E3 ORR R2,R2,#0x100 \ 00000038 020050E1 CMP R0,R2 \ 0000003C 4700001A BNE ??ClOnKey_1 4688 { 4689 int key=msg->gbsmsg->submess; 4690 if (((key>='0')&&(key<='9')) || key == '*' || key == '#' ) \ 00000040 4C0396E5 LDR R0,[R6, #+844] \ 00000044 300057E3 CMP R7,#+48 \ 00000048 000090E5 LDR R0,[R0, #+0] \ 0000004C 110000BA BLT ??ClOnKey_2 \ 00000050 3A0057E3 CMP R7,#+58 \ 00000054 120000BA BLT ??ClOnKey_3 4691 { 4692 if(LongPressTimer==0) 4693 { 4694 LongPressAction(FindContactByN(clistm->curpos),msg->gbsmsg->submess); 4695 } 4696 ClearContactT9Key(); 4697 RecountMenu(NULL,1); 4698 return 0; 4699 } 4700 4701 switch(msg->gbsmsg->submess) \ ??ClOnKey_4: \ 00000058 141057E2 SUBS R1,R7,#+20 \ 0000005C 3400000A BEQ ??ClOnKey_5 \ 00000060 271051E2 SUBS R1,R1,#+39 \ 00000064 0600000A BEQ ??ClOnKey_6 \ 00000068 011051E2 SUBS R1,R1,#+1 \ 0000006C 1E00000A BEQ ??ClOnKey_7 \ 00000070 011051E2 SUBS R1,R1,#+1 \ 00000074 2900000A BEQ ??ClOnKey_8 \ 00000078 011051E2 SUBS R1,R1,#+1 \ 0000007C 2200000A BEQ ??ClOnKey_9 \ 00000080 360000EA B ??ClOnKey_1 4702 { 4703 case UP_BUTTON: if(VIEW_MODE) MoveUpTwoCollumn(2); else MoveUpOneCollumn(1); break; \ ??ClOnKey_6: \ 00000084 000059E3 CMP R9,#+0 \ 00000088 1400000A BEQ ??ClOnKey_10 \ 0000008C 0200A0E3 MOV R0,#+2 \ ??ClOnKey_11: \ 00000090 ........ BL MoveUpTwoCollumn \ 00000094 310000EA B ??ClOnKey_1 \ ??ClOnKey_2: \ 00000098 2A0057E3 CMP R7,#+42 \ 0000009C 23005713 CMPNE R7,#+35 \ 000000A0 ECFFFF1A BNE ??ClOnKey_4 \ ??ClOnKey_3: \ 000000A4 681396E5 LDR R1,[R6, #+872] \ 000000A8 000051E3 CMP R1,#+0 \ 000000AC 0300001A BNE ??ClOnKey_12 \ 000000B0 ........ _BLF FindContactByN,??FindContactByN??rA \ 000000B4 041094E5 LDR R1,[R4, #+4] \ 000000B8 041091E5 LDR R1,[R1, #+4] \ 000000BC ........ BL LongPressAction \ ??ClOnKey_12: \ 000000C0 2010A0E3 MOV R1,#+32 \ 000000C4 060085E0 ADD R0,R5,R6 \ 000000C8 1D0100EF SWI +285 \ 000000CC 0110A0E3 MOV R1,#+1 \ 000000D0 0000A0E3 MOV R0,#+0 \ 000000D4 ........ BL RecountMenu \ 000000D8 0000A0E3 MOV R0,#+0 \ 000000DC C60000EA B ??ClOnKey_13 \ ??ClOnKey_10: \ 000000E0 0100A0E3 MOV R0,#+1 \ ??ClOnKey_14: \ 000000E4 ........ BL MoveUpOneCollumn \ 000000E8 1C0000EA B ??ClOnKey_1 4704 case DOWN_BUTTON: if(VIEW_MODE) MoveDownTwoCollumn(2); else MoveDownOneCollumn(1); break; \ ??ClOnKey_7: \ 000000EC 000059E3 CMP R9,#+0 \ 000000F0 0200000A BEQ ??ClOnKey_15 \ 000000F4 0200A0E3 MOV R0,#+2 \ ??ClOnKey_16: \ 000000F8 ........ BL MoveDownTwoCollumn \ 000000FC 170000EA B ??ClOnKey_1 \ ??ClOnKey_15: \ 00000100 0100A0E3 MOV R0,#+1 \ ??ClOnKey_17: \ 00000104 ........ BL MoveDownOneCollumn \ 00000108 140000EA B ??ClOnKey_1 4705 case RIGHT_BUTTON: if(VIEW_MODE) MoveDownTwoCollumn(1); else MoveDownOneCollumn(2); break; \ ??ClOnKey_9: \ 0000010C 000059E3 CMP R9,#+0 \ 00000110 0100A013 MOVNE R0,#+1 \ 00000114 F7FFFF1A BNE ??ClOnKey_16 \ 00000118 0200A0E3 MOV R0,#+2 \ 0000011C F8FFFFEA B ??ClOnKey_17 4706 case LEFT_BUTTON: if(VIEW_MODE) MoveUpTwoCollumn(1); else MoveUpOneCollumn(2); break; \ ??ClOnKey_8: \ 00000120 000059E3 CMP R9,#+0 \ 00000124 0100A013 MOVNE R0,#+1 \ 00000128 D8FFFF1A BNE ??ClOnKey_11 \ 0000012C 0200A0E3 MOV R0,#+2 \ 00000130 EBFFFFEA B ??ClOnKey_14 4707 case VOL_UP_BUTTON: 4708 { 4709 t=FindContactByN(clistm->curpos); \ ??ClOnKey_5: \ 00000134 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000138 00B0B0E1 MOVS R11,R0 4710 //Послать запрос текста XStatus 4711 if (t) \ 0000013C 0700000A BEQ ??ClOnKey_1 4712 { 4713 if (!t->isgroup) \ 00000140 08009BE5 LDR R0,[R11, #+8] \ 00000144 000050E3 CMP R0,#+0 \ 00000148 0400001A BNE ??ClOnKey_1 4714 { 4715 FreeXText(t); \ 0000014C 0B00A0E1 MOV R0,R11 \ 00000150 ........ _BLF FreeXText,??FreeXText??rA 4716 t->req_xtext=0; \ 00000154 80A08BE5 STR R10,[R11, #+128] 4717 RequestXText(t->uin); \ 00000158 0C009BE5 LDR R0,[R11, #+12] \ 0000015C ........ BL RequestXText 4718 } 4719 } 4720 } 4721 break; 4722 } 4723 }; 4724 4725 if (msg->gbsmsg->msg==KEY_DOWN) \ ??ClOnKey_1: \ 00000160 041094E5 LDR R1,[R4, #+4] \ 00000164 9380A0E3 MOV R8,#+147 \ 00000168 F200D1E1 LDRSH R0,[R1, #+2] \ 0000016C 408F88E3 ORR R8,R8,#0x100 \ 00000170 080050E1 CMP R0,R8 \ 00000174 0701001A BNE ??ClOnKey_18 4726 { 4727 switch(msg->gbsmsg->submess) \ 00000178 4C0396E5 LDR R0,[R6, #+844] \ 0000017C 042091E5 LDR R2,[R1, #+4] \ 00000180 000090E5 LDR R0,[R0, #+0] \ 00000184 012042E2 SUB R2,R2,#+1 \ 00000188 3D0052E3 CMP R2,#+61 \ 0000018C EB00008A BHI ??ClOnKey_19 \ 00000190 013F8FE2 ADR R3,??ClOnKey_0 \ 00000194 0230D3E7 LDRB R3,[R3, R2] \ 00000198 03F18FE0 ADD PC,PC,R3, LSL #+2 \ ??ClOnKey_0: \ 0000019C 29E8E842 DC8 +41,+232,+232,+66 \ 000001A0 E8E8E8E8 DC8 +232,+232,+232,+232 \ 000001A4 E8E8A042 DC8 +232,+232,+160,+66 \ 000001A8 E8E8E8E8 DC8 +232,+232,+232,+232 \ 000001AC E8E8E8E8 DC8 +232,+232,+232,+232 \ 000001B0 E8E8E8E8 DC8 +232,+232,+232,+232 \ 000001B4 E86DE8E8 DC8 +232,+109,+232,+232 \ 000001B8 E8E8E8E8 DC8 +232,+232,+232,+232 \ 000001BC E8E8E8E8 DC8 +232,+232,+232,+232 \ 000001C0 E8E8E8E8 DC8 +232,+232,+232,+232 \ 000001C4 E899E8E8 DC8 +232,+153,+232,+232 \ 000001C8 E8E8E8E8 DC8 +232,+232,+232,+232 \ 000001CC E8E8E8E8 DC8 +232,+232,+232,+232 \ 000001D0 E8E8E8E8 DC8 +232,+232,+232,+232 \ 000001D4 E8E80F17 DC8 +232,+232,+15,+23 \ 000001D8 241F0000 DC8 +36,+31,+0,+0 4728 { 4729 case UP_BUTTON: if(VIEW_MODE) MoveUpTwoCollumn(2); else MoveUpOneCollumn(1); break; \ ??ClOnKey_20: \ 000001DC 000059E3 CMP R9,#+0 \ 000001E0 0200000A BEQ ??ClOnKey_21 \ 000001E4 0200A0E3 MOV R0,#+2 \ ??ClOnKey_22: \ 000001E8 ........ BL MoveUpTwoCollumn \ 000001EC D30000EA B ??ClOnKey_19 \ ??ClOnKey_21: \ 000001F0 0100A0E3 MOV R0,#+1 \ ??ClOnKey_23: \ 000001F4 ........ BL MoveUpOneCollumn \ 000001F8 D00000EA B ??ClOnKey_19 4730 case DOWN_BUTTON: if(VIEW_MODE) MoveDownTwoCollumn(2); else MoveDownOneCollumn(1); break; \ ??ClOnKey_24: \ 000001FC 000059E3 CMP R9,#+0 \ 00000200 0200000A BEQ ??ClOnKey_25 \ 00000204 0200A0E3 MOV R0,#+2 \ ??ClOnKey_26: \ 00000208 ........ BL MoveDownTwoCollumn \ 0000020C CB0000EA B ??ClOnKey_19 \ ??ClOnKey_25: \ 00000210 0100A0E3 MOV R0,#+1 \ ??ClOnKey_27: \ 00000214 ........ BL MoveDownOneCollumn \ 00000218 C80000EA B ??ClOnKey_19 4731 case RIGHT_BUTTON: if(VIEW_MODE) MoveDownTwoCollumn(1); else MoveDownOneCollumn(2); break; \ ??ClOnKey_28: \ 0000021C 000059E3 CMP R9,#+0 \ 00000220 0100A013 MOVNE R0,#+1 \ 00000224 F7FFFF1A BNE ??ClOnKey_26 \ 00000228 0200A0E3 MOV R0,#+2 \ 0000022C F8FFFFEA B ??ClOnKey_27 4732 case LEFT_BUTTON: if(VIEW_MODE) MoveUpTwoCollumn(1); else MoveUpOneCollumn(2); break; \ ??ClOnKey_29: \ 00000230 000059E3 CMP R9,#+0 \ 00000234 0100A013 MOVNE R0,#+1 \ 00000238 EAFFFF1A BNE ??ClOnKey_22 \ 0000023C 0200A0E3 MOV R0,#+2 \ 00000240 EBFFFFEA B ??ClOnKey_23 4733 case LEFT_SOFT: 4734 { 4735 extern void CreateMainMenu(); 4736 if(!ClrPrintMess())//если нет всплывающего окна,если есть то закрываем его \ ??ClOnKey_30: \ 00000244 ........ BL ClrPrintMess \ 00000248 000050E3 CMP R0,#+0 \ 0000024C BB00001A BNE ??ClOnKey_19 4737 { 4738 if(!strlen(ContactT9Key)) \ 00000250 060085E0 ADD R0,R5,R6 \ 00000254 1B0000EF SWI +27 \ 00000258 000050E3 CMP R0,#+0 \ 0000025C 0100001A BNE ??ClOnKey_31 4739 CreateMainMenu();//открываем меню \ 00000260 ........ _BLF CreateMainMenu,??CreateMainMenu??rA \ 00000264 B50000EA B ??ClOnKey_19 4740 else 4741 if(strlen(ContactT9Key)==1) \ ??ClOnKey_31: \ 00000268 060085E0 ADD R0,R5,R6 \ 0000026C 1B0000EF SWI +27 \ 00000270 010050E3 CMP R0,#+1 \ 00000274 0400001A BNE ??ClOnKey_32 4742 { 4743 LongPressAction(FindContactByN(clistm->curpos),ContactT9Key[0]); \ 00000278 4C0396E5 LDR R0,[R6, #+844] \ 0000027C 000090E5 LDR R0,[R0, #+0] \ 00000280 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000284 0610D5E7 LDRB R1,[R5, +R6] \ 00000288 ........ BL LongPressAction 4744 ClearContactT9Key(); \ ??ClOnKey_32: \ 0000028C 2010A0E3 MOV R1,#+32 \ 00000290 060085E0 ADD R0,R5,R6 \ 00000294 1D0100EF SWI +285 4745 RecountMenu(NULL,1); \ 00000298 0110A0E3 MOV R1,#+1 \ 0000029C 0000A0E3 MOV R0,#+0 \ 000002A0 ........ BL RecountMenu \ 000002A4 A50000EA B ??ClOnKey_19 4746 } 4747 else 4748 { 4749 ClearContactT9Key(); 4750 RecountMenu(NULL,1); 4751 } 4752 } 4753 }break; 4754 case RIGHT_SOFT: 4755 case RED_BUTTON: 4756 { 4757 if(msg->gbsmsg->submess==RED_BUTTON && (isonline || on_off_timer > 0)) \ ??ClOnKey_33: \ 000002A8 040091E5 LDR R0,[R1, #+4] \ 000002AC 0C0050E3 CMP R0,#+12 \ 000002B0 1800001A BNE ??ClOnKey_34 \ 000002B4 5C0396E5 LDR R0,[R6, #+860] \ 000002B8 000050E3 CMP R0,#+0 \ 000002BC 0A00001A BNE ??ClOnKey_35 \ 000002C0 500396E5 LDR R0,[R6, #+848] \ 000002C4 010050E3 CMP R0,#+1 \ 000002C8 120000BA BLT ??ClOnKey_34 4758 { 4759 //обнуляем все isonline 4760 if(isonline) 4761 { 4762 isonline=0; 4763 CLIST *tt; 4764 tt=(CLIST *)(&cltop); 4765 while(tt=(CLIST *)(tt->next)) 4766 { 4767 if(tt->isonline){ tt->isonline=0; tt->online=0; } 4768 } 4769 } 4770 else 4771 { 4772 //убираем скролл в хедере 4773 ClrOnOffBuffer(); \ 000002CC ........ BL ClrOnOffBuffer 4774 DisableScroll(); \ 000002D0 6C00A0E3 MOV R0,#+108 \ 000002D4 6C0D80E3 ORR R0,R0,#0x1B00 \ 000002D8 060080E0 ADD R0,R0,R6 \ 000002DC 8C0100EF SWI +396 \ 000002E0 84A486E5 STR R10,[R6, #+1156] \ 000002E4 80A486E5 STR R10,[R6, #+1152] \ 000002E8 940000EA B ??ClOnKey_19 4775 } \ ??ClOnKey_35: \ 000002EC 5CA386E5 STR R10,[R6, #+860] \ 000002F0 C00F86E2 ADD R0,R6,#+768 \ ??ClOnKey_36: \ 000002F4 000090E5 LDR R0,[R0, #+0] \ 000002F8 000050E3 CMP R0,#+0 \ 000002FC 8F00000A BEQ ??ClOnKey_19 \ 00000300 8C1090E5 LDR R1,[R0, #+140] \ 00000304 000051E3 CMP R1,#+0 \ 00000308 F9FFFF0A BEQ ??ClOnKey_36 \ 0000030C 8CA080E5 STR R10,[R0, #+140] \ 00000310 90A080E5 STR R10,[R0, #+144] \ 00000314 F6FFFFEA B ??ClOnKey_36 4776 break; 4777 } 4778 4779 if(!ClrPrintMess()) \ ??ClOnKey_34: \ 00000318 ........ BL ClrPrintMess \ 0000031C 000050E3 CMP R0,#+0 \ 00000320 8600001A BNE ??ClOnKey_19 4780 { 4781 if(strlen(ContactT9Key)) \ 00000324 060085E0 ADD R0,R5,R6 \ 00000328 1B0000EF SWI +27 \ 0000032C 000050E3 CMP R0,#+0 \ 00000330 0400000A BEQ ??ClOnKey_37 4782 { 4783 BackSpaceContactT9(); \ 00000334 ........ BL BackSpaceContactT9 4784 RecountMenu(NULL,1); \ ??ClOnKey_38: \ 00000338 0110A0E3 MOV R1,#+1 \ 0000033C 0000A0E3 MOV R0,#+0 \ ??ClOnKey_39: \ 00000340 ........ BL RecountMenu 4785 return(-1); \ 00000344 2B0000EA B ??ClOnKey_40 4786 } 4787 else 4788 { 4789 ShowLoadScreen=1;//return 1; \ ??ClOnKey_37: \ 00000348 0100A0E3 MOV R0,#+1 \ 0000034C 480386E5 STR R0,[R6, #+840] \ 00000350 7A0000EA B ??ClOnKey_19 4790 } 4791 } 4792 } 4793 break; 4794 case ENTER_BUTTON: 4795 { 4796 t=FindContactByN(clistm->curpos); \ ??ClOnKey_41: \ 00000354 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000358 00B0A0E1 MOV R11,R0 4797 if(!ClrPrintMess()) \ 0000035C ........ BL ClrPrintMess \ 00000360 000050E3 CMP R0,#+0 \ 00000364 2300001A BNE ??ClOnKey_40 4798 { 4799 if(t) \ 00000368 00005BE3 CMP R11,#+0 \ 0000036C 2100000A BEQ ??ClOnKey_40 4800 { 4801 if (t->isgroup) \ 00000370 08009BE5 LDR R0,[R11, #+8] \ 00000374 000050E3 CMP R0,#+0 \ 00000378 0700000A BEQ ??ClOnKey_42 4802 { 4803 t->state^=0xFFFF; \ 0000037C B405DBE1 LDRH R0,[R11, #+84] \ 00000380 FF10A0E3 MOV R1,#+255 \ 00000384 FF1C81E3 ORR R1,R1,#0xFF00 \ 00000388 000021E0 EOR R0,R1,R0 \ 0000038C B405CBE1 STRH R0,[R11, #+84] 4804 RecountMenu(t,1); \ 00000390 0110A0E3 MOV R1,#+1 \ 00000394 0B00A0E1 MOV R0,R11 \ 00000398 E8FFFFEA B ??ClOnKey_39 4805 return(-1); 4806 } 4807 if (strlen(ContactT9Key)) \ ??ClOnKey_42: \ 0000039C 060085E0 ADD R0,R5,R6 \ 000003A0 1B0000EF SWI +27 \ 000003A4 000050E3 CMP R0,#+0 \ 000003A8 0500000A BEQ ??ClOnKey_43 4808 { 4809 ClearContactT9Key(); \ 000003AC 2010A0E3 MOV R1,#+32 \ 000003B0 060085E0 ADD R0,R5,R6 \ 000003B4 1D0100EF SWI +285 4810 RecountMenu(NULL,1); \ 000003B8 0110A0E3 MOV R1,#+1 \ 000003BC 0000A0E3 MOV R0,#+0 \ 000003C0 ........ BL RecountMenu 4811 } 4812 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<curpos); \ ??ClOnKey_45: \ 00000404 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000408 00B0A0E1 MOV R11,R0 4820 extern const int Action_by_Star; 4821 return LongPressActionOnChat(t,Action_by_Star); \ 0000040C BC019FE5 LDR R0,??ClOnKey_46+0x8 ;; Action_by_Star \ 00000410 001090E5 LDR R1,[R0, #+0] \ 00000414 0B00A0E1 MOV R0,R11 \ 00000418 ........ BL LongPressActionOnChat \ 0000041C F6FFFFEA B ??ClOnKey_13 4822 // FimdMessage(t); 4823 //break; 4824 case GREEN_BUTTON: 4825 { 4826 t=FindContactByN(clistm->curpos); \ ??ClOnKey_47: \ 00000420 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000424 00B0B0E1 MOVS R11,R0 4827 //Послать запрос текста XStatus 4828 if (t) \ 00000428 4400000A BEQ ??ClOnKey_19 4829 { 4830 if (!t->isgroup) \ 0000042C 080090E5 LDR R0,[R0, #+8] \ 00000430 000050E3 CMP R0,#+0 \ 00000434 4100001A BNE ??ClOnKey_19 4831 { 4832 char s[256]; 4833 char xt[256]; 4834 zeromem(xt, sizeof(xt)); \ 00000438 401FA0E3 MOV R1,#+256 4835 zeromem(s,sizeof(s)); 4836 4837 t = FindContactByN(clistm->curpos); 4838 if(t->xtext == 0) \ 0000043C 90519FE5 LDR R5,??ClOnKey_46+0xC ;; `?xtext[0]; \ ??ClOnKey_48: \ 00000480 0090D0E5 LDRB R9,[R0, #+0] 4843 int len = strlen(t->xtext); \ 00000484 1B0000EF SWI +27 4844 if( (len - i - 1) > 0)//если есть текст кроме заголовка \ 00000488 090040E0 SUB R0,R0,R9 \ 0000048C 010040E2 SUB R0,R0,#+1 \ 00000490 010050E3 CMP R0,#+1 \ 00000494 0B0000BA BLT ??ClOnKey_50 4845 { 4846 strncpy(xt,t->xtext+1,i); \ 00000498 7C009BE5 LDR R0,[R11, #+124] \ 0000049C 0920A0E1 MOV R2,R9 \ 000004A0 011080E2 ADD R1,R0,#+1 \ 000004A4 400F8DE2 ADD R0,SP,#+256 \ 000004A8 160100EF SWI +278 4847 sprintf(xt+i, "\n%s\0",t->xtext+i+1); \ 000004AC 7C009BE5 LDR R0,[R11, #+124] \ 000004B0 141085E2 ADD R1,R5,#+20 \ 000004B4 000089E0 ADD R0,R9,R0 \ 000004B8 012080E2 ADD R2,R0,#+1 \ 000004BC 400F8DE2 ADD R0,SP,#+256 \ 000004C0 000089E0 ADD R0,R9,R0 \ 000004C4 030000EA B ??ClOnKey_51 4848 } 4849 else 4850 sprintf(xt, "%s\0",t->xtext+1); \ ??ClOnKey_50: \ 000004C8 7C009BE5 LDR R0,[R11, #+124] \ 000004CC 3D1F8FE2 ADR R1,??ClOnKey_46 ;; 0x25, 0x73, 0x00, 0x00 \ 000004D0 012080E2 ADD R2,R0,#+1 \ 000004D4 400F8DE2 ADD R0,SP,#+256 \ ??ClOnKey_51: \ 000004D8 160000EF SWI +22 4851 } 4852 snprintf(s,255,"[ %s ]\n%s\n%s\0", t->name, 4853 t->sttime == 0 ? "" : t->sttime, 4854 t->xstate == 0 ? "Хстатус не установлен" : xt); \ ??ClOnKey_49: \ 000004DC B605DBE1 LDRH R0,[R11, #+86] \ 000004E0 98109BE5 LDR R1,[R11, #+152] \ 000004E4 14308BE2 ADD R3,R11,#+20 \ 000004E8 000050E3 CMP R0,#+0 \ 000004EC 30008502 ADDEQ R0,R5,#+48 \ 000004F0 400F8D12 ADDNE R0,SP,#+256 \ 000004F4 000051E3 CMP R1,#+0 \ 000004F8 331F8F02 ADREQ R1,??ClOnKey_46+0x4 ;; "" \ 000004FC 01002DE9 PUSH {R0} \ 00000500 02002DE9 PUSH {R1} \ 00000504 1C2085E2 ADD R2,R5,#+28 \ 00000508 08008DE2 ADD R0,SP,#+8 \ 0000050C FF10A0E3 MOV R1,#+255 \ 00000510 1B0100EF SWI +283 4855 s[strlen(s)] = 0; \ 00000514 08008DE2 ADD R0,SP,#+8 \ 00000518 1B0000EF SWI +27 \ 0000051C 08108DE2 ADD R1,SP,#+8 \ 00000520 01A0C0E7 STRB R10,[R0, +R1] 4856 PrintMessage(s,10); \ 00000524 E800A0E3 MOV R0,#+232 \ 00000528 500E80E3 ORR R0,R0,#0x500 \ 0000052C 060080E0 ADD R0,R0,R6 \ 00000530 1A0000EF SWI +26 \ 00000534 0A00A0E3 MOV R0,#+10 \ 00000538 6C0386E5 STR R0,[R6, #+876] \ 0000053C 08D08DE2 ADD SP,SP,#+8 4857 } 4858 } 4859 } 4860 break; 4861 4862 case VOL_UP_BUTTON: 4863 { 4864 if(!isVolUpButton) break; 4865 }break; 4866 } 4867 4868 4869 if (key=='#' && (CountContacts()>0) && ActionResh)//Если есть хоть один контакт то выполнять,иначе возможен пикофф \ ??ClOnKey_19: \ 00000540 230057E3 CMP R7,#+35 \ 00000544 1300001A BNE ??ClOnKey_18 \ 00000548 ........ _BLF CountContacts,??CountContacts??rA \ 0000054C 010050E3 CMP R0,#+1 \ 00000550 090000BA BLT ??ClOnKey_52 \ 00000554 7C009FE5 LDR R0,??ClOnKey_46+0x10 ;; ActionResh \ 00000558 004090E5 LDR R4,[R0, #+0] \ 0000055C 000054E3 CMP R4,#+0 \ 00000560 0500000A BEQ ??ClOnKey_52 4870 { 4871 t=FindContactByN(clistm->curpos); \ 00000564 4C0396E5 LDR R0,[R6, #+844] \ 00000568 000090E5 LDR R0,[R0, #+0] \ 0000056C ........ _BLF FindContactByN,??FindContactByN??rA 4872 if(ActionResh == 1) ZeroOnline(t); \ 00000570 010054E3 CMP R4,#+1 \ 00000574 0300001A BNE ??ClOnKey_53 \ 00000578 ........ BL ZeroOnline 4873 if(ActionResh == 2) return FindMessage(t); 4874 } 4875 } 4876 4877 if ((key>='0')&&(key<='9') && msg->gbsmsg->msg==KEY_DOWN) 4878 { 4879 GotoFirstPosition(); 4880 AddContactT9Key(key); 4881 RecountMenu(NULL,1); 4882 return(-1); 4883 } 4884 return 0; \ ??ClOnKey_52: \ 0000057C 0000A0E3 MOV R0,#+0 \ 00000580 80DF8DE2 ADD SP,SP,#+512 \ 00000584 F08FBDE8 POP {R4-R11,PC} ;; return \ ??ClOnKey_53: \ 00000588 020054E3 CMP R4,#+2 \ 0000058C FAFFFF1A BNE ??ClOnKey_52 \ 00000590 ........ BL FindMessage \ 00000594 98FFFFEA B ??ClOnKey_13 \ ??ClOnKey_18: \ 00000598 300057E3 CMP R7,#+48 \ 0000059C F6FFFFBA BLT ??ClOnKey_52 \ 000005A0 3A0057E3 CMP R7,#+58 \ 000005A4 F4FFFFAA BGE ??ClOnKey_52 \ 000005A8 040094E5 LDR R0,[R4, #+4] \ 000005AC F200D0E1 LDRSH R0,[R0, #+2] \ 000005B0 080050E1 CMP R0,R8 \ 000005B4 F0FFFF1A BNE ??ClOnKey_52 \ 000005B8 ........ BL GotoFirstPosition \ 000005BC 0700A0E1 MOV R0,R7 \ 000005C0 ........ BL AddContactT9Key \ 000005C4 5BFFFFEA B ??ClOnKey_38 \ ??ClOnKey_46: \ 000005C8 25730000 DC8 0x25, 0x73, 0x00, 0x00 \ 000005CC 00000000 DC8 "",+0,+0,+0 \ 000005D0 ........ DC32 Action_by_Star \ 000005D4 ........ DC32 `?ws1,LG_GRSTATESTRING,connect_state,RXstate,RX,TX,sendq_l,hostname,logmsg); \ 00000008 08849FE5 LDR R8,??DrawLoadScreen_0 ;; percent_t \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 888100EF SWI +33160 \ 00000014 0050A0E1 MOV R5,R0 \ 00000018 898100EF SWI +33161 \ 0000001C 0060A0E1 MOV R6,R0 \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 2E0100EF SWI +302 \ 00000028 0070A0E1 MOV R7,R0 \ 0000002C 0100A0E3 MOV R0,#+1 \ 00000030 2E0100EF SWI +302 \ 00000034 80002DE9 PUSH {R7} \ 00000038 ........ LDR R7,??DataTable200 ;; popup \ 0000003C 01002DE9 PUSH {R0} \ 00000040 013046E2 SUB R3,R6,#+1 \ 00000044 012045E2 SUB R2,R5,#+1 \ 00000048 0010A0E3 MOV R1,#+0 \ 0000004C 0000A0E3 MOV R0,#+0 \ 00000050 01002DE9 PUSH {R0} \ 00000054 B40100EF SWI +436 \ 00000058 882297E5 LDR R2,[R7, #+648] \ 0000005C 0010A0E3 MOV R1,#+0 \ 00000060 0100A0E1 MOV R0,R1 \ 00000064 230000EF SWI +35 \ 00000068 440497E5 LDR R0,[R7, #+1092] \ 0000006C 481497E5 LDR R1,[R7, #+1096] \ 00000070 8820A0E3 MOV R2,#+136 \ 00000074 5C2D82E3 ORR R2,R2,#0x1700 \ 00000078 072082E0 ADD R2,R2,R7 \ 0000007C 04002DE9 PUSH {R2} \ 00000080 C820A0E3 MOV R2,#+200 \ 00000084 682D82E3 ORR R2,R2,#0x1A00 \ 00000088 072082E0 ADD R2,R2,R7 \ 0000008C 04002DE9 PUSH {R2} \ 00000090 4C2497E5 LDR R2,[R7, #+1100] \ 00000094 04002DE9 PUSH {R2} \ 00000098 02002DE9 PUSH {R1} \ 0000009C 01002DE9 PUSH {R0} \ 000000A0 303497E5 LDR R3,[R7, #+1072] \ 000000A4 342497E5 LDR R2,[R7, #+1076] \ 000000A8 300094E5 LDR R0,[R4, #+48] \ 000000AC A41088E2 ADD R1,R8,#+164 \ 000000B0 240100EF SWI +292 4928 4929 /* if(pm != pl) 4930 { 4931 DrawRectangle(0,scr_h-4-2*GetFontYSIZE(FONT_SMALL_BOLD),scr_w-1,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-2,0, 4932 GetPaletteAdrByColorIndex(0), 4933 GetPaletteAdrByColorIndex(0)); 4934 pos_status = ((scr_w-1) * pl) / pm; 4935 DrawRectangle(1,scr_h-4-2*GetFontYSIZE(FONT_SMALL_BOLD)+1,pos_status,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-3,0, 4936 GetPaletteAdrByColorIndex(14), 4937 GetPaletteAdrByColorIndex(14)); 4938 // wstrcatprintf(data->ws1,"\nLoading images..."); 4939 }*/ 4940 /* 4941 if(pictures_loaded < TOTAL_ICONS) 4942 { 4943 wstrcatprintf(data->ws1,"\nLoading %d/%d images...",pictures_loaded,TOTAL_ICONS); 4944 } 4945 else */ 4946 /* if(xstatuses_load) 4947 { 4948 wstrcatprintf(data->ws1,"\nLoaded %d/%d xstatus",total_xstatuses, xstatuses_max-1); 4949 } 4950 else*/ 4951 /*if(total_smiles) 4952 { 4953 wstrcatprintf(data->ws1,"\nLoaded %d/%d smiles",total_smiles,pm-xstatuses_max);//-TOTAL_ICONS 4954 }*/ 4955 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4956 FONT_SMALL,TEXT_OUTLINE,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(1)); \ 000000B4 0100A0E3 MOV R0,#+1 \ 000000B8 2E0100EF SWI +302 \ 000000BC 0090A0E1 MOV R9,R0 \ 000000C0 0000A0E3 MOV R0,#+0 \ 000000C4 2E0100EF SWI +302 \ 000000C8 00A0A0E1 MOV R10,R0 \ 000000CC 0300A0E3 MOV R0,#+3 \ 000000D0 C50100EF SWI +453 \ 000000D4 00022DE9 PUSH {R9} \ 000000D8 00042DE9 PUSH {R10} \ 000000DC 2010A0E3 MOV R1,#+32 \ 000000E0 02002DE9 PUSH {R1} \ 000000E4 043045E2 SUB R3,R5,#+4 \ 000000E8 0320A0E3 MOV R2,#+3 \ 000000EC 0710A0E3 MOV R1,#+7 \ 000000F0 02002DE9 PUSH {R1} \ 000000F4 041046E2 SUB R1,R6,#+4 \ 000000F8 000041E0 SUB R0,R1,R0 \ 000000FC 01002DE9 PUSH {R0} \ 00000100 300094E5 LDR R0,[R4, #+48] \ 00000104 0210A0E1 MOV R1,R2 \ 00000108 4C0100EF SWI +332 \ 0000010C 34D08DE2 ADD SP,SP,#+52 4957 4958 4959 #ifdef ELKA 4960 int y=160; 4961 char A[]="[A: %s]"; 4962 char I[]="[I]\n"; 4963 char V[]="[V]\n"; 4964 char S[]="[S]\n"; 4965 4966 wsprintf(data->ws2,empty_str); 4967 if(CurrentPrivateStatus==1) wstrcatprintf(data->ws2,I); 4968 if(Is_Vibra_Enabled) wstrcatprintf(data->ws2,V); 4969 if(Is_Sounds_Enabled) wstrcatprintf(data->ws2,S); 4970 if(Is_Double_Vibra_On) wstrcatprintf(data->ws2,"[Vr]\n"); 4971 if(away_m) wsprintf(data->ws2,A,away_msg_time_dace); 4972 4973 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(FONT_SMALL_ITALIC_BOLD)*5,FONT_SMALL_ITALIC_BOLD,TEXT_OUTLINE,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(1)); 4974 #endif 4975 4976 wsprintf(data->ws2,"Uin: %d\nRecv: %d Send: %d Blocked: %d",UIN, CountMessage[0],CountMessage[1], blocked_spam); \ 00000110 640397E5 LDR R0,[R7, #+868] \ 00000114 DC1088E2 ADD R1,R8,#+220 \ 00000118 01002DE9 PUSH {R0} \ 0000011C EC0297E5 LDR R0,[R7, #+748] \ 00000120 01002DE9 PUSH {R0} \ 00000124 E83297E5 LDR R3,[R7, #+744] \ 00000128 ........ LDR R0,??DataTable190 ;; UIN \ 0000012C 002090E5 LDR R2,[R0, #+0] \ 00000130 340094E5 LDR R0,[R4, #+52] \ 00000134 240100EF SWI +292 4977 DrawString(data->ws2,1,scr_h-10-5*GetFontYSIZE(FONT_SMALL_BOLD)+1,ScreenW()-1,scr_h-10-GetFontYSIZE(FONT_MEDIUM_BOLD)-3 4978 ,FONT_SMALL,TEXT_OUTLINE,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(1)); \ 00000138 0100A0E3 MOV R0,#+1 \ 0000013C 2E0100EF SWI +302 \ 00000140 0090A0E1 MOV R9,R0 \ 00000144 0000A0E3 MOV R0,#+0 \ 00000148 2E0100EF SWI +302 \ 0000014C 00A0A0E1 MOV R10,R0 \ 00000150 0300A0E3 MOV R0,#+3 \ 00000154 C50100EF SWI +453 \ 00000158 08008DE5 STR R0,[SP, #+8] \ 0000015C 888100EF SWI +33160 \ 00000160 00B0A0E1 MOV R11,R0 \ 00000164 0800A0E3 MOV R0,#+8 \ 00000168 C50100EF SWI +453 \ 0000016C 00022DE9 PUSH {R9} \ 00000170 00042DE9 PUSH {R10} \ 00000174 2010A0E3 MOV R1,#+32 \ 00000178 02002DE9 PUSH {R1} \ 0000017C 01304BE2 SUB R3,R11,#+1 \ 00000180 000180E0 ADD R0,R0,R0, LSL #+2 \ 00000184 0710A0E3 MOV R1,#+7 \ 00000188 02002DE9 PUSH {R1} \ 0000018C 18209DE5 LDR R2,[SP, #+24] \ 00000190 0A1046E2 SUB R1,R6,#+10 \ 00000194 021041E0 SUB R1,R1,R2 \ 00000198 031041E2 SUB R1,R1,#+3 \ 0000019C 02002DE9 PUSH {R1} \ 000001A0 0A1046E2 SUB R1,R6,#+10 \ 000001A4 000041E0 SUB R0,R1,R0 \ 000001A8 012080E2 ADD R2,R0,#+1 \ 000001AC 340094E5 LDR R0,[R4, #+52] \ 000001B0 0110A0E3 MOV R1,#+1 \ 000001B4 4C0100EF SWI +332 4979 4980 4981 if(connect_state==3) \ 000001B8 342497E5 LDR R2,[R7, #+1076] \ 000001BC 4E0EA0E3 MOV R0,#+1248 \ 000001C0 011080E3 ORR R1,R0,#0x1 \ 000001C4 029080E3 ORR R9,R0,#0x2 \ 000001C8 030052E3 CMP R2,#+3 \ 000001CC 1CD08DE2 ADD SP,SP,#+28 \ 000001D0 2E00001A BNE ??DrawLoadScreen_1 \ 000001D4 0730D1E7 LDRB R3,[R1, +R7] \ 000001D8 0710D9E7 LDRB R1,[R9, +R7] \ 000001DC ........ LDR R9,??DataTable191 ;; Auto_Status \ 000001E0 0720D0E7 LDRB R2,[R0, +R7] \ 000001E4 009099E5 LDR R9,[R9, #+0] \ 000001E8 340094E5 LDR R0,[R4, #+52] \ 000001EC 000059E3 CMP R9,#+0 \ 000001F0 2300000A BEQ ??DrawLoadScreen_2 4982 { 4983 if(Auto_Status) 4984 { 4985 int m = (msg_away_timer*5)/60; \ 000001F4 089497E5 LDR R9,[R7, #+1032] \ 000001F8 ........ LDR R10,??DataTable194 ;; 0xffffffff88888889 \ 000001FC 099189E0 ADD R9,R9,R9, LSL #+2 \ 00000200 9AB9CCE0 SMULL R11,R12,R10,R9 4986 int s = (msg_away_timer*5)%60; 4987 int h = m/60; 4988 wsprintf(data->ws2,"Online: %02d:%02d:%02d not action %02d:%02d:%02d", uptime.hour, uptime.min, uptime.sec,h,m%60,s); \ 00000204 ........ LDR R11,??DataTable194 ;; 0xffffffff88888889 \ 00000208 09C08CE0 ADD R12,R12,R9 \ 0000020C CCC2A0E1 ASR R12,R12,#+5 \ 00000210 A9AF8CE0 ADD R10,R12,R9, LSR #+31 \ 00000214 99CBCEE0 SMULL R12,LR,R9,R11 \ 00000218 3CC0A0E3 MOV R12,#+60 \ 0000021C 09E08EE0 ADD LR,LR,R9 \ 00000220 CEE2A0E1 ASR LR,LR,#+5 \ 00000224 A9EF8EE0 ADD LR,LR,R9, LSR #+31 \ 00000228 9C0E0EE0 MUL LR,R12,LR \ 0000022C 0E9049E0 SUB R9,R9,LR \ 00000230 00022DE9 PUSH {R9} \ 00000234 0B90A0E1 MOV R9,R11 \ 00000238 9AB9CCE0 SMULL R11,R12,R10,R9 \ 0000023C 3CB0A0E3 MOV R11,#+60 \ 00000240 0AC08CE0 ADD R12,R12,R10 \ 00000244 CCC2A0E1 ASR R12,R12,#+5 \ 00000248 AACF8CE0 ADD R12,R12,R10, LSR #+31 \ 0000024C 9B0C0CE0 MUL R12,R11,R12 \ 00000250 0C904AE0 SUB R9,R10,R12 \ 00000254 00022DE9 PUSH {R9} \ 00000258 ........ LDR R9,??DataTable194 ;; 0xffffffff88888889 \ 0000025C 99BACCE0 SMULL R11,R12,R9,R10 \ 00000260 0AC08CE0 ADD R12,R12,R10 \ 00000264 CCC2A0E1 ASR R12,R12,#+5 \ 00000268 AA9F8CE0 ADD R9,R12,R10, LSR #+31 \ 0000026C 00022DE9 PUSH {R9} \ 00000270 02002DE9 PUSH {R1} \ 00000274 411F88E2 ADD R1,R8,#+260 \ 00000278 240100EF SWI +292 \ 0000027C 10D08DE2 ADD SP,SP,#+16 \ 00000280 0A0000EA B ??DrawLoadScreen_3 4989 } 4990 else 4991 wsprintf(data->ws2,"Online: %02d:%02d:%02d",uptime.hour, uptime.min, uptime.sec); \ ??DrawLoadScreen_2: \ 00000284 02002DE9 PUSH {R1} \ 00000288 4E1F88E2 ADD R1,R8,#+312 \ 0000028C 050000EA B ??DrawLoadScreen_4 4992 } 4993 else 4994 wsprintf(data->ws2,"Offline [%02d:%02d:%02d]",uptime.hour, uptime.min, uptime.sec); \ ??DrawLoadScreen_1: \ 00000290 0720D9E7 LDRB R2,[R9, +R7] \ 00000294 04002DE9 PUSH {R2} \ 00000298 0730D1E7 LDRB R3,[R1, +R7] \ 0000029C 0720D0E7 LDRB R2,[R0, +R7] \ 000002A0 340094E5 LDR R0,[R4, #+52] \ 000002A4 541F88E2 ADD R1,R8,#+336 \ ??DrawLoadScreen_4: \ 000002A8 240100EF SWI +292 \ 000002AC 04D08DE2 ADD SP,SP,#+4 4995 4996 DrawString(data->ws2,1,scr_h-10- 3*GetFontYSIZE(FONT_SMALL_BOLD)+1,ScreenW()-1,scr_h - 10 - GetFontYSIZE(FONT_MEDIUM_BOLD)-3 4997 ,FONT_SMALL,TEXT_OUTLINE,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(1)); \ ??DrawLoadScreen_3: \ 000002B0 0100A0E3 MOV R0,#+1 \ 000002B4 2E0100EF SWI +302 \ 000002B8 0090A0E1 MOV R9,R0 \ 000002BC 0000A0E3 MOV R0,#+0 \ 000002C0 2E0100EF SWI +302 \ 000002C4 00A0A0E1 MOV R10,R0 \ 000002C8 0300A0E3 MOV R0,#+3 \ 000002CC C50100EF SWI +453 \ 000002D0 00008DE5 STR R0,[SP, #+0] \ 000002D4 888100EF SWI +33160 \ 000002D8 00B0A0E1 MOV R11,R0 \ 000002DC 0800A0E3 MOV R0,#+8 \ 000002E0 C50100EF SWI +453 \ 000002E4 00022DE9 PUSH {R9} \ 000002E8 00042DE9 PUSH {R10} 4998 4999 5000 wsprintf(data->ws2,percent_t,cltop ? lgpData[LGP_GrsKeyClist] : empty_str); \ 000002EC ........ LDR R9,??DataTable199 ;; lgpData \ 000002F0 2010A0E3 MOV R1,#+32 \ 000002F4 02002DE9 PUSH {R1} \ 000002F8 01304BE2 SUB R3,R11,#+1 \ 000002FC 800080E0 ADD R0,R0,R0, LSL #+1 5001 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5002 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT+TEXT_OUTLINE,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(1)); \ 00000300 C5B0A0E1 ASR R11,R5,#+1 \ 00000304 0710A0E3 MOV R1,#+7 \ 00000308 02002DE9 PUSH {R1} \ 0000030C 10209DE5 LDR R2,[SP, #+16] \ 00000310 0A1046E2 SUB R1,R6,#+10 \ 00000314 021041E0 SUB R1,R1,R2 \ 00000318 031041E2 SUB R1,R1,#+3 \ 0000031C 02002DE9 PUSH {R1} \ 00000320 0A1046E2 SUB R1,R6,#+10 \ 00000324 000041E0 SUB R0,R1,R0 \ 00000328 012080E2 ADD R2,R0,#+1 \ 0000032C 340094E5 LDR R0,[R4, #+52] \ 00000330 0110A0E3 MOV R1,#+1 \ 00000334 4C0100EF SWI +332 \ 00000338 000397E5 LDR R0,[R7, #+768] \ 0000033C 14D08DE2 ADD SP,SP,#+20 \ 00000340 000050E3 CMP R0,#+0 \ 00000344 340094E5 LDR R0,[R4, #+52] \ 00000348 68219915 LDRNE R2,[R9, #+360] \ 0000034C 0810A0E1 MOV R1,R8 \ 00000350 03208802 ADDEQ R2,R8,#+3 \ 00000354 240100EF SWI +292 \ 00000358 0100A0E3 MOV R0,#+1 \ 0000035C 2E0100EF SWI +302 \ 00000360 0070A0E1 MOV R7,R0 \ 00000364 0000A0E3 MOV R0,#+0 \ 00000368 2E0100EF SWI +302 \ 0000036C 00A0A0E1 MOV R10,R0 \ 00000370 0300A0E3 MOV R0,#+3 \ 00000374 C50100EF SWI +453 \ 00000378 80002DE9 PUSH {R7} \ 0000037C 00042DE9 PUSH {R10} \ 00000380 2410A0E3 MOV R1,#+36 \ 00000384 02002DE9 PUSH {R1} \ 00000388 043045E2 SUB R3,R5,#+4 \ 0000038C 0310A0E3 MOV R1,#+3 \ 00000390 02002DE9 PUSH {R1} \ 00000394 041046E2 SUB R1,R6,#+4 \ 00000398 02002DE9 PUSH {R1} \ 0000039C 002041E0 SUB R2,R1,R0 \ 000003A0 340094E5 LDR R0,[R4, #+52] \ 000003A4 0B10A0E1 MOV R1,R11 \ 000003A8 4C0100EF SWI +332 5003 wsprintf(data->ws2,percent_t, lgpData[LGP_GrsKeyExit] ); \ 000003AC 340094E5 LDR R0,[R4, #+52] \ 000003B0 642199E5 LDR R2,[R9, #+356] \ 000003B4 0810A0E1 MOV R1,R8 \ 000003B8 240100EF SWI +292 5004 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5005 scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT+TEXT_OUTLINE,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(1)); \ 000003BC 0100A0E3 MOV R0,#+1 \ 000003C0 2E0100EF SWI +302 \ 000003C4 0050A0E1 MOV R5,R0 \ 000003C8 0000A0E3 MOV R0,#+0 \ 000003CC 2E0100EF SWI +302 \ 000003D0 0070A0E1 MOV R7,R0 \ 000003D4 0300A0E3 MOV R0,#+3 \ 000003D8 C50100EF SWI +453 \ 000003DC 20002DE9 PUSH {R5} \ 000003E0 80002DE9 PUSH {R7} \ 000003E4 2110A0E3 MOV R1,#+33 \ 000003E8 02002DE9 PUSH {R1} \ 000003EC 0B30A0E1 MOV R3,R11 \ 000003F0 0310A0E3 MOV R1,#+3 \ 000003F4 02002DE9 PUSH {R1} \ 000003F8 041046E2 SUB R1,R6,#+4 \ 000003FC 02002DE9 PUSH {R1} \ 00000400 002041E0 SUB R2,R1,R0 \ 00000404 340094E5 LDR R0,[R4, #+52] \ 00000408 0310A0E3 MOV R1,#+3 \ 0000040C 4C0100EF SWI +332 \ 00000410 28D08DE2 ADD SP,SP,#+40 5006 } \ 00000414 F18FBDE8 POP {R0,R4-R11,PC} ;; return \ ??DrawLoadScreen_0: \ 00000418 ........ DC32 percent_t 5007 5008 \ In segment CODE, align 4, keep-with-next 5009 void method0(MAIN_GUI *data) 5010 { \ method0: \ 00000000 30402DE9 PUSH {R4,R5,LR} 5011 #ifdef GUI_INTERFACE 5012 if(edchat_id) return;//если открыт чат \ 00000004 ........ LDR R5,??DataTable200 ;; popup \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 5C0495E5 LDR R0,[R5, #+1116] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 3080BD18 POPNE {R4,R5,PC} 5013 if(IsGuiOnTop(maingui_id)) \ 00000018 080395E5 LDR R0,[R5, #+776] \ 0000001C 350100EF SWI +309 \ 00000020 000050E3 CMP R0,#+0 \ 00000024 3080BD08 POPEQ {R4,R5,PC} 5014 { 5015 if(ShowLoadScreen) \ 00000028 480395E5 LDR R0,[R5, #+840] \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 0200000A BEQ ??method0_0 5016 { 5017 /* #ifdef ELKA 5018 DisableIconBar(0); 5019 #endif*/ 5020 DrawLoadScreen(data); \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 3040BDE8 POP {R4,R5,LR} ;; Pop \ 0000003C ........ B DrawLoadScreen ;; tailcall 5021 } 5022 else 5023 { 5024 #ifdef ELKA 5025 #ifdef ICONBAR 5026 DisableIconBar(0); 5027 #else 5028 DisableIconBar(1); 5029 #endif 5030 #endif 5031 DrawContactList(); \ ??method0_0: \ 00000040 3040BDE8 POP {R4,R5,LR} ;; Pop \ 00000044 ........ B DrawContactList ;; tailcall 5032 } 5033 } 5034 #else 5035 DrawLoadScreen(data); 5036 #endif 5037 } 5038 5039 \ In segment CODE, align 4, keep-with-next 5040 void method1(MAIN_GUI *data,void *(*malloc_adr)(int)) 5041 { \ method1: \ 00000000 30402DE9 PUSH {R4,R5,LR} 5042 data->ws1=AllocWS(256); 5043 data->ws2=AllocWS(256); 5044 #ifdef GUI_INTERFACE 5045 // extern void LoadImages(); 5046 // LoadImages(); 5047 scr_w = ScreenW()-1; \ 00000004 ........ LDR R5,??DataTable200 ;; popup \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 400FA0E3 MOV R0,#+256 \ 00000010 250100EF SWI +293 \ 00000014 300084E5 STR R0,[R4, #+48] \ 00000018 400FA0E3 MOV R0,#+256 \ 0000001C 250100EF SWI +293 \ 00000020 340084E5 STR R0,[R4, #+52] \ 00000024 888100EF SWI +33160 \ 00000028 010040E2 SUB R0,R0,#+1 \ 0000002C 940485E5 STR R0,[R5, #+1172] 5048 scr_h = ScreenH()-1; \ 00000030 898100EF SWI +33161 \ 00000034 010040E2 SUB R0,R0,#+1 \ 00000038 980485E5 STR R0,[R5, #+1176] 5049 clistm = malloc(sizeof(GUIMENU)); \ 0000003C 7800A0E3 MOV R0,#+120 \ 00000040 140000EF SWI +20 \ 00000044 4C0385E5 STR R0,[R5, #+844] 5050 5051 clistm->font = ClFont; \ 00000048 ........ LDR R0,??DataTable226 ;; ClFont \ 0000004C 4C1395E5 LDR R1,[R5, #+844] \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 1C0081E5 STR R0,[R1, #+28] 5052 clistm->FontH = FontH(ClFont); \ 00000058 C50100EF SWI +453 \ 0000005C 4C1395E5 LDR R1,[R5, #+844] \ 00000060 200081E5 STR R0,[R1, #+32] 5053 5054 menu_sk[0].lgp_id=(int)lgpData[LGP_Select]; \ 00000064 ........ LDR R0,??DataTable199 ;; lgpData \ 00000068 301090E5 LDR R1,[R0, #+48] 5055 menu_sk[1].lgp_id=(int)lgpData[LGP_Close]; \ 0000006C 200090E5 LDR R0,[R0, #+32] \ 00000070 BC1285E5 STR R1,[R5, #+700] \ 00000074 C40285E5 STR R0,[R5, #+708] 5056 5057 //char s[128]; 5058 //sprintf(s,"%s\\bg.png",ICON_PATH); 5059 //BGpic = get_file_size(s); 5060 myack = malloc(sizeof(ACKED)); \ 00000078 0800A0E3 MOV R0,#+8 \ 0000007C 140000EF SWI +20 \ 00000080 900485E5 STR R0,[R5, #+1168] 5061 clistm->totalItems = 0;//CountContacts(); //общее кол-во контактов \ 00000084 4C0395E5 LDR R0,[R5, #+844] \ 00000088 0010A0E3 MOV R1,#+0 \ 0000008C 081080E5 STR R1,[R0, #+8] 5062 clistm->startItem = 0; \ 00000090 141080E5 STR R1,[R0, #+20] 5063 clistm->curpos = 0; \ 00000094 001080E5 STR R1,[R0, #+0] 5064 //InitCLSet(); 5065 #endif 5066 data->gui.state=1; \ 00000098 0100A0E3 MOV R0,#+1 \ 0000009C 0C00C4E5 STRB R0,[R4, #+12] 5067 } \ 000000A0 3080BDE8 POP {R4,R5,PC} ;; return 5068 \ In segment CODE, align 4, keep-with-next 5069 void method2(MAIN_GUI *data,void (*mfree_adr)(void *)) 5070 { \ method2: \ 00000000 70402DE9 PUSH {R4-R6,LR} 5071 5072 FreeWS(data->ws1); 5073 FreeWS(data->ws2); 5074 #ifdef GUI_INTERFACE 5075 if(clistm) mfree(clistm); \ 00000004 ........ LDR R5,??DataTable200 ;; popup \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 300094E5 LDR R0,[R4, #+48] \ 00000010 290100EF SWI +297 \ 00000014 340094E5 LDR R0,[R4, #+52] \ 00000018 290100EF SWI +297 \ 0000001C 4C0395E5 LDR R0,[R5, #+844] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 0000000A BEQ ??method2_0 \ 00000028 150000EF SWI +21 5076 clistm = NULL; 5077 if(myack) mfree(myack); \ ??method2_0: \ 0000002C 900495E5 LDR R0,[R5, #+1168] \ 00000030 0060A0E3 MOV R6,#+0 \ 00000034 4C6385E5 STR R6,[R5, #+844] \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 0000000A BEQ ??method2_1 \ 00000040 150000EF SWI +21 5078 myack = NULL; \ ??method2_1: \ 00000044 906485E5 STR R6,[R5, #+1168] 5079 #ifdef ELKA 5080 if(strlen(SoftShot.bitmap)) mfree(SoftShot.bitmap); 5081 if(strlen(HeaderShot.bitmap)) mfree(HeaderShot.bitmap); 5082 #endif 5083 #endif 5084 data->gui.state=0; \ 00000048 0C60C4E5 STRB R6,[R4, #+12] 5085 } \ 0000004C 7080BDE8 POP {R4-R6,PC} ;; return 5086 \ In segment CODE, align 4, keep-with-next 5087 void method3(MAIN_GUI *data,void *(*malloc_adr)(int),void (*mfree_adr)(void *)) 5088 { \ method3: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5089 // InitCLSet(); 5090 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 5091 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 5092 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 5093 \ In segment CODE, align 4, keep-with-next 5094 void method4(MAIN_GUI *data,void (*mfree_adr)(void *)) 5095 { 5096 if (data->gui.state!=2) \ method4: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 5097 return; 5098 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 5099 } \ 00000010 1EFF2FE1 BX LR ;; return 5100 5101 \ In segment CODE, align 4, keep-with-next 5102 int LoadOnKey(GUI_MSG *msg) 5103 { \ LoadOnKey: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 0CD04DE2 SUB SP,SP,#+12 \ 00000008 0040A0E1 MOV R4,R0 5104 DirectRedrawGUI(); \ 0000000C 3F0100EF SWI +319 5105 if (msg->gbsmsg->msg==KEY_DOWN) \ 00000010 04E094E5 LDR LR,[R4, #+4] \ 00000014 9310A0E3 MOV R1,#+147 \ 00000018 F200DEE1 LDRSH R0,[LR, #+2] \ 0000001C 401F81E3 ORR R1,R1,#0x100 \ 00000020 010050E1 CMP R0,R1 \ 00000024 5A00001A BNE ??LoadOnKey_1 5106 { 5107 switch(msg->gbsmsg->submess) \ 00000028 ........ LDR R4,??DataTable221 ;; popup \ 0000002C 04E09EE5 LDR LR,[LR, #+4] \ 00000030 488394E5 LDR R8,[R4, #+840] \ 00000034 ........ LDR R5,??DataTable229 ;; create_connect \ 00000038 ........ LDR R1,??DataTable235 ;; end_socket \ 0000003C 1800A0E3 MOV R0,#+24 \ 00000040 680D80E3 ORR R0,R0,#0x1A00 \ 00000044 046080E0 ADD R6,R0,R4 \ 00000048 ........ LDR R0,??DataTable204 ;; WriteDefSettings \ 0000004C 0020E0E3 MVN R2,#+0 \ 00000050 0370A0E3 MOV R7,#+3 \ 00000054 0030A0E3 MOV R3,#+0 \ 00000058 01C0A0E3 MOV R12,#+1 \ 0000005C 01E04EE2 SUB LR,LR,#+1 \ 00000060 33005EE3 CMP LR,#+51 \ 00000064 4A00008A BHI ??LoadOnKey_1 \ 00000068 019F8FE2 ADR R9,??LoadOnKey_0 \ 0000006C 0E90D9E7 LDRB R9,[R9, LR] \ 00000070 09F18FE0 ADD PC,PC,R9, LSL #+2 \ ??LoadOnKey_0: \ 00000074 0C474711 DC8 +12,+71,+71,+17 \ 00000078 47474747 DC8 +71,+71,+71,+71 \ 0000007C 47471B41 DC8 +71,+71,+27,+65 \ 00000080 47474747 DC8 +71,+71,+71,+71 \ 00000084 47474747 DC8 +71,+71,+71,+71 \ 00000088 47474747 DC8 +71,+71,+71,+71 \ 0000008C 47474747 DC8 +71,+71,+71,+71 \ 00000090 47474747 DC8 +71,+71,+71,+71 \ 00000094 47474747 DC8 +71,+71,+71,+71 \ 00000098 47474747 DC8 +71,+71,+71,+71 \ 0000009C 47474747 DC8 +71,+71,+71,+71 \ 000000A0 47474726 DC8 +71,+71,+71,+38 \ 000000A4 2A31363C DC8 +42,+49,+54,+60 5108 { 5109 case LEFT_SOFT: 5110 #ifdef GUI_INTERFACE 5111 if(ShowLoadScreen) return(1);//Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI \ ??LoadOnKey_2: \ 000000A8 000058E3 CMP R8,#+0 \ 000000AC 0100A013 MOVNE R0,#+1 \ 000000B0 FE83BD18 POPNE {R1-R9,PC} 5112 else ShowLoadScreen=1; \ 000000B4 48C384E5 STR R12,[R4, #+840] \ 000000B8 010000EA B ??LoadOnKey_3 5113 #else 5114 return 1; 5115 #endif 5116 case RIGHT_SOFT: 5117 // if (cltop) remake_clmenu(); 5118 #ifdef GUI_INTERFACE 5119 if(ShowLoadScreen && (cltop || sock==-1)) ShowLoadScreen=0;//показывть контакт лист \ ??LoadOnKey_4: \ 000000BC 000058E3 CMP R8,#+0 \ 000000C0 3300000A BEQ ??LoadOnKey_1 \ ??LoadOnKey_3: \ 000000C4 000394E5 LDR R0,[R4, #+768] \ 000000C8 000050E3 CMP R0,#+0 \ 000000CC 0200001A BNE ??LoadOnKey_5 \ 000000D0 380494E5 LDR R0,[R4, #+1080] \ 000000D4 020050E1 CMP R0,R2 \ 000000D8 2D00001A BNE ??LoadOnKey_1 \ ??LoadOnKey_5: \ 000000DC 483384E5 STR R3,[R4, #+840] \ 000000E0 130000EA B ??LoadOnKey_6 5120 #else 5121 if (cltop) create_contactlist_menu(); 5122 #endif 5123 break; 5124 case GREEN_BUTTON: 5125 disautorecconect=0; \ ??LoadOnKey_7: \ 000000E4 F83384E5 STR R3,[R4, #+1016] 5126 if ((connect_state==0)&&(sock==-1)) \ 000000E8 340494E5 LDR R0,[R4, #+1076] \ 000000EC 000050E3 CMP R0,#+0 \ 000000F0 38049405 LDREQ R0,[R4, #+1080] \ 000000F4 02005001 CMPEQ R0,R2 \ 000000F8 2500001A BNE ??LoadOnKey_1 5127 { 5128 GBS_DelTimer(&reconnect_tmr); \ ??LoadOnKey_8: \ 000000FC 0600A0E1 MOV R0,R6 \ 00000100 8C0100EF SWI +396 5129 DNR_TRIES=3; \ 00000104 687484E5 STR R7,[R4, #+1128] 5130 SUBPROC((void *)create_connect); \ 00000108 0500A0E1 MOV R0,R5 \ 0000010C 070000EA B ??LoadOnKey_9 5131 } 5132 break; 5133 case '0': 5134 disautorecconect=0; \ ??LoadOnKey_10: \ 00000110 F83384E5 STR R3,[R4, #+1016] 5135 SUBPROC((void*)end_socket); \ 00000114 0100A0E1 MOV R0,R1 \ 00000118 710100EF SWI +369 5136 GBS_DelTimer(&reconnect_tmr); \ 0000011C F6FFFFEA B ??LoadOnKey_8 5137 DNR_TRIES=3; 5138 SUBPROC((void *)create_connect); 5139 break; 5140 case '1': 5141 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??LoadOnKey_11: \ 00000120 201394E5 LDR R1,[R4, #+800] \ 00000124 000051E3 CMP R1,#+0 \ 00000128 00C0A013 MOVNE R12,#+0 \ 0000012C 20C384E5 STR R12,[R4, #+800] 5142 SUBPROC((void*)WriteDefSettings); \ ??LoadOnKey_9: \ 00000130 710100EF SWI +369 \ ??LoadOnKey_6: \ 00000134 0000A0E3 MOV R0,#+0 \ 00000138 FE83BDE8 POP {R1-R9,PC} 5143 break; 5144 case '2': 5145 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??LoadOnKey_12: \ 0000013C 1C1394E5 LDR R1,[R4, #+796] \ 00000140 000051E3 CMP R1,#+0 \ 00000144 00C0A013 MOVNE R12,#+0 \ 00000148 1CC384E5 STR R12,[R4, #+796] 5146 SUBPROC((void*)WriteDefSettings); \ 0000014C F7FFFFEA B ??LoadOnKey_9 5147 break; 5148 case '3': 5149 if(CurrentPrivateStatus!=1) \ ??LoadOnKey_13: \ 00000150 040494E5 LDR R0,[R4, #+1028] \ 00000154 010050E3 CMP R0,#+1 \ 00000158 0300A003 MOVEQ R0,#+3 5150 { 5151 SetPrivateStatus(1);//Инвиз \ 0000015C 0100A013 MOVNE R0,#+1 \ 00000160 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA \ 00000164 F2FFFFEA B ??LoadOnKey_6 5152 } 5153 else 5154 { 5155 SetPrivateStatus(3); 5156 } 5157 break; 5158 case '4': 5159 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??LoadOnKey_14: \ 00000168 181394E5 LDR R1,[R4, #+792] \ 0000016C 000051E3 CMP R1,#+0 \ 00000170 00C0A013 MOVNE R12,#+0 \ 00000174 18C384E5 STR R12,[R4, #+792] 5160 SUBPROC((void*)WriteDefSettings); \ 00000178 ECFFFFEA B ??LoadOnKey_9 5161 break; 5162 case RED_BUTTON: 5163 // extern volatile int disautorecconect; 5164 disautorecconect=1; \ ??LoadOnKey_15: \ 0000017C F8C384E5 STR R12,[R4, #+1016] 5165 extern void end_socket(void); 5166 SUBPROC((void*)end_socket); \ 00000180 0100A0E1 MOV R0,R1 \ 00000184 710100EF SWI +369 5167 ShowMSG(1,(int)"Disconnect!"); \ 00000188 0C109FE5 LDR R1,??LoadOnKey_16 ;; `?` \ 0000018C 0100A0E3 MOV R0,#+1 \ 00000190 480100EF SWI +328 5168 break; 5169 } 5170 } 5171 return(0); \ ??LoadOnKey_1: \ 00000194 0000A0E3 MOV R0,#+0 \ 00000198 FE83BDE8 POP {R1-R9,PC} ;; return \ ??LoadOnKey_16: \ 0000019C ........ DC32 `?` 5172 } 5173 5174 \ In segment CODE, align 4, keep-with-next 5175 int method5(MAIN_GUI *data,GUI_MSG *msg) 5176 { \ method5: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0140A0E1 MOV R4,R1 5177 DirectRedrawGUI(); \ 00000008 3F0100EF SWI +319 5178 #ifdef GUI_INTERFACE 5179 if(ShowLoadScreen) \ 0000000C 20009FE5 LDR R0,??method5_0 ;; popup + 840 \ 00000010 000090E5 LDR R0,[R0, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0400A0E1 MOV R0,R4 \ 0000001C 0100000A BEQ ??method5_1 5180 return LoadOnKey(msg); \ 00000020 1040BDE8 POP {R4,LR} ;; Pop \ 00000024 ........ B LoadOnKey ;; tailcall 5181 else 5182 ClOnKey(msg); \ ??method5_1: \ 00000028 ........ BL ClOnKey 5183 return(0); \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 1080BDE8 POP {R4,PC} ;; return \ ??method5_0: \ 00000034 ........ DC32 popup + 840 5184 #else 5185 return LoadOnKey(msg); 5186 #endif 5187 } 5188 \ In segment CODE, align 4, keep-with-next 5189 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 5190 \ In segment CODE, align 4, keep-with-next 5191 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 5192 5193 const void * const gui_methods[11]={ 5194 (void *)method0, //Redraw 5195 (void *)method1, //Create 5196 (void *)method2, //Close 5197 (void *)method3, //Focus 5198 (void *)method4, //Unfocus 5199 (void *)method5, //OnKey 5200 0, 5201 (void *)kill_data, //method7, //Destroy 5202 (void *)method8, 5203 (void *)method9, 5204 0 5205 }; 5206 5207 GBSTMR OneSecTmr; \ In segment CODE, align 4, keep-with-next 5208 void OneSecondTimer() 5209 { 5210 tmr_gipc.name_to=ipc_my_name; \ OneSecondTimer: \ 00000000 ........ LDR R2,??DataTable222 ;; Canvas \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 ........ LDR R4,??DataTable221 ;; popup \ 0000000C B70FA0E3 MOV R0,#+732 \ 00000010 9B1FA0E3 MOV R1,#+620 \ 00000014 023081E0 ADD R3,R1,R2 \ 00000018 043080E7 STR R3,[R0, +R4] 5211 tmr_gipc.name_from=ipc_my_name; \ 0000001C 021081E0 ADD R1,R1,R2 \ 00000020 E01284E5 STR R1,[R4, #+736] 5212 tmr_gipc.data=NULL; \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 E41284E5 STR R1,[R4, #+740] 5213 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_ONESECOND,&tmr_gipc); \ 0000002C 043080E0 ADD R3,R0,R4 \ 00000030 0820A0E3 MOV R2,#+8 \ 00000034 F210A0E3 MOV R1,#+242 \ 00000038 C01F81E3 ORR R1,R1,#0x300 \ 0000003C 0900A0E3 MOV R0,#+9 \ 00000040 420C80E3 ORR R0,R0,#0x4200 \ 00000044 000100EF SWI +256 5214 GBS_StartTimerProc(&OneSecTmr,TMR_SECOND,OneSecondTimer); \ 00000048 ........ LDR R2,??DataTable209 ;; OneSecondTimer \ 0000004C D810A0E3 MOV R1,#+216 \ 00000050 8C00A0E3 MOV R0,#+140 \ 00000054 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000058 040080E0 ADD R0,R0,R4 \ 0000005C 4D0000EF SWI +77 5215 } \ 00000060 1080BDE8 POP {R4,PC} ;; return \ In segment DATA_C, align 4, align-sorted 5216 5217 5218 const RECT Canvas={0,0,0,0}; \ Canvas: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ percent_d: \ 00000008 256400 DC8 "%d" \ _d: \ 0000000B 256400 DC8 "%d" \ _s: \ 0000000E 257300 DC8 "%s" \ 00000011 000000 DC8 0, 0, 0 \ 00000014 536F756E6420 DC8 "Sound 0n" \ 306E00 \ 0000001D 000000 DC8 0, 0, 0 \ 00000020 536F756E6420 DC8 "Sound Off" \ 4F666600 \ 0000002A 0000 DC8 0, 0 \ 0000002C 566962726120 DC8 "Vibra On" \ 4F6E00 \ 00000035 000000 DC8 0, 0, 0 \ 00000038 566962726120 DC8 "Vibra Off" \ 4F666600 \ 00000042 0000 DC8 0, 0 \ 00000044 C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\352\353\376\367\345\355" \ E2EAEBFEF7E5 \ ED00 \ 00000052 0000 DC8 0, 0 \ 00000054 C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\373\352\353\376\367\345\355" \ E2FBEAEBFEF7 \ E5ED00 \ 00000063 00 DC8 0 \ 00000064 566962726120 DC8 "Vibra rem On" \ 72656D204F6E \ 00 \ 00000071 000000 DC8 0, 0, 0 \ 00000074 566962726120 DC8 "Vibra rem Off" \ 72656D204F66 \ 6600 \ 00000082 0000 DC8 0, 0 \ 00000084 416C6C206368 DC8 "All chat clear!" \ 617420636C65 \ 61722100 \ 00000094 CEF4F4EBE0E9 DC8 "\316\364\364\353\340\351\355 \352\356\355\362\340\352\362\373\012\342\352\353\376\367\345\355\373" \ ED20EAEEEDF2 \ E0EAF2FB0AE2 \ EAEBFEF7E5ED \ FB00 \ 000000AE 0000 DC8 0, 0 \ 000000B0 CEF4F4EBE0E9 DC8 "\316\364\364\353\340\351\355 \352\356\355\362\340\352\362\373\012\356\362\352\353\376\367\345\355\373" \ ED20EAEEEDF2 \ E0EAF2FB0AEE \ F2EAEBFEF7E5 \ EDFB00 \ 000000CB 00 DC8 0 \ 000000CC C3F0F3EFEFFB DC8 "\303\360\363\357\357\373 \342\352\353\376\367\345\355\373" \ 20E2EAEBFEF7 \ E5EDFB00 \ 000000DC C3F0F3EFEFFB DC8 "\303\360\363\357\357\373 \356\362\352\353\376\367\345\355\373" \ 20EEF2EAEBFE \ F7E5EDFB00 \ 000000ED 000000 DC8 0, 0, 0 \ 000000F0 2025733A2025 DC8 " %s: %02d:%02d:%02d" \ 3032643A2530 \ 32643A253032 \ 6400 \ 00000104 537461747573 DC8 "Status change" \ 206368616E67 \ 6500 \ 00000112 0000 DC8 0, 0 \ 00000114 5B25733A2025 DC8 "[%s: %s]\012" \ 735D0A00 \ 0000011E 0000 DC8 0, 0 \ 00000120 6F6E6C696E65 DC8 "online\\%u" \ 5C257500 \ 0000012A 0000 DC8 0, 0 \ 0000012C 5C616E746973 DC8 "\\antispam.log" \ 70616D2E6C6F \ 6700 \ 0000013A 0000 DC8 0, 0 \ 0000013C 253032643A25 DC8 25H, 30H, 32H, 64H, 3AH, 25H, 30H, 32H \ 3032 \ 00000144 643A25303264 DC8 64H, 3AH, 25H, 30H, 32H, 64H, 20H, 25H \ 2025 \ 0000014C 3032642E2530 DC8 30H, 32H, 64H, 2EH, 25H, 30H, 32H, 64H \ 3264 \ 00000154 2E2530346420 DC8 2EH, 25H, 30H, 34H, 64H, 20H, 41H, 75H \ 4175 \ 0000015C 746820524551 DC8 74H, 68H, 20H, 52H, 45H, 51H, 20H, 6EH \ 206E \ 00000164 6F6E616D6520 DC8 6FH, 6EH, 61H, 6DH, 65H, 20H, 63H, 6FH \ 636F \ 0000016C 6E7461637420 DC8 6EH, 74H, 61H, 63H, 74H, 20H, 62H, 6CH \ 626C \ 00000174 6F636B656420 DC8 6FH, 63H, 6BH, 65H, 64H, 20H, 3DH, 29H \ 3D29 \ 0000017C 202875696E20 DC8 20H, 28H, 75H, 69H, 6EH, 20H, 25H, 64H \ 2564 \ 00000184 202573290A00 DC8 20H, 25H, 73H, 29H, 0AH, 0 \ 0000018A 0000 DC8 0, 0 \ 0000018C 426C6F636B20 DC8 "Block spam" \ 7370616D00 \ 00000197 00 DC8 0 \ 00000198 417574682052 DC8 "Auth REQ: " \ 45513A2000 \ 000001A3 00 DC8 0 \ 000001A4 2825642F2564 DC8 "(%d/%d)" \ 2900 \ 000001AC 25732825642F DC8 "%s(%d/%d)" \ 25642900 \ 000001B6 0000 DC8 0, 0 \ 000001B8 4E6174494351 DC8 "NatICQ config updated!" \ 20636F6E6669 \ 672075706461 \ 7465642100 \ 000001CF 00 DC8 0 \ 000001D0 4750525320F1 DC8 47H, 50H, 52H, 53H, 20H, 0F1H, 0E5H, 0F1H \ E5F1 \ 000001D8 F1E8FF20E7E0 DC8 0F1H, 0E8H, 0FFH, 20H, 0E7H, 0E0H, 0EFH, 0F3H \ EFF3 \ 000001E0 F9E5EDE02C20 DC8 0F9H, 0E5H, 0EDH, 0E0H, 2CH, 20H, 0EFH, 0EEH \ EFEE \ 000001E8 E4EAEBFEF7E5 DC8 0E4H, 0EAH, 0EBH, 0FEH, 0F7H, 0E5H, 0EDH, 0E8H \ EDE8 \ 000001F0 E520F7E5F0E5 DC8 0E5H, 20H, 0F7H, 0E5H, 0F0H, 0E5H, 0E7H, 20H \ E720 \ 000001F8 256420F1E5EA DC8 25H, 64H, 20H, 0F1H, 0E5H, 0EAH, 0F3H, 0EDH \ F3ED \ 00000200 E42E2E2E00 DC8 0E4H, 2EH, 2EH, 2EH, 0 \ 00000205 000000 DC8 0, 0, 0 \ 00000208 54727920746F DC8 "Try to login..." \ 206C6F67696E \ 2E2E2E00 \ 00000218 446973636F6E DC8 "Disconnected, %d bytes not sended!" \ 6E6563746564 \ 2C2025642062 \ 79746573206E \ 6F742073656E \ 6465642100 \ 0000023B 00 DC8 0 \ 0000023C 25730ACEF8E8 DC8 "%s\012\316\370\350\341\352\340, \357\345\360\345\357\356\344\352\353\376\367\345\355\350\345 \367\345\360\345\347 %d \361\345\352\363\355\344..." \ E1EAE02C20EF \ E5F0E5EFEEE4 \ EAEBFEF7E5ED \ E8E520F7E5F0 \ E5E720256420 \ F1E5EAF3EDE4 \ 2E2E2E00 \ 0000026A 0000 DC8 0, 0 \ ipc_my_name: \ 0000026C 4E6174494351 DC8 "NatICQ" \ 00 \ 00000273 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000283 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000 \ ipc_xtask_name: \ 0000028C 585461736B00 DC8 "XTask" \ 00000292 0000 DC8 0, 0 \ x_status_change: \ 00000294 582D53746174 DC8 "X-Status change" \ 757320636861 \ 6E676500 \ gui_methods: \ 000002A4 ............ DC32 method0, method1, method2, method3, method4, method5, 0H \ ............ \ ............ \ ............ \ 00000000 \ 000002C0 ............ DC32 kill_data, method8, method9, 0H \ ............ \ 00000000 \ 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 \ percent_t: \ 00000000 257400 DC8 "%t" \ empty_str: \ 00000003 00 DC8 "" \ 00000004 253032642025 DC8 "%02d %s" \ 7300 \ 0000000C F7E0F1E000 DC8 "\367\340\361\340" \ 00000011 000000 DC8 0, 0, 0 \ 00000014 F7E0F1EEE200 DC8 "\367\340\361\356\342" \ 0000001A 0000 DC8 0, 0 \ 0000001C ECE8EDF3F2F3 DC8 "\354\350\355\363\362\363" \ 00 \ 00000023 00 DC8 0 \ 00000024 ECE8EDF3F2FB DC8 "\354\350\355\363\362\373" \ 00 \ 0000002B 00 DC8 0 \ 0000002C ECE8EDF3F200 DC8 "\354\350\355\363\362" \ 00000032 0000 DC8 0, 0 \ 00000034 C0E2F2EEEEF2 DC8 0C0H, 0E2H, 0F2H, 0EEH, 0EEH, 0F2H, 0E2H, 0E5H \ E2E5 \ 0000003C F2F7E8EA3A20 DC8 0F2H, 0F7H, 0E8H, 0EAH, 3AH, 20H, 25H, 73H \ 2573 \ 00000044 202573212025 DC8 20H, 25H, 73H, 21H, 20H, 25H, 73H, 20H \ 7320 \ 0000004C 28202573205B DC8 28H, 20H, 25H, 73H, 20H, 5BH, 0E1H, 0E5H \ E1E5 \ 00000054 E7E4E5F1F2E2 DC8 0E7H, 0E4H, 0E5H, 0F1H, 0F2H, 0E2H, 0F3H, 0FEH \ F3FE \ 0000005C 202573202530 DC8 20H, 25H, 73H, 20H, 25H, 30H, 32H, 64H \ 3264 \ 00000064 202573202530 DC8 20H, 25H, 73H, 20H, 25H, 30H, 32H, 64H \ 3264 \ 0000006C 2025735D2029 DC8 20H, 25H, 73H, 5DH, 20H, 29H, 0 \ 00 \ 00000073 00 DC8 0 \ 00000074 F1E5EAF3EDE4 DC8 "\361\345\352\363\355\344" \ 00 \ 0000007B 00 DC8 0 \ 0000007C 53656E642061 DC8 "Send autoaway text..." \ 75746F617761 \ 792074657874 \ 2E2E2E00 \ 00000092 0000 DC8 0, 0 \ 00000094 25642F256400 DC8 "%d/%d" \ 0000009A 0000 DC8 0, 0 \ 0000009C 5B25642F2564 DC8 "[%d/%d]" \ 5D00 \ 000000A4 53746174653A DC8 53H, 74H, 61H, 74H, 65H, 3AH, 20H, 25H \ 2025 \ 000000AC 642C20525873 DC8 64H, 2CH, 20H, 52H, 58H, 73H, 74H, 61H \ 7461 \ 000000B4 74653A202564 DC8 74H, 65H, 3AH, 20H, 25H, 64H, 0AH, 52H \ 0A52 \ 000000BC 783A2564622C DC8 78H, 3AH, 25H, 64H, 62H, 2CH, 54H, 78H \ 5478 \ 000000C4 3A2564620A51 DC8 3AH, 25H, 64H, 62H, 0AH, 51H, 75H, 65H \ 7565 \ 000000CC 75653A202564 DC8 75H, 65H, 3AH, 20H, 25H, 64H, 62H, 0AH \ 620A \ 000000D4 25730A257400 DC8 25H, 73H, 0AH, 25H, 74H, 0 \ 000000DA 0000 DC8 0, 0 \ 000000DC 55696E3A2025 DC8 "Uin: %d\012Recv: %d Send: %d Blocked: %d" \ 640A52656376 \ 3A2025642053 \ 656E643A2025 \ 6420426C6F63 \ 6B65643A2025 \ 6400 \ 00000102 0000 DC8 0, 0 \ 00000104 4F6E6C696E65 DC8 4FH, 6EH, 6CH, 69H, 6EH, 65H, 3AH, 20H \ 3A20 \ 0000010C 253032643A25 DC8 25H, 30H, 32H, 64H, 3AH, 25H, 30H, 32H \ 3032 \ 00000114 643A25303264 DC8 64H, 3AH, 25H, 30H, 32H, 64H, 20H, 20H \ 2020 \ 0000011C 206E6F742061 DC8 20H, 6EH, 6FH, 74H, 20H, 61H, 63H, 74H \ 6374 \ 00000124 696F6E202530 DC8 69H, 6FH, 6EH, 20H, 25H, 30H, 32H, 64H \ 3264 \ 0000012C 3A253032643A DC8 3AH, 25H, 30H, 32H, 64H, 3AH, 25H, 30H \ 2530 \ 00000134 326400 DC8 32H, 64H, 0 \ 00000137 00 DC8 0 \ 00000138 4F6E6C696E65 DC8 "Online: %02d:%02d:%02d" \ 3A2025303264 \ 3A253032643A \ 2530326400 \ 0000014F 00 DC8 0 \ 00000150 4F66666C696E DC8 "Offline [%02d:%02d:%02d]" \ 65205B253032 \ 643A25303264 \ 3A253032645D \ 00 \ 00000169 000000 DC8 0, 0, 0 \ 0000016C 5B256425255D DC8 "[%d%%]" \ 00 \ 00000173 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ def_setting: \ 00000000 25736465665F DC8 "%sdef_settings_%d" \ 73657474696E \ 67735F256400 \ 00000012 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ menusoftkeys: \ 00000000 000000000100 DC32 0, 1, 2 \ 000002000000 \ In segment DATA_C, align 4, align-sorted \ menu_skt: \ 00000000 ........0000 DC32 menu_sk, 0 \ 0000 \ In segment DATA_C, align 1, align-sorted \ _t: \ 00000000 257400 DC8 "%t" \ In segment CODE, align 4, keep-with-next 5219 void maincsm_oncreate(CSM_RAM *data) 5220 { \ maincsm_oncreate: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0050A0E1 MOV R5,R0 5221 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000008 3C00A0E3 MOV R0,#+60 5222 MAIN_CSM*csm=(MAIN_CSM*)data; 5223 zeromem(main_gui,sizeof(MAIN_GUI)); 5224 patch_rect((RECT*)&Canvas,0,0,ScreenW()-1,ScreenH()-1); \ 0000000C 0060A0E3 MOV R6,#+0 \ 00000010 140000EF SWI +20 \ 00000014 0070A0E1 MOV R7,R0 \ 00000018 3C10A0E3 MOV R1,#+60 \ 0000001C 1D0100EF SWI +285 \ 00000020 898100EF SWI +33161 \ 00000024 0040A0E1 MOV R4,R0 \ 00000028 888100EF SWI +33160 \ 0000002C 011044E2 SUB R1,R4,#+1 \ 00000030 F4409FE5 LDR R4,??maincsm_oncreate_0 ;; Canvas \ 00000034 010040E2 SUB R0,R0,#+1 \ 00000038 006084E5 STR R6,[R4, #+0] \ 0000003C B400C4E1 STRH R0,[R4, #+4] \ 00000040 B610C4E1 STRH R1,[R4, #+6] 5225 main_gui->gui.canvas=(void *)(&Canvas); \ 00000044 004087E5 STR R4,[R7, #+0] 5226 // main_gui->gui.flag30=2; 5227 main_gui->gui.methods=(void *)gui_methods; \ 00000048 A90F84E2 ADD R0,R4,#+676 \ 0000004C 040087E5 STR R0,[R7, #+4] 5228 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000050 158000EF SWI +32789 \ 00000054 1C0087E5 STR R0,[R7, #+28] 5229 csm->csm.state=0; \ 00000058 106085E5 STR R6,[R5, #+16] 5230 csm->csm.unk1=0; \ 0000005C 146085E5 STR R6,[R5, #+20] 5231 maingui_id=csm->gui_id=CreateGUI(main_gui); \ 00000060 0700A0E1 MOV R0,R7 \ 00000064 370100EF SWI +311 \ 00000068 280085E5 STR R0,[R5, #+40] \ 0000006C ........ LDR R5,??DataTable221 ;; popup \ 00000070 080385E5 STR R0,[R5, #+776] 5232 5233 ews=AllocWS(16384); \ 00000074 400CA0E3 MOV R0,#+16384 \ 00000078 250100EF SWI +293 \ 0000007C 700385E5 STR R0,[R5, #+880] 5234 wsBuffer=AllocWS(4096); \ 00000080 400DA0E3 MOV R0,#+4096 \ 00000084 250100EF SWI +293 \ 00000088 400385E5 STR R0,[R5, #+832] 5235 // MutexCreate(&contactlist_mtx); 5236 //#ifndef START_OFFLINE 5237 DNR_TRIES = 3; \ 0000008C 0300A0E3 MOV R0,#+3 \ 00000090 680485E5 STR R0,[R5, #+1128] 5238 //#endif 5239 // SUBPROC((void *)InitSmiles); 5240 // SUBPROC((void *)create_connect); 5241 CountMessage[0] = 0; \ 00000094 E86285E5 STR R6,[R5, #+744] 5242 CountMessage[1] = 0; \ 00000098 EC6285E5 STR R6,[R5, #+748] 5243 5244 FreeAllList(); \ 0000009C ........ _BLF FreeAllList,??FreeAllList??rA 5245 5246 #ifdef GUI_INTERFACE 5247 GBS_StartTimerProc(&OneSecTmr,TMR_SECOND*10,OneSecondTimer); \ 000000A0 ........ LDR R2,??DataTable209 ;; OneSecondTimer \ 000000A4 871EA0E3 MOV R1,#+2160 \ 000000A8 8C00A0E3 MOV R0,#+140 \ 000000AC 6C0D80E3 ORR R0,R0,#0x1B00 \ 000000B0 050080E0 ADD R0,R0,R5 \ 000000B4 4D0000EF SWI +77 5248 #endif 5249 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 000000B8 ........ LDR R2,??DataTable210 ;; process_active_timer \ 000000BC 871EA0E3 MOV R1,#+2160 \ 000000C0 2800A0E3 MOV R0,#+40 \ 000000C4 680D80E3 ORR R0,R0,#0x1A00 \ 000000C8 050080E0 ADD R0,R0,R5 \ 000000CC 4D0000EF SWI +77 5250 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000D0 ........ LDR R0,??DataTable240 ;; UIN \ 000000D4 081084E2 ADD R1,R4,#+8 \ 000000D8 002090E5 LDR R2,[R0, #+0] \ 000000DC 7200A0E3 MOV R0,#+114 \ 000000E0 800F80E3 ORR R0,R0,#0x200 \ 000000E4 040080E0 ADD R0,R0,R4 \ 000000E8 160000EF SWI +22 5251 gipc.name_to=ipc_my_name; \ 000000EC B40FA0E3 MOV R0,#+720 \ 000000F0 9B1FA0E3 MOV R1,#+620 \ 000000F4 042081E0 ADD R2,R1,R4 \ 000000F8 052080E7 STR R2,[R0, +R5] 5252 gipc.name_from=ipc_my_name; \ 000000FC 041081E0 ADD R1,R1,R4 \ 00000100 D41285E5 STR R1,[R5, #+724] 5253 gipc.data=(void *)-1; \ 00000104 0610E0E1 MVN R1,R6 \ 00000108 D81285E5 STR R1,[R5, #+728] 5254 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 0000010C 053080E0 ADD R3,R0,R5 \ 00000110 0120A0E3 MOV R2,#+1 \ 00000114 F210A0E3 MOV R1,#+242 \ 00000118 C01F81E3 ORR R1,R1,#0x300 \ 0000011C 0900A0E3 MOV R0,#+9 \ 00000120 420C80E3 ORR R0,R0,#0x4200 \ 00000124 000100EF SWI +256 5255 } \ 00000128 F080BDE8 POP {R4-R7,PC} ;; return \ ??maincsm_oncreate_0: \ 0000012C ........ DC32 Canvas 5256 \ In segment CODE, align 4, keep-with-next 5257 void maincsm_onclose(CSM_RAM *csm) 5258 { \ maincsm_onclose: \ 00000000 10402DE9 PUSH {R4,LR} 5259 WriteDefSettings(); 5260 do_StatusChangeWrite(NULL, NULL, 1); 5261 GBS_DelTimer(&online_tmr); \ 00000004 ........ LDR R4,??DataTable212 ;; popup \ 00000008 ........ BL WriteDefSettings \ 0000000C 0120A0E3 MOV R2,#+1 \ 00000010 0010A0E3 MOV R1,#+0 \ 00000014 0000A0E3 MOV R0,#+0 \ 00000018 ........ _BLF do_StatusChangeWrite,??do_StatusChangeWrite??rA \ 0000001C 7C00A0E3 MOV R0,#+124 \ 00000020 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000024 040080E0 ADD R0,R0,R4 \ 00000028 8C0100EF SWI +396 5262 // GBS_DelTimer(&tmr_dorecv); 5263 5264 GBS_DelTimer(&OneSecTmr); \ 0000002C 8C00A0E3 MOV R0,#+140 \ 00000030 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 8C0100EF SWI +396 5265 GBS_DelTimer(&tmr_active); \ 0000003C 2800A0E3 MOV R0,#+40 \ 00000040 680D80E3 ORR R0,R0,#0x1A00 \ 00000044 040080E0 ADD R0,R0,R4 \ 00000048 8C0100EF SWI +396 5266 GBS_DelTimer(&tmr_vibra); \ 0000004C 0800A0E3 MOV R0,#+8 \ 00000050 680D80E3 ORR R0,R0,#0x1A00 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 8C0100EF SWI +396 5267 GBS_DelTimer(&reconnect_tmr); \ 0000005C 1800A0E3 MOV R0,#+24 \ 00000060 680D80E3 ORR R0,R0,#0x1A00 \ 00000064 040080E0 ADD R0,R0,R4 \ 00000068 8C0100EF SWI +396 5268 GBS_DelTimer(&tmr_illumination); \ 0000006C 8800A0E3 MOV R0,#+136 \ 00000070 600D80E3 ORR R0,R0,#0x1800 \ 00000074 040080E0 ADD R0,R0,R4 \ 00000078 8C0100EF SWI +396 5269 5270 5271 #ifdef ELKA 5272 GBS_DelTimer(&sli_tmr); 5273 #endif 5274 GBS_DelTimer(&remind_tmr); \ 0000007C F800A0E3 MOV R0,#+248 \ 00000080 640D80E3 ORR R0,R0,#0x1900 \ 00000084 040080E0 ADD R0,R0,R4 \ 00000088 8C0100EF SWI +396 5275 GBS_DelTimer(&popup[POPUP_ON].tmr); \ 0000008C 440084E2 ADD R0,R4,#+68 \ 00000090 8C0100EF SWI +396 5276 GBS_DelTimer(&popup[POPUP_OFF].tmr); \ 00000094 A40084E2 ADD R0,R4,#+164 \ 00000098 8C0100EF SWI +396 5277 GBS_DelTimer(&popup[POPUP_MSG].tmr); \ 0000009C 410F84E2 ADD R0,R4,#+260 \ 000000A0 8C0100EF SWI +396 5278 GBS_DelTimer(&away_tmr); \ 000000A4 E800A0E3 MOV R0,#+232 \ 000000A8 640D80E3 ORR R0,R0,#0x1900 \ 000000AC 040080E0 ADD R0,R0,R4 \ 000000B0 8C0100EF SWI +396 5279 5280 FreeAllList(); \ 000000B4 ........ _BLF FreeAllList,??FreeAllList??rA 5281 FreeWS(wsBuffer); \ 000000B8 400394E5 LDR R0,[R4, #+832] \ 000000BC 290100EF SWI +297 5282 5283 SetVibration(0); \ 000000C0 0000A0E3 MOV R0,#+0 \ 000000C4 7C0000EF SWI +124 5284 FreeTemplates(); \ 000000C8 ........ BL FreeTemplates 5285 FreeCLIST(); \ 000000CC ........ _BLF FreeCLIST,??FreeCLIST??rA 5286 free_ICONS(); \ 000000D0 ........ BL free_ICONS 5287 // FreeSmiles(); 5288 FreeWS(ews); \ 000000D4 700394E5 LDR R0,[R4, #+880] \ 000000D8 290100EF SWI +297 5289 FreeXStatusText(); \ 000000DC ........ _BLF FreeXStatusText,??FreeXStatusText??rA 5290 lgpFreeLangPack(); \ 000000E0 ........ _BLF lgpFreeLangPack,??lgpFreeLangPack??rA 5291 // MutexDestroy(&contactlist_mtx); 5292 /* SUBPROC((void *)FreeSmiles);// вызывается в FreeAllList() 5293 SUBPROC((void *)FreeXStatusesImg);*/ 5294 SUBPROC((void *)end_socket); \ 000000E4 ........ LDR R0,??DataTable235 ;; end_socket \ 000000E8 710100EF SWI +369 5295 SUBPROC((void *)ClearSendQ); \ 000000EC ........ LDR R0,??DataTable236 ;; ClearSendQ \ 000000F0 710100EF SWI +369 5296 SUBPROC((void *)ElfKiller); \ 000000F4 ........ LDR R0,??DataTable242 ;; ElfKiller \ 000000F8 710100EF SWI +369 5297 } \ 000000FC 1080BDE8 POP {R4,PC} ;; return 5298 \ In segment CODE, align 4, keep-with-next 5299 void do_reconnect(void) 5300 { 5301 if (is_gprs_online) \ do_reconnect: \ 00000000 ........ LDR R0,??DataTable221 ;; popup \ 00000004 00402DE9 PUSH {LR} \ 00000008 541490E5 LDR R1,[R0, #+1108] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 5302 { 5303 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 681480E5 STR R1,[R0, #+1128] 5304 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable229 ;; create_connect \ 00000020 710100EF SWI +369 5305 } 5306 } \ 00000024 0080BDE8 POP {PC} ;; return 5307 \ In segment CODE, align 4, keep-with-next 5308 void CheckDoubleRun(void) 5309 { \ CheckDoubleRun: \ 00000000 10402DE9 PUSH {R4,LR} 5310 int csm_id; 5311 if ((csm_id=(int)(gipc.data))!=-1) \ 00000004 ........ LDR R4,??DataTable221 ;; popup \ 00000008 B60FA0E3 MOV R0,#+728 \ 0000000C 041090E7 LDR R1,[R0, +R4] \ 00000010 010071E3 CMN R1,#+1 \ 00000014 1100000A BEQ ??CheckDoubleRun_0 5312 { 5313 gipc.name_to=ipc_xtask_name; \ 00000018 ........ LDR R3,??DataTable222 ;; Canvas \ 0000001C B42FA0E3 MOV R2,#+720 \ 00000020 A3CF83E2 ADD R12,R3,#+652 \ 00000024 04C082E7 STR R12,[R2, +R4] 5314 gipc.name_from=ipc_my_name; \ 00000028 9B3F83E2 ADD R3,R3,#+620 \ 0000002C D43284E5 STR R3,[R4, #+724] 5315 gipc.data=(void *)csm_id; \ 00000030 041080E7 STR R1,[R0, +R4] 5316 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 00000034 043082E0 ADD R3,R2,R4 \ 00000038 0220A0E3 MOV R2,#+2 \ 0000003C FC1F82E3 ORR R1,R2,#0x3F0 \ 00000040 0900A0E3 MOV R0,#+9 \ 00000044 420C80E3 ORR R0,R0,#0x4200 \ 00000048 000100EF SWI +256 5317 LockSched(); \ 0000004C 460100EF SWI +326 5318 CloseCSM(maincsm_id); \ 00000050 040394E5 LDR R0,[R4, #+772] \ 00000054 FC0100EF SWI +508 5319 //ShowMSG(1,(int)LG_ALREADY_STARTED); 5320 UnlockSched(); \ 00000058 470100EF SWI +327 \ 0000005C 1080BDE8 POP {R4,PC} 5321 } 5322 else 5323 { 5324 LoadingImages();//инициализируем все картинки \ ??CheckDoubleRun_0: \ 00000060 ........ _BLF LoadingImages,??LoadingImages??rA 5325 #ifndef START_OFFLINE 5326 create_connect(); 5327 #else 5328 LoadLocalCL(); \ 00000064 ........ _BLF LoadLocalCL,??LoadLocalCL??rA 5329 #endif 5330 } 5331 } \ 00000068 1080BDE8 POP {R4,PC} ;; return 5332 \ In segment CODE, align 4, keep-with-next 5333 int maincsm_onmessage(CSM_RAM *data,GBS_MSG *msg) 5334 { \ maincsm_onmessage: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} 5335 extern const int VIBR_ON_CONNECT; 5336 5337 #ifdef UP_BY_UNLOCK 5338 if(DEVELOP_IF == 3) //popup naticq by unlock 6.11.2009 \ 00000004 ........ LDR R0,??DataTable220 ;; DEVELOP_IF \ 00000008 ........ LDR R4,??DataTable221 ;; popup \ 0000000C 18D04DE2 SUB SP,SP,#+24 \ 00000010 000090E5 LDR R0,[R0, #+0] \ 00000014 0190A0E1 MOV R9,R1 \ 00000018 0150A0E3 MOV R5,#+1 \ 0000001C 0060A0E3 MOV R6,#+0 \ 00000020 030050E3 CMP R0,#+3 \ 00000024 1100001A BNE ??maincsm_onmessage_2 5339 { 5340 if(!IsUnlocked()) develop_by_unlock = 1; \ 00000028 430000EF SWI +67 \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 44538405 STREQ R5,[R4, #+836] 5341 if(IsUnlocked() && develop_by_unlock == 1) \ 00000034 430000EF SWI +67 \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 0B00000A BEQ ??maincsm_onmessage_2 \ 00000040 440394E5 LDR R0,[R4, #+836] \ 00000044 010050E3 CMP R0,#+1 \ 00000048 0800001A BNE ??maincsm_onmessage_2 5342 { 5343 develop_by_unlock = 0; \ 0000004C 446384E5 STR R6,[R4, #+836] 5344 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) to_develop(); \ 00000050 068100EF SWI +33030 \ 00000054 080090E5 LDR R0,[R0, #+8] \ 00000058 041394E5 LDR R1,[R4, #+772] \ 0000005C 0C0090E5 LDR R0,[R0, #+12] \ 00000060 0C0090E5 LDR R0,[R0, #+12] \ 00000064 010050E1 CMP R0,R1 \ 00000068 0000000A BEQ ??maincsm_onmessage_2 \ 0000006C ........ BL to_develop \ ??maincsm_onmessage_2: \ 00000070 F200D9E1 LDRSH R0,[R9, #+2] \ 00000074 ........ LDR R8,??DataTable222 ;; Canvas \ 00000078 9B7FA0E3 MOV R7,#+620 \ 0000007C F210A0E3 MOV R1,#+242 \ 00000080 C01F81E3 ORR R1,R1,#0x300 \ 00000084 010050E1 CMP R0,R1 \ 00000088 1700001A BNE ??maincsm_onmessage_3 5345 } 5346 } 5347 #endif 5348 5349 // char ss[100]; 5350 MAIN_CSM *csm=(MAIN_CSM*)data; 5351 { 5352 //IPC 5353 if (msg->msg==MSG_IPC) 5354 { 5355 IPC_REQ *ipc; 5356 if ((ipc=(IPC_REQ*)msg->data0)) \ 0000008C 08A099E5 LDR R10,[R9, #+8] \ 00000090 00005AE3 CMP R10,#+0 \ 00000094 1400000A BEQ ??maincsm_onmessage_3 5357 { 5358 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000098 00009AE5 LDR R0,[R10, #+0] \ 0000009C 081087E0 ADD R1,R7,R8 \ 000000A0 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 0F00001A BNE ??maincsm_onmessage_3 5359 { 5360 switch (msg->submess) \ 000000AC 041099E5 LDR R1,[R9, #+4] \ 000000B0 04009AE5 LDR R0,[R10, #+4] \ 000000B4 08B09AE5 LDR R11,[R10, #+8] \ 000000B8 011041E2 SUB R1,R1,#+1 \ 000000BC 070051E3 CMP R1,#+7 \ 000000C0 0900008A BHI ??maincsm_onmessage_3 \ 000000C4 012F8FE2 ADR R2,??maincsm_onmessage_0 \ 000000C8 0120D2E7 LDRB R2,[R2, R1] \ 000000CC 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_0: \ 000000D0 01060652 DC8 +1,+6,+6,+82 \ 000000D4 8B06A51E DC8 +139,+6,+165,+30 5361 { 5362 case IPC_CHECK_DOUBLERUN: 5363 //Если приняли свое собственное сообщение, значит запускаем чекер 5364 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_4: \ 000000D8 081087E0 ADD R1,R7,R8 \ 000000DC 010050E1 CMP R0,R1 \ 000000E0 1600001A BNE ??maincsm_onmessage_5 5365 { 5366 SUBPROC((void *)CheckDoubleRun); \ 000000E4 D8079FE5 LDR R0,??maincsm_onmessage_6 ;; CheckDoubleRun \ 000000E8 710100EF SWI +369 5367 } 5368 else ipc->data=(void *)maincsm_id; 5369 break; 5370 /* case IPC_SMILE_PROCESSED: 5371 //Только собственные смайлы ;) 5372 if (ipc->name_from==ipc_my_name) 5373 { 5374 SUBPROC((void *)ProcessNextSmile); 5375 } 5376 #ifdef GUI_INTERFACE 5377 if(ShowLoadScreen) 5378 #endif 5379 SMART_REDRAW(); 5380 break; 5381 case IPC_XSTATUSIMG_PROCESSED: 5382 //Только собственные иксстатусы ;) 5383 if (ipc->name_from==ipc_my_name) 5384 { 5385 SUBPROC((void *)ProcessNextXStatImg); 5386 } 5387 #ifdef GUI_INTERFACE 5388 if(ShowLoadScreen) 5389 #endif 5390 SMART_REDRAW(); 5391 break;*/ 5392 #ifdef GUI_INTERFACE 5393 /* case IPC_IMG_PROCESSED: 5394 //Только собственные статусы ;) 5395 if (ipc->name_from==ipc_my_name) 5396 { 5397 SUBPROC((void *)ProcessNextImg); 5398 } 5399 if(ShowLoadScreen) SMART_REDRAW(); 5400 break;*/ 5401 case IPC_ONESECOND: 5402 if (ipc->name_from==ipc_my_name) 5403 { 5404 #ifdef ELKA 5405 SLI_check(); 5406 #endif 5407 UpTime(); 5408 if(ShowLoadScreen && !edchat_id) DoRefreshCL = 1; //SMART_REDRAW(); 5409 // if(ShowLoadScreen || !IsGuiOnTop(maingui_id)) break; 5410 5411 if((--on_off_timer) > 0) 5412 { 5413 if(!edchat_id) DoRefreshCL = 1;//SMART_REDRAW(); 5414 //break; 5415 } 5416 else 5417 if(on_off_timer != -1)//Надо обновить экран когда время прошло 5418 { 5419 on_off_timer = -1; 5420 isonline = 0; 5421 zeromem(on_off_buf,128); 5422 DisableScroll(); 5423 if(!edchat_id) DoRefreshCL = 1;// SMART_REDRAW(); 5424 } 5425 5426 if(LongPressTimer>0) LongPressTimer--; 5427 5428 if((PrintTimer--) > 0 && !edchat_id) DoRefreshCL = 1; 5429 // SMART_REDRAW(); 5430 5431 if(!DoRefreshCL) break;//Если не нада обновлять 5432 5433 SMART_REDRAW(); 5434 DoRefreshCL=0; 5435 } 5436 break; 5437 #endif 5438 case IPC_TENSECONDS: 5439 //Только свое сообщение 5440 if (ipc->name_from==ipc_my_name) 5441 { 5442 CLIST *t=(CLIST *)cltop; 5443 int f=0; 5444 while(t) 5445 { 5446 #ifdef GUI_INTERFACE 5447 if(t->isonline) 5448 { 5449 if (!(--(t->isonline))){ f=1; t->online=0; } 5450 SMART_REDRAW(); 5451 } 5452 #endif 5453 5454 if (t->isactive) 5455 { 5456 if (!(--(t->isactive))) //Если дошли до 0 хотя бы один раз - надо перерисовать меню 5457 { 5458 f=1; 5459 if ((t->log)&&(!t->isunread)) 5460 { 5461 FreeLOGQ(&t->log); 5462 t->msg_count=0; 5463 } 5464 } 5465 } 5466 t=(CLIST *)(t->next); 5467 } 5468 5469 if (f) 5470 { 5471 CLIST *oldt=NULL; 5472 #ifdef GUI_INTERFACE 5473 if(!ShowLoadScreen) 5474 oldt=FindContactByN(clistm->curpos); 5475 #else 5476 if (contactlist_menu_id) 5477 { 5478 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); 5479 } 5480 #endif 5481 RecountMenu(oldt, 1); 5482 } 5483 5484 if (time_to_stop_t9) 5485 { 5486 if (!(--time_to_stop_t9)) 5487 { 5488 if (IsGuiOnTop(edchat_id)) RefreshGUI(); 5489 } 5490 } 5491 } 5492 break; 5493 case IPC_SENDMSG: //IPC_SENDMSG by BoBa 26.06.07 5494 { 5495 int l=strlen(((IPCMsg *)(ipc->data))->msg); 5496 TPKT *msg=malloc(sizeof(PKT)+l); 5497 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; 5498 msg->pkt.type=T_SENDMSG; 5499 msg->pkt.data_len=l; 5500 memcpy(msg->data,((IPCMsg *)(ipc->data))->msg,l); 5501 //slientsend=1; 5502 SENDMSGCOUNT++; //Номер сообщения 5503 SUBPROC((void *)SendAnswer,0,msg); 5504 } 5505 break; 5506 case IPC_FREEMSG: 5507 ; 5508 IPCMsg_RECVMSG *fmp=((IPCMsg_RECVMSG *)(ipc->data)); 5509 if (ipc->name_to!=ipc_my_name) break; 5510 if (!fmp->drop_msg) 5511 { 5512 //Добавляем сообщение в чат 5513 int l=strlen(fmp->msg); 5514 TPKT *msg=malloc(sizeof(PKT)+l+1); 5515 msg->pkt.uin=fmp->uin; 5516 msg->pkt.type=T_RECVMSG; 5517 msg->pkt.data_len=l; 5518 memcpy(msg->data,fmp->msg,l+1); 5519 ae(msg); 5520 //ProcessPacket(msg); 5521 } 5522 mfree(fmp->msg); //Освобождаем сам текст сообщения 5523 mfree(fmp->ipc); //Освобождаем родительский IPC_REQ 5524 mfree(fmp); //Освобождаем собственно IPCMsg_RECVMSG 5525 mfree(ipc); //Освободили текущий IPC_REQ 5526 return 0; //вышли нах 5527 } 5528 } 5529 } 5530 } 5531 //Нарисуем иконочку моего статуса 5532 #define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 5533 CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); \ ??maincsm_onmessage_3: \ 000000EC 068100EF SWI +33030 \ 000000F0 040090E5 LDR R0,[R0, #+4] \ 000000F4 080100EF SWI +264 5534 if (IsGuiOnTop(idlegui_id)/*&&IsUnlocked()*/) //Если IdleGui на самом верху \ 000000F8 280090E5 LDR R0,[R0, #+40] \ 000000FC 350100EF SWI +309 \ 00000100 000050E3 CMP R0,#+0 \ 00000104 DE00000A BEQ ??maincsm_onmessage_7 5535 { 5536 extern const int ICON_IDLE_ENABLE; 5537 if(ICON_IDLE_ENABLE) \ 00000108 B8079FE5 LDR R0,??maincsm_onmessage_6+0x4 ;; ICON_IDLE_ENABLE \ 0000010C 000090E5 LDR R0,[R0, #+0] \ 00000110 000050E3 CMP R0,#+0 \ 00000114 DA00000A BEQ ??maincsm_onmessage_7 5538 { 5539 GUI *igui=GetTopGUI(); 5540 if (igui) //И он существует \ 00000118 4D0100EF SWI +333 \ 0000011C 000050E3 CMP R0,#+0 \ 00000120 D700000A BEQ ??maincsm_onmessage_7 5541 { 5542 void *canvasdata=BuildCanvas(); \ 00000124 F18000EF SWI +33009 \ 00000128 10008DE5 STR R0,[SP, #+16] 5543 int icn; 5544 if (total_unread) \ 0000012C 380394E5 LDR R0,[R4, #+824] \ 00000130 000050E3 CMP R0,#+0 \ 00000134 AE00000A BEQ ??maincsm_onmessage_8 5545 icn=IS_MSG; \ 00000138 0D00A0E3 MOV R0,#+13 \ 0000013C B20000EA B ??maincsm_onmessage_9 \ ??maincsm_onmessage_5: \ 00000140 040394E5 LDR R0,[R4, #+772] \ 00000144 08008AE5 STR R0,[R10, #+8] \ 00000148 E7FFFFEA B ??maincsm_onmessage_3 \ ??maincsm_onmessage_10: \ 0000014C 081087E0 ADD R1,R7,R8 \ 00000150 010050E1 CMP R0,R1 \ 00000154 E4FFFF1A BNE ??maincsm_onmessage_3 \ 00000158 ........ BL UpTime \ 0000015C 480394E5 LDR R0,[R4, #+840] \ 00000160 000050E3 CMP R0,#+0 \ 00000164 0200000A BEQ ??maincsm_onmessage_11 \ 00000168 5C0494E5 LDR R0,[R4, #+1116] \ 0000016C 000050E3 CMP R0,#+0 \ 00000170 60538405 STREQ R5,[R4, #+864] \ ??maincsm_onmessage_11: \ 00000174 500394E5 LDR R0,[R4, #+848] \ 00000178 010040E2 SUB R0,R0,#+1 \ 0000017C 500384E5 STR R0,[R4, #+848] \ 00000180 010050E3 CMP R0,#+1 \ 00000184 0E0000AA BGE ??maincsm_onmessage_12 \ 00000188 010070E3 CMN R0,#+1 \ 0000018C 0F00000A BEQ ??maincsm_onmessage_13 \ 00000190 000065E2 RSB R0,R5,#+0 \ 00000194 500384E5 STR R0,[R4, #+848] \ 00000198 5C6384E5 STR R6,[R4, #+860] \ 0000019C 8010A0E3 MOV R1,#+128 \ 000001A0 0800A0E3 MOV R0,#+8 \ 000001A4 5C0D80E3 ORR R0,R0,#0x1700 \ 000001A8 040080E0 ADD R0,R0,R4 \ 000001AC 1D0100EF SWI +285 \ 000001B0 640D87E3 ORR R0,R7,#0x1900 \ 000001B4 040080E0 ADD R0,R0,R4 \ 000001B8 8C0100EF SWI +396 \ 000001BC 846484E5 STR R6,[R4, #+1156] \ 000001C0 806484E5 STR R6,[R4, #+1152] \ ??maincsm_onmessage_12: \ 000001C4 5C0494E5 LDR R0,[R4, #+1116] \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC 60538405 STREQ R5,[R4, #+864] \ ??maincsm_onmessage_13: \ 000001D0 680394E5 LDR R0,[R4, #+872] \ 000001D4 010050E3 CMP R0,#+1 \ 000001D8 010040A2 SUBGE R0,R0,#+1 \ 000001DC 680384A5 STRGE R0,[R4, #+872] \ 000001E0 6C0394E5 LDR R0,[R4, #+876] \ 000001E4 011040E2 SUB R1,R0,#+1 \ 000001E8 6C1384E5 STR R1,[R4, #+876] \ 000001EC 010050E3 CMP R0,#+1 \ 000001F0 030000BA BLT ??maincsm_onmessage_14 \ 000001F4 5C0494E5 LDR R0,[R4, #+1116] \ 000001F8 000050E3 CMP R0,#+0 \ 000001FC 60538405 STREQ R5,[R4, #+864] \ 00000200 0200000A BEQ ??maincsm_onmessage_15 \ ??maincsm_onmessage_14: \ 00000204 600394E5 LDR R0,[R4, #+864] \ 00000208 000050E3 CMP R0,#+0 \ 0000020C B6FFFF0A BEQ ??maincsm_onmessage_3 \ ??maincsm_onmessage_15: \ 00000210 ........ BL SMART_REDRAW \ 00000214 606384E5 STR R6,[R4, #+864] \ 00000218 B3FFFFEA B ??maincsm_onmessage_3 \ ??maincsm_onmessage_16: \ 0000021C 081087E0 ADD R1,R7,R8 \ 00000220 010050E1 CMP R0,R1 \ 00000224 B0FFFF1A BNE ??maincsm_onmessage_3 \ 00000228 00A394E5 LDR R10,[R4, #+768] \ 0000022C 00B0A0E3 MOV R11,#+0 \ 00000230 00005AE3 CMP R10,#+0 \ 00000234 2500000A BEQ ??maincsm_onmessage_17 \ ??maincsm_onmessage_18: \ 00000238 8C009AE5 LDR R0,[R10, #+140] \ 0000023C 000050E3 CMP R0,#+0 \ 00000240 0400000A BEQ ??maincsm_onmessage_19 \ 00000244 010050E2 SUBS R0,R0,#+1 \ 00000248 8C008AE5 STR R0,[R10, #+140] \ 0000024C 01B0A003 MOVEQ R11,#+1 \ 00000250 90608A05 STREQ R6,[R10, #+144] \ 00000254 ........ BL SMART_REDRAW \ ??maincsm_onmessage_19: \ 00000258 74009AE5 LDR R0,[R10, #+116] \ 0000025C 000050E3 CMP R0,#+0 \ 00000260 0C00000A BEQ ??maincsm_onmessage_20 \ 00000264 010050E2 SUBS R0,R0,#+1 \ 00000268 74008AE5 STR R0,[R10, #+116] \ 0000026C 0900001A BNE ??maincsm_onmessage_20 \ 00000270 68009AE5 LDR R0,[R10, #+104] \ 00000274 01B0A0E3 MOV R11,#+1 \ 00000278 000050E3 CMP R0,#+0 \ 0000027C 0500000A BEQ ??maincsm_onmessage_20 \ 00000280 5C009AE5 LDR R0,[R10, #+92] \ 00000284 000050E3 CMP R0,#+0 \ 00000288 0200001A BNE ??maincsm_onmessage_20 \ 0000028C 68008AE2 ADD R0,R10,#+104 \ 00000290 ........ BL FreeLOGQ \ 00000294 78608AE5 STR R6,[R10, #+120] \ ??maincsm_onmessage_20: \ 00000298 00A09AE5 LDR R10,[R10, #+0] \ 0000029C 00005AE3 CMP R10,#+0 \ 000002A0 E4FFFF1A BNE ??maincsm_onmessage_18 \ 000002A4 00005BE3 CMP R11,#+0 \ 000002A8 0800000A BEQ ??maincsm_onmessage_17 \ 000002AC 481394E5 LDR R1,[R4, #+840] \ 000002B0 0000A0E3 MOV R0,#+0 \ 000002B4 000051E3 CMP R1,#+0 \ 000002B8 0200001A BNE ??maincsm_onmessage_21 \ 000002BC 4C0394E5 LDR R0,[R4, #+844] \ 000002C0 000090E5 LDR R0,[R0, #+0] \ 000002C4 ........ _BLF FindContactByN,??FindContactByN??rA \ ??maincsm_onmessage_21: \ 000002C8 0110A0E3 MOV R1,#+1 \ 000002CC ........ BL RecountMenu \ ??maincsm_onmessage_17: \ 000002D0 740494E5 LDR R0,[R4, #+1140] \ 000002D4 000050E3 CMP R0,#+0 \ 000002D8 83FFFF0A BEQ ??maincsm_onmessage_3 \ 000002DC 010050E2 SUBS R0,R0,#+1 \ 000002E0 740484E5 STR R0,[R4, #+1140] \ 000002E4 80FFFF1A BNE ??maincsm_onmessage_3 \ 000002E8 5C0494E5 LDR R0,[R4, #+1116] \ 000002EC 350100EF SWI +309 \ 000002F0 000050E3 CMP R0,#+0 \ 000002F4 7CFFFF0A BEQ ??maincsm_onmessage_3 \ 000002F8 960100EF SWI +406 \ 000002FC 7AFFFFEA B ??maincsm_onmessage_3 \ ??maincsm_onmessage_22: \ 00000300 04009BE5 LDR R0,[R11, #+4] \ 00000304 1B0000EF SWI +27 \ 00000308 00008DE5 STR R0,[SP, #+0] \ 0000030C 080080E2 ADD R0,R0,#+8 \ 00000310 140000EF SWI +20 \ 00000314 00B0A0E1 MOV R11,R0 \ 00000318 08009AE5 LDR R0,[R10, #+8] \ 0000031C 000090E5 LDR R0,[R0, #+0] \ 00000320 00008BE5 STR R0,[R11, #+0] \ 00000324 0200A0E3 MOV R0,#+2 \ 00000328 B400CBE1 STRH R0,[R11, #+4] \ 0000032C 00009DE5 LDR R0,[SP, #+0] \ 00000330 B600CBE1 STRH R0,[R11, #+6] \ 00000334 08009AE5 LDR R0,[R10, #+8] \ 00000338 00209DE5 LDR R2,[SP, #+0] \ 0000033C 041090E5 LDR R1,[R0, #+4] \ 00000340 08008BE2 ADD R0,R11,#+8 \ 00000344 1E0100EF SWI +286 \ 00000348 0C0394E5 LDR R0,[R4, #+780] \ 0000034C 0B20A0E1 MOV R2,R11 \ 00000350 010080E2 ADD R0,R0,#+1 \ 00000354 0C0384E5 STR R0,[R4, #+780] \ 00000358 ........ LDR R0,??DataTable234 ;; SendAnswer \ 0000035C 0010A0E3 MOV R1,#+0 \ 00000360 710100EF SWI +369 \ 00000364 60FFFFEA B ??maincsm_onmessage_3 \ ??maincsm_onmessage_23: \ 00000368 00009AE5 LDR R0,[R10, #+0] \ 0000036C 081087E0 ADD R1,R7,R8 \ 00000370 010050E1 CMP R0,R1 \ 00000374 5CFFFF1A BNE ??maincsm_onmessage_3 \ 00000378 08009BE5 LDR R0,[R11, #+8] \ 0000037C 000050E3 CMP R0,#+0 \ 00000380 1000001A BNE ??maincsm_onmessage_24 \ 00000384 04009BE5 LDR R0,[R11, #+4] \ 00000388 1B0000EF SWI +27 \ 0000038C 0040A0E1 MOV R4,R0 \ 00000390 090084E2 ADD R0,R4,#+9 \ 00000394 140000EF SWI +20 \ 00000398 0050A0E1 MOV R5,R0 \ 0000039C 00009BE5 LDR R0,[R11, #+0] \ 000003A0 012084E2 ADD R2,R4,#+1 \ 000003A4 000085E5 STR R0,[R5, #+0] \ 000003A8 0300A0E3 MOV R0,#+3 \ 000003AC B400C5E1 STRH R0,[R5, #+4] \ 000003B0 B640C5E1 STRH R4,[R5, #+6] \ 000003B4 04109BE5 LDR R1,[R11, #+4] \ 000003B8 080085E2 ADD R0,R5,#+8 \ 000003BC 1E0100EF SWI +286 \ 000003C0 0500A0E1 MOV R0,R5 \ 000003C4 ........ _BLF ae,??ae??rA \ ??maincsm_onmessage_24: \ 000003C8 04009BE5 LDR R0,[R11, #+4] \ 000003CC 150000EF SWI +21 \ 000003D0 0C009BE5 LDR R0,[R11, #+12] \ 000003D4 150000EF SWI +21 \ 000003D8 0B00A0E1 MOV R0,R11 \ 000003DC 150000EF SWI +21 \ 000003E0 0A00A0E1 MOV R0,R10 \ 000003E4 150000EF SWI +21 \ 000003E8 0000A0E3 MOV R0,#+0 \ 000003EC 1CD08DE2 ADD SP,SP,#+28 \ 000003F0 F08FBDE8 POP {R4-R11,PC} ;; return 5546 else 5547 { 5548 switch(connect_state) \ ??maincsm_onmessage_8: \ 000003F4 340494E5 LDR R0,[R4, #+1076] \ 000003F8 000050E3 CMP R0,#+0 \ 000003FC 0200000A BEQ ??maincsm_onmessage_9 \ 00000400 030050E2 SUBS R0,R0,#+3 5549 { 5550 case 0: 5551 icn=IS_OFFLINE; break; 5552 case 3: 5553 icn=CurrentStatus; //IS_ONLINE; \ 00000404 FC039405 LDREQ R0,[R4, #+1020] 5554 break; 5555 default: 5556 icn=IS_UNKNOWN; break; \ 00000408 0E00A013 MOVNE R0,#+14 5557 } 5558 } 5559 //Тут трохи поменял 5560 // by Rainmaker: Рисуем канву только для иконки и выводим в своих координатах 5561 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)S_ICONS[icn])-1, 5562 IDLEICON_Y+GetImgHeight((int)S_ICONS[icn])-1,1); \ ??maincsm_onmessage_9: \ 0000040C 000184E0 ADD R0,R4,R0, LSL #+2 \ 00000410 00008DE5 STR R0,[SP, #+0] \ 00000414 380290E5 LDR R0,[R0, #+568] \ 00000418 210000EF SWI +33 \ 0000041C 14008DE5 STR R0,[SP, #+20] \ 00000420 00009DE5 LDR R0,[SP, #+0] \ 00000424 380290E5 LDR R0,[R0, #+568] \ 00000428 220000EF SWI +34 \ 0000042C 98149FE5 LDR R1,??maincsm_onmessage_6+0x8 ;; IDLEICON_X \ 00000430 00A091E5 LDR R10,[R1, #+0] \ 00000434 94149FE5 LDR R1,??maincsm_onmessage_6+0xC ;; IDLEICON_Y \ 00000438 0A0080E0 ADD R0,R0,R10 \ 0000043C 00B091E5 LDR R11,[R1, #+0] \ 00000440 0110A0E3 MOV R1,#+1 \ 00000444 02002DE9 PUSH {R1} \ 00000448 18109DE5 LDR R1,[SP, #+24] \ 0000044C 013040E2 SUB R3,R0,#+1 \ 00000450 0B20A0E1 MOV R2,R11 \ 00000454 0B1081E0 ADD R1,R1,R11 \ 00000458 011041E2 SUB R1,R1,#+1 \ 0000045C 02002DE9 PUSH {R1} \ 00000460 18009DE5 LDR R0,[SP, #+24] \ 00000464 0A10A0E1 MOV R1,R10 \ 00000468 250000EF SWI +37 5563 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 0000046C 08009DE5 LDR R0,[SP, #+8] \ 00000470 0B10A0E1 MOV R1,R11 \ 00000474 382290E5 LDR R2,[R0, #+568] \ 00000478 0A00A0E1 MOV R0,R10 \ 0000047C 230000EF SWI +35 \ 00000480 08D08DE2 ADD SP,SP,#+8 5564 } 5565 } 5566 } 5567 } 5568 if (msg->msg==MSG_RECONFIGURE_REQ) \ ??maincsm_onmessage_7: \ 00000484 F200D9E1 LDRSH R0,[R9, #+2] \ 00000488 FC1F85E3 ORR R1,R5,#0x3F0 \ 0000048C 010050E1 CMP R0,R1 \ 00000490 1F00001A BNE ??maincsm_onmessage_25 5569 { 5570 extern const char *successed_config_filename; 5571 if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) \ 00000494 ........ LDR R0,??DataTable241 ;; successed_config_filename \ 00000498 081099E5 LDR R1,[R9, #+8] \ 0000049C 000090E5 LDR R0,[R0, #+0] \ 000004A0 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 000004A4 000050E3 CMP R0,#+0 \ 000004A8 1900001A BNE ??maincsm_onmessage_25 5572 { 5573 ShowMSG(1,(int)"NatICQ config updated!"); \ 000004AC 6E1F88E2 ADD R1,R8,#+440 \ 000004B0 0100A0E3 MOV R0,#+1 \ 000004B4 480100EF SWI +328 5574 InitConfig(); \ 000004B8 ........ _BLF InitConfig,??InitConfig??rA 5575 5576 void UpdateCSMname(void); 5577 UpdateCSMname();//обновим имя еси сменили уин и сделали рекконект... \ 000004BC ........ BL UpdateCSMname 5578 5579 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000004C0 ........ LDR R0,??DataTable240 ;; UIN \ 000004C4 081088E2 ADD R1,R8,#+8 \ 000004C8 002090E5 LDR R2,[R0, #+0] \ 000004CC 060087E2 ADD R0,R7,#+6 \ 000004D0 080080E0 ADD R0,R0,R8 \ 000004D4 160000EF SWI +22 5580 #ifdef GUI_INTERFACE 5581 clistm->font = ClFont; \ 000004D8 ........ LDR R0,??DataTable226 ;; ClFont \ 000004DC 4C1394E5 LDR R1,[R4, #+844] \ 000004E0 000090E5 LDR R0,[R0, #+0] \ 000004E4 1C0081E5 STR R0,[R1, #+28] 5582 clistm->FontH = FontH(ClFont); \ 000004E8 C50100EF SWI +453 \ 000004EC 4C1394E5 LDR R1,[R4, #+844] \ 000004F0 200081E5 STR R0,[R1, #+32] 5583 #endif 5584 free_ICONS(); \ 000004F4 ........ BL free_ICONS 5585 setup_ICONS(); \ 000004F8 ........ BL setup_ICONS 5586 ResortCL(); \ 000004FC ........ _BLF ResortCL,??ResortCL??rA 5587 RecountMenu(NULL, 1); \ 00000500 0510A0E1 MOV R1,R5 \ 00000504 0600A0E1 MOV R0,R6 \ 00000508 ........ BL RecountMenu 5588 // InitSmiles(); 5589 5590 #ifdef GUI_INTERFACE 5591 shot_header=0; \ 0000050C 8C6484E5 STR R6,[R4, #+1164] 5592 shot_soft=0; \ 00000510 886484E5 STR R6,[R4, #+1160] 5593 #endif 5594 } 5595 } 5596 5597 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_25: \ 00000514 F200D9E1 LDRSH R0,[R9, #+2] \ 00000518 980050E3 CMP R0,#+152 \ 0000051C 0C00001A BNE ??maincsm_onmessage_26 5598 { 5599 if ((int)msg->data0==csm->gui_id) \ 00000520 18109DE5 LDR R1,[SP, #+24] \ 00000524 080099E5 LDR R0,[R9, #+8] \ 00000528 281091E5 LDR R1,[R1, #+40] \ 0000052C 010050E1 CMP R0,R1 5600 { 5601 csm->csm.state=-3; \ 00000530 18009D05 LDREQ R0,[SP, #+24] \ 00000534 0210E003 MVNEQ R1,#+2 \ 00000538 10108005 STREQ R1,[R0, #+16] 5602 } 5603 #ifndef GUI_INTERFACE 5604 if ((int)msg->data0==contactlist_menu_id) 5605 { 5606 contactlist_menu_id=0; 5607 prev_clmenu_itemcount=0; 5608 } 5609 #endif 5610 if ((int)msg->data0==edchat_id) \ 0000053C 080099E5 LDR R0,[R9, #+8] \ 00000540 5C1494E5 LDR R1,[R4, #+1116] \ 00000544 010050E1 CMP R0,R1 \ 00000548 0100001A BNE ??maincsm_onmessage_26 5611 { 5612 edchat_id=0; \ 0000054C 5C6484E5 STR R6,[R4, #+1116] 5613 SMART_REDRAW(); \ 00000550 ........ BL SMART_REDRAW 5614 } 5615 } 5616 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_26: \ 00000554 F200D9E1 LDRSH R0,[R9, #+2] \ 00000558 FC0F50E3 CMP R0,#+1008 \ 0000055C 1F00001A BNE ??maincsm_onmessage_27 5617 { 5618 switch((int)msg->data0) \ 00000560 080099E5 LDR R0,[R9, #+8] \ 00000564 0C1099E5 LDR R1,[R9, #+12] \ 00000568 ........ LDR R11,??DataTable227 ;; do_reconnect \ 0000056C 1820A0E3 MOV R2,#+24 \ 00000570 682D82E3 ORR R2,R2,#0x1A00 \ 00000574 049082E0 ADD R9,R2,R4 \ 00000578 A42F42E2 SUB R2,R2,#+656 \ 0000057C 04A082E0 ADD R10,R2,R4 \ 00000580 802050E2 SUBS R2,R0,#+128 \ 00000584 0600000A BEQ ??maincsm_onmessage_28 \ 00000588 022052E2 SUBS R2,R2,#+2 \ 0000058C 0200000A BEQ ??maincsm_onmessage_29 \ 00000590 122052E2 SUBS R2,R2,#+18 \ 00000594 1400000A BEQ ??maincsm_onmessage_30 \ 00000598 1C0000EA B ??maincsm_onmessage_31 5619 { 5620 case LMAN_DISCONNECT_IND: 5621 is_gprs_online=0; \ ??maincsm_onmessage_29: \ 0000059C 546484E5 STR R6,[R4, #+1108] 5622 return(1); \ 000005A0 0E0000EA B ??maincsm_onmessage_27 5623 case LMAN_CONNECT_CNF: 5624 vibra_count=1; \ ??maincsm_onmessage_28: \ 000005A4 145384E5 STR R5,[R4, #+788] 5625 start_vibra(); \ 000005A8 ........ BL start_vibra 5626 is_gprs_online=1; 5627 //strcpy(logmsg,LG_GRGPRSUP); 5628 snprintf(logmsg, 255, LG_GRGPRSUP, RECONNECT_TIME); \ 000005AC ........ LDR R0,??DataTable237 ;; RECONNECT_TIME \ 000005B0 545484E5 STR R5,[R4, #+1108] \ 000005B4 004090E5 LDR R4,[R0, #+0] \ 000005B8 742F88E2 ADD R2,R8,#+464 \ 000005BC 0430A0E1 MOV R3,R4 \ 000005C0 FF10A0E3 MOV R1,#+255 \ 000005C4 0A00A0E1 MOV R0,R10 \ 000005C8 1B0100EF SWI +283 5629 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 000005CC 0B20A0E1 MOV R2,R11 \ 000005D0 D800A0E3 MOV R0,#+216 \ 000005D4 900401E0 MUL R1,R0,R4 \ 000005D8 0900A0E1 MOV R0,R9 \ 000005DC 4D0000EF SWI +77 5630 return(1); \ ??maincsm_onmessage_27: \ 000005E0 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_32: \ 000005E4 1CD08DE2 ADD SP,SP,#+28 \ 000005E8 F08FBDE8 POP {R4-R11,PC} 5631 case ENIP_DNR_HOST_BY_NAME: 5632 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_30: \ 000005EC 640494E5 LDR R0,[R4, #+1124] \ 000005F0 000051E1 CMP R1,R0 \ 000005F4 F9FFFF1A BNE ??maincsm_onmessage_27 5633 { 5634 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 000005F8 680494E5 LDR R0,[R4, #+1128] \ 000005FC 000050E3 CMP R0,#+0 \ 00000600 F6FFFF0A BEQ ??maincsm_onmessage_27 \ 00000604 ........ LDR R0,??DataTable229 ;; create_connect \ ??maincsm_onmessage_33: \ 00000608 710100EF SWI +369 5635 } 5636 return(1); \ ??maincsm_onmessage_34: \ 0000060C F3FFFFEA B ??maincsm_onmessage_27 5637 } 5638 if ((int)msg->data1==sock) \ ??maincsm_onmessage_31: \ 00000610 382494E5 LDR R2,[R4, #+1080] \ 00000614 020051E1 CMP R1,R2 \ 00000618 F0FFFF1A BNE ??maincsm_onmessage_27 5639 { 5640 //Если наш сокет 5641 if ((((unsigned int)msg->data0)>>28)==0xA) \ 0000061C 201EA0E1 LSR R1,R0,#+28 \ 00000620 0A0051E3 CMP R1,#+10 \ 00000624 3400001A BNE ??maincsm_onmessage_35 5642 { 5643 TPKT *p=(TPKT *)msg->data0; \ 00000628 0040A0E1 MOV R4,R0 5644 //Принят пакет 5645 if (p->pkt.type==T_RECVMSG) \ 0000062C B400D4E1 LDRH R0,[R4, #+4] \ 00000630 030050E3 CMP R0,#+3 \ 00000634 2C00001A BNE ??maincsm_onmessage_36 5646 { 5647 //Просунем через IPC 5648 5649 int l=p->pkt.data_len+1; //С завершающим \0 \ 00000638 B600D4E1 LDRH R0,[R4, #+6] \ 0000063C 01B080E2 ADD R11,R0,#+1 5650 IPC_REQ *ripc=malloc(sizeof(IPC_REQ)); \ 00000640 0C00A0E3 MOV R0,#+12 \ 00000644 140000EF SWI +20 \ 00000648 0050A0E1 MOV R5,R0 5651 IPC_REQ *fipc=malloc(sizeof(IPC_REQ)); \ 0000064C 0C00A0E3 MOV R0,#+12 \ 00000650 140000EF SWI +20 \ 00000654 0090A0E1 MOV R9,R0 5652 IPCMsg_RECVMSG *msg=malloc(sizeof(IPCMsg_RECVMSG)); \ 00000658 1000A0E3 MOV R0,#+16 \ 0000065C 140000EF SWI +20 \ 00000660 00A0A0E1 MOV R10,R0 5653 memcpy(msg->msg=malloc(l),p->data,l); \ 00000664 0B00A0E1 MOV R0,R11 \ 00000668 140000EF SWI +20 \ 0000066C 04008AE5 STR R0,[R10, #+4] \ 00000670 0B20A0E1 MOV R2,R11 \ 00000674 081084E2 ADD R1,R4,#+8 \ 00000678 1E0100EF SWI +286 5654 msg->uin=p->pkt.uin; \ 0000067C 000094E5 LDR R0,[R4, #+0] 5655 msg->drop_msg=0; 5656 msg->ipc=ripc; 5657 ripc->data=msg; 5658 fipc->data=msg; 5659 ripc->name_from=ipc_my_name; 5660 ripc->name_to=ipc_my_name; 5661 fipc->name_from=ipc_my_name; 5662 fipc->name_to=ipc_my_name; 5663 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_RECVMSG,ripc); \ 00000680 0530A0E1 MOV R3,R5 \ 00000684 00008AE5 STR R0,[R10, #+0] \ 00000688 08608AE5 STR R6,[R10, #+8] \ 0000068C 0C508AE5 STR R5,[R10, #+12] \ 00000690 08A085E5 STR R10,[R5, #+8] \ 00000694 08A089E5 STR R10,[R9, #+8] \ 00000698 080087E0 ADD R0,R7,R8 \ 0000069C 040085E5 STR R0,[R5, #+4] \ 000006A0 000085E5 STR R0,[R5, #+0] \ 000006A4 040089E5 STR R0,[R9, #+4] \ 000006A8 000089E5 STR R0,[R9, #+0] \ 000006AC 0960A0E3 MOV R6,#+9 \ 000006B0 426C86E3 ORR R6,R6,#0x4200 \ 000006B4 0620A0E3 MOV R2,#+6 \ 000006B8 FB1F82E2 ADD R1,R2,#+1004 \ 000006BC 0600A0E1 MOV R0,R6 \ 000006C0 000100EF SWI +256 5664 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_FREEMSG,fipc); \ 000006C4 0930A0E1 MOV R3,R9 \ 000006C8 0720A0E3 MOV R2,#+7 \ 000006CC F210A0E3 MOV R1,#+242 \ 000006D0 C01F81E3 ORR R1,R1,#0x300 \ 000006D4 0600A0E1 MOV R0,R6 \ 000006D8 000100EF SWI +256 5665 mfree(p); \ 000006DC 0400A0E1 MOV R0,R4 \ 000006E0 150000EF SWI +21 \ 000006E4 0000A0E3 MOV R0,#+0 \ 000006E8 BDFFFFEA B ??maincsm_onmessage_32 5666 } 5667 else 5668 { 5669 //Непосредственная обработка 5670 // ae(p); 5671 ProcessPacket(p); \ ??maincsm_onmessage_36: \ 000006EC 0400A0E1 MOV R0,R4 \ 000006F0 ........ BL ProcessPacket 5672 } 5673 return(0); \ 000006F4 0000A0E3 MOV R0,#+0 \ 000006F8 B9FFFFEA B ??maincsm_onmessage_32 5674 } 5675 switch((int)msg->data0) \ ??maincsm_onmessage_35: \ 000006FC ........ LDR R3,??DataTable230 ;; VIBR_ON_CONNECT \ 00000700 341494E5 LDR R1,[R4, #+1076] \ 00000704 003093E5 LDR R3,[R3, #+0] \ 00000708 ........ LDR R7,??DataTable247 ;; lgpData \ 0000070C 00308DE5 STR R3,[SP, #+0] \ 00000710 8A0040E2 SUB R0,R0,#+138 \ 00000714 050050E3 CMP R0,#+5 \ 00000718 B0FFFF8A BHI ??maincsm_onmessage_27 \ 0000071C 012F8FE2 ADR R2,??maincsm_onmessage_1 \ 00000720 D02092E1 LDRSB R2,[R2, R0] \ 00000724 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_1: \ 00000728 33332E01 DC8 +51,+51,+46,+1 \ 0000072C 3C380000 DC8 +60,+56,+0,+0 5676 { 5677 case ENIP_SOCK_CONNECTED: 5678 if (connect_state==1) \ ??maincsm_onmessage_37: \ 00000730 010051E3 CMP R1,#+1 \ 00000734 2600001A BNE ??maincsm_onmessage_38 5679 { 5680 if(VIBR_ON_CONNECT) \ 00000738 000053E3 CMP R3,#+0 5681 vibra_count=2; \ 0000073C 0200A013 MOVNE R0,#+2 \ 00000740 14038415 STRNE R0,[R4, #+788] 5682 else 5683 vibra_count=1; \ 00000744 14538405 STREQ R5,[R4, #+788] 5684 start_vibra(); \ 00000748 ........ BL start_vibra 5685 //Соединение установленно, посылаем пакет login 5686 strcpy(logmsg, LG_GRTRYLOGIN); \ 0000074C 821F88E2 ADD R1,R8,#+520 \ 00000750 0A00A0E1 MOV R0,R10 \ 00000754 1A0000EF SWI +26 5687 { 5688 SUBPROC((void *)ab,0,0); \ 00000758 74019FE5 LDR R0,??maincsm_onmessage_6+0x10 ;; ab \ 0000075C 0020A0E3 MOV R2,#+0 \ 00000760 0210A0E1 MOV R1,R2 \ 00000764 710100EF SWI +369 5689 /* int i=strlen(PASS); 5690 TPKT *p=malloc(sizeof(PKT)+i); 5691 p->pkt.uin=UIN; 5692 p->pkt.type=T_REQLOGIN; 5693 p->pkt.data_len=i; 5694 memcpy(p->data,PASS,i); 5695 SUBPROC((void *)send_login,0,p);*/ 5696 } 5697 GROUP_CACHE=0; \ 00000768 586484E5 STR R6,[R4, #+1112] 5698 SENDMSGCOUNT=0; //Начинаем отсчет \ 0000076C 0C6384E5 STR R6,[R4, #+780] 5699 if (!FindGroupByID(0)) AddGroup(0,lgpData[LGP_GroupNotInList]); \ 00000770 0600A0E1 MOV R0,R6 \ 00000774 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000778 000050E3 CMP R0,#+0 \ 0000077C 0100001A BNE ??maincsm_onmessage_39 \ 00000780 141097E5 LDR R1,[R7, #+20] \ 00000784 ........ _BLF AddGroup,??AddGroup??rA 5700 extern const int IS_SHOW_LOOPBACK; 5701 if (!FindContactByUin(UIN) && IS_SHOW_LOOPBACK) AddContact(UIN, lgpData[LGP_ClLoopback], 0,1); \ ??maincsm_onmessage_39: \ 00000788 ........ LDR R0,??DataTable240 ;; UIN \ 0000078C 004090E5 LDR R4,[R0, #+0] \ 00000790 0400A0E1 MOV R0,R4 \ 00000794 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000798 000050E3 CMP R0,#+0 \ 0000079C 0800001A BNE ??maincsm_onmessage_40 \ 000007A0 30019FE5 LDR R0,??maincsm_onmessage_6+0x14 ;; IS_SHOW_LOOPBACK \ 000007A4 000090E5 LDR R0,[R0, #+0] \ 000007A8 000050E3 CMP R0,#+0 \ 000007AC 0400000A BEQ ??maincsm_onmessage_40 \ 000007B0 101097E5 LDR R1,[R7, #+16] \ 000007B4 0130A0E3 MOV R3,#+1 \ 000007B8 0620A0E1 MOV R2,R6 \ 000007BC 0400A0E1 MOV R0,R4 \ 000007C0 ........ _BLF AddContact,??AddContact??rA 5702 SUBPROC((void *)LoadLocalCL); \ ??maincsm_onmessage_40: \ 000007C4 ........ LDR R0,??DataTable233 ;; LoadLocalCL \ 000007C8 710100EF SWI +369 5703 SMART_REDRAW(); \ 000007CC ........ BL SMART_REDRAW \ 000007D0 82FFFFEA B ??maincsm_onmessage_27 5704 } 5705 else 5706 { 5707 ShowMSG(1,(int)lgpData[LGP_MsgIllegmsgcon]); \ ??maincsm_onmessage_38: \ 000007D4 381197E5 LDR R1,[R7, #+312] \ ??maincsm_onmessage_41: \ 000007D8 0100A0E3 MOV R0,#+1 \ 000007DC 480100EF SWI +328 \ 000007E0 7EFFFFEA B ??maincsm_onmessage_27 5708 } 5709 break; 5710 case ENIP_SOCK_DATA_READ: 5711 if (connect_state>=2) \ ??maincsm_onmessage_42: \ 000007E4 020051E3 CMP R1,#+2 5712 { 5713 //Если посылали send 5714 SUBPROC((void *)get_answer); \ 000007E8 EC009FA5 LDRGE R0,??maincsm_onmessage_6+0x18 ;; get_answer \ 000007EC 85FFFFAA BGE ??maincsm_onmessage_33 5715 //SMART_REDRAW(); 5716 } 5717 else 5718 { 5719 ShowMSG(1,(int)lgpData[LGP_MsgIllegmsgrea]); \ 000007F0 3C1197E5 LDR R1,[R7, #+316] \ 000007F4 F7FFFFEA B ??maincsm_onmessage_41 5720 } 5721 break; 5722 case ENIP_BUFFER_FREE: 5723 case ENIP_BUFFER_FREE1: 5724 SUBPROC((void *)SendAnswer,0,0); \ ??maincsm_onmessage_43: \ 000007F8 ........ LDR R0,??DataTable234 ;; SendAnswer \ 000007FC 0020A0E3 MOV R2,#+0 \ 00000800 0210A0E1 MOV R1,R2 \ 00000804 710100EF SWI +369 \ 00000808 74FFFFEA B ??maincsm_onmessage_27 5725 break; 5726 case ENIP_SOCK_REMOTE_CLOSED: 5727 //Закрыт со стороны сервера 5728 if (connect_state) \ ??maincsm_onmessage_44: \ 0000080C 000051E3 CMP R1,#+0 \ 00000810 72FFFF0A BEQ ??maincsm_onmessage_27 5729 SUBPROC((void *)end_socket); \ 00000814 ........ LDR R0,??DataTable235 ;; end_socket \ 00000818 7AFFFFEA B ??maincsm_onmessage_33 5730 break; 5731 case ENIP_SOCK_CLOSED: 5732 //strcpy(logmsg, "No connection"); 5733 //Dump not received 5734 /* if (RXstate>(-(int)sizeof(PKT))) 5735 { 5736 unsigned int err; 5737 int f=fopen("4:\\NATICQ.dump",A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&err); 5738 if (f!=-1) 5739 { 5740 fwrite(f,&RXbuf,RXstate+sizeof(PKT),&err); 5741 fclose(f,&err); 5742 } 5743 }*/ 5744 FillAllOffline(); \ ??maincsm_onmessage_45: \ 0000081C ........ _BLF FillAllOffline,??FillAllOffline??rA 5745 RecountMenu(NULL, 1); \ 00000820 0110A0E3 MOV R1,#+1 \ 00000824 0600A0E1 MOV R0,R6 \ 00000828 ........ BL RecountMenu 5746 connect_state=0; \ 0000082C 346484E5 STR R6,[R4, #+1076] 5747 sock=-1; \ 00000830 000065E2 RSB R0,R5,#+0 \ 00000834 380484E5 STR R0,[R4, #+1080] 5748 if(VIBR_ON_CONNECT) \ 00000838 00009DE5 LDR R0,[SP, #+0] \ 0000083C 000050E3 CMP R0,#+0 5749 vibra_count=4; \ 00000840 0400A013 MOVNE R0,#+4 \ 00000844 14038415 STRNE R0,[R4, #+788] 5750 else 5751 vibra_count=1; \ 00000848 14538405 STREQ R5,[R4, #+788] 5752 5753 start_vibra(); \ 0000084C ........ BL start_vibra 5754 if (sendq_p) \ 00000850 500494E5 LDR R0,[R4, #+1104] \ 00000854 000050E3 CMP R0,#+0 \ 00000858 0400000A BEQ ??maincsm_onmessage_46 5755 { 5756 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 0000085C 4C3494E5 LDR R3,[R4, #+1100] \ 00000860 862F88E2 ADD R2,R8,#+536 \ 00000864 FF10A0E3 MOV R1,#+255 \ 00000868 0A00A0E1 MOV R0,R10 \ 0000086C 1B0100EF SWI +283 5757 } 5758 SMART_REDRAW(); \ ??maincsm_onmessage_46: \ 00000870 ........ BL SMART_REDRAW 5759 SUBPROC((void *)ClearSendQ); \ 00000874 ........ LDR R0,??DataTable236 ;; ClearSendQ \ 00000878 710100EF SWI +369 5760 if (!disautorecconect) \ 0000087C F80394E5 LDR R0,[R4, #+1016] \ 00000880 000050E3 CMP R0,#+0 \ 00000884 55FFFF1A BNE ??maincsm_onmessage_27 5761 { 5762 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000888 ........ LDR R0,??DataTable237 ;; RECONNECT_TIME \ 0000088C 0B20A0E1 MOV R2,R11 \ 00000890 004090E5 LDR R4,[R0, #+0] \ 00000894 D800A0E3 MOV R0,#+216 \ 00000898 900401E0 MUL R1,R0,R4 \ 0000089C 0900A0E1 MOV R0,R9 \ 000008A0 4D0000EF SWI +77 5763 snprintf(logmsg,255,LG_GRRECONNECT,logmsg, RECONNECT_TIME); \ 000008A4 10002DE9 PUSH {R4} \ 000008A8 0A30A0E1 MOV R3,R10 \ 000008AC 8F2F88E2 ADD R2,R8,#+572 \ 000008B0 FF10A0E3 MOV R1,#+255 \ 000008B4 0A00A0E1 MOV R0,R10 \ 000008B8 1B0100EF SWI +283 \ 000008BC 04D08DE2 ADD SP,SP,#+4 \ 000008C0 46FFFFEA B ??maincsm_onmessage_27 \ ??maincsm_onmessage_6: \ 000008C4 ........ DC32 CheckDoubleRun \ 000008C8 ........ DC32 ICON_IDLE_ENABLE \ 000008CC ........ DC32 IDLEICON_X \ 000008D0 ........ DC32 IDLEICON_Y \ 000008D4 ........ DC32 ab \ 000008D8 ........ DC32 IS_SHOW_LOOPBACK \ 000008DC ........ DC32 get_answer 5764 } 5765 break; 5766 } 5767 } 5768 } 5769 return(1); 5770 } 5771 5772 \ In segment DATA_C, align 4, align-sorted 5773 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 5774 5775 unsigned short maincsm_name_body[140]; 5776 5777 5778 //-------------------- ICON IN ICONBAR --------------------// 5779 5780 5781 //kluchnik 26.03.08 5782 #ifdef NEWSGOLD 5783 #pragma swi_number=0x27 5784 __swi __arm void AddIconToIconBar(int pic, short *num); 5785 5786 int iconmsgblink=1; 5787 extern const unsigned int ShowStatusToIconBar; 5788 extern const unsigned int ADDITION_UIN; 5789 5790 void addIconBar(short* num) 5791 { 5792 if(!ShowStatusToIconBar) return; 5793 unsigned int NumStatusToIconBar = 8000; 5794 unsigned int NumXStatusToIconBar = 8100; 5795 5796 int icn; 5797 { 5798 if(total_unread) 5799 { 5800 //еси нет хстатуса то тада кол-во сообщений поочередно мигаем с статусосм 5801 5802 /*if(CurrentStatus == 0 && (total_unread_all && total_unread_all<10)) 5803 { 5804 icn = (iconmsgblink==1) ? (NumStatusToIconBar + IS_MSG) : (8200 + total_unread_all); 5805 } 5806 else 5807 { 5808 icn = NumStatusToIconBar + (iconmsgblink==1 ? (IS_MSG) : (7777)); 5809 // AddIconToIconBar(NumStatusToIconBar +(iconmsgblink==1?IS_MSG:7777), num); 5810 }*/ 5811 // AddIconToIconBar(icn, num); 5812 5813 AddIconToIconBar(NumStatusToIconBar +(iconmsgblink==1?IS_MSG:7777), num); 5814 // iconmsgblink=!iconmsgblink; 5815 5816 } 5817 else 5818 { 5819 switch(connect_state) 5820 { 5821 case 0: 5822 icn=IS_OFFLINE; 5823 break; 5824 case 3: 5825 icn=CurrentStatus; //IS_ONLINE; 5826 break; 5827 default: 5828 icn=IS_UNKNOWN; 5829 break; 5830 } 5831 AddIconToIconBar(NumStatusToIconBar + icn, num); 5832 } 5833 } 5834 5835 if(CurrentXStatus!=0)//еси есть хстатус то делаем так 5836 { 5837 if(total_unread_all && total_unread_all<10) 5838 AddIconToIconBar(8200 + total_unread_all, num); 5839 else 5840 AddIconToIconBar(NumXStatusToIconBar+CurrentXStatus,num); 5841 } 5842 5843 if(ADDITION_UIN!=0) 5844 { 5845 CLIST *t; 5846 t=FindContactByUin(ADDITION_UIN); 5847 if(t) 5848 { 5849 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) 5850 { 5851 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); 5852 if(t->xstate!=0) 5853 AddIconToIconBar(NumXStatusToIconBar + t->xstate, num); 5854 } 5855 } 5856 } 5857 } 5858 5859 typedef struct 5860 { 5861 char check_name[8]; 5862 int addr; 5863 }ICONBAR_H; 5864 5865 #endif 5866 5867 //const int minus11=-11; 5868 \ In segment DATA_Z, align 4, align-sorted 5869 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 5870 5871 struct 5872 { 5873 CSM_DESC maincsm; 5874 WSHDR maincsm_name; 5875 #ifdef NEWSGOLD 5876 ICONBAR_H iconbar_handler; 5877 #endif 5878 }MAINCSM = 5879 { 5880 { 5881 maincsm_onmessage, 5882 maincsm_oncreate, 5883 #ifdef NEWSGOLD 5884 0, 5885 0, 5886 0, 5887 0, 5888 #endif 5889 maincsm_onclose, 5890 sizeof(MAIN_CSM), 5891 1, 5892 &minus11 5893 }, 5894 { 5895 maincsm_name_body, 5896 NAMECSM_MAGIC1, 5897 NAMECSM_MAGIC2, 5898 0x0, 5899 139 5900 } 5901 #ifdef NEWSGOLD 5902 , 5903 { 5904 "IconBar" 5905 } 5906 #endif 5907 }; 5908 \ In segment CODE, align 4, keep-with-next 5909 void UpdateCSMname(void) 5910 { 5911 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "NATICQ: %d",UIN); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable240 ;; UIN \ 00000004 10109FE5 LDR R1,??UpdateCSMname_0 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C 002090E5 LDR R2,[R0, #+0] \ 00000010 08009FE5 LDR R0,??UpdateCSMname_0+0x4 ;; popup + 7092 \ 00000014 240100EF SWI +292 5912 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??UpdateCSMname_0: \ 0000001C ........ DC32 `?` \ 00000020 ........ DC32 popup + 7092 5913 5914 #ifdef NEWSGOLD 5915 void SetIconBarHandler() 5916 { 5917 MAINCSM.iconbar_handler.addr = (int)addIconBar; 5918 } 5919 #endif 5920 \ In segment CODE, align 4, keep-with-next 5921 int main(char *filename) 5922 { \ main: \ 00000000 70402DE9 PUSH {R4-R6,LR} 5923 MAIN_CSM main_csm; 5924 char *s; 5925 int len; 5926 extern const char *successed_config_filename; 5927 WSHDR *ws; 5928 5929 InitConfig(); 5930 5931 s=strrchr(filename,'\\'); 5932 len=(s-filename)+1; 5933 strncpy(elf_path,filename,len); \ 00000004 ........ LDR R4,??DataTable245 ;; popup \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 0050A0E1 MOV R5,R0 \ 00000010 ........ _BLF InitConfig,??InitConfig??rA \ 00000014 5C10A0E3 MOV R1,#+92 \ 00000018 0500A0E1 MOV R0,R5 \ 0000001C 170100EF SWI +279 \ 00000020 050040E0 SUB R0,R0,R5 \ 00000024 016080E2 ADD R6,R0,#+1 \ 00000028 0620A0E1 MOV R2,R6 \ 0000002C 0510A0E1 MOV R1,R5 \ 00000030 E800A0E3 MOV R0,#+232 \ 00000034 400E80E3 ORR R0,R0,#0x400 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 160100EF SWI +278 5934 elf_path[len]=0; \ 00000040 040086E0 ADD R0,R6,R4 \ 00000044 0010A0E3 MOV R1,#+0 \ 00000048 E814C0E5 STRB R1,[R0, #+1256] 5935 5936 lgpLoadLangpack(); \ 0000004C ........ _BLF lgpLoadLangpack,??lgpLoadLangpack??rA 5937 5938 if (!UIN) \ 00000050 ........ LDR R0,??DataTable240 ;; UIN \ 00000054 000090E5 LDR R0,[R0, #+0] \ 00000058 000050E3 CMP R0,#+0 \ 0000005C 1700001A BNE ??main_0 5939 { 5940 LockSched(); \ 00000060 460100EF SWI +326 5941 ShowMSG(1,(int)lgpData[LGP_MsgNoUinPass]); \ 00000064 9C009FE5 LDR R0,??main_1 ;; lgpData + 348 \ 00000068 001090E5 LDR R1,[R0, #+0] \ 0000006C 0100A0E3 MOV R0,#+1 \ 00000070 480100EF SWI +328 5942 ws=AllocWS(150); \ 00000074 9600A0E3 MOV R0,#+150 \ 00000078 250100EF SWI +293 \ 0000007C 0040A0E1 MOV R4,R0 5943 str_2ws(ws,successed_config_filename,128); \ 00000080 ........ LDR R0,??DataTable241 ;; successed_config_filename \ 00000084 8020A0E3 MOV R2,#+128 \ 00000088 001090E5 LDR R1,[R0, #+0] \ 0000008C 0400A0E1 MOV R0,R4 \ 00000090 6C0100EF SWI +364 5944 ExecuteFile(ws,0,0); \ 00000094 0020A0E3 MOV R2,#+0 \ 00000098 0010A0E3 MOV R1,#+0 \ 0000009C 0400A0E1 MOV R0,R4 \ 000000A0 940000EF SWI +148 5945 UnlockSched(); \ 000000A4 470100EF SWI +327 5946 lgpFreeLangPack(); \ 000000A8 ........ _BLF lgpFreeLangPack,??lgpFreeLangPack??rA 5947 SUBPROC((void *)ElfKiller); \ 000000AC ........ LDR R0,??DataTable242 ;; ElfKiller \ 000000B0 710100EF SWI +369 5948 return 0; \ 000000B4 0000A0E3 MOV R0,#+0 \ 000000B8 2CD08DE2 ADD SP,SP,#+44 \ 000000BC 7080BDE8 POP {R4-R6,PC} 5949 } 5950 5951 ReadDefSettings(); \ ??main_0: \ 000000C0 ........ BL ReadDefSettings 5952 setup_ICONS(); \ 000000C4 ........ BL setup_ICONS 5953 LoadXStatusText(); \ 000000C8 ........ _BLF LoadXStatusText,??LoadXStatusText??rA 5954 UpdateCSMname(); \ 000000CC ........ BL UpdateCSMname 5955 LockSched(); \ 000000D0 460100EF SWI +326 5956 maincsm_id=CreateCSM(&MAINCSM.maincsm,&main_csm,0); \ 000000D4 0020A0E3 MOV R2,#+0 \ 000000D8 0D10A0E1 MOV R1,SP \ 000000DC 9C00A0E3 MOV R0,#+156 \ 000000E0 6C0D80E3 ORR R0,R0,#0x1B00 \ 000000E4 040080E0 ADD R0,R0,R4 \ 000000E8 070100EF SWI +263 \ 000000EC 040384E5 STR R0,[R4, #+772] 5957 UnlockSched(); \ 000000F0 470100EF SWI +327 5958 #ifdef NEWSGOLD 5959 SetIconBarHandler(); 5960 #endif 5961 away_timer(); \ 000000F4 ........ BL away_timer 5962 Reminder_timer(); \ 000000F8 ........ BL Reminder_timer 5963 return 0; \ 000000FC 0000A0E3 MOV R0,#+0 \ 00000100 2CD08DE2 ADD SP,SP,#+44 \ 00000104 7080BDE8 POP {R4-R6,PC} ;; return \ ??main_1: \ 00000108 ........ DC32 lgpData + 348 5964 } 5965 5966 //=========================================================== 5967 // Edit chat 5968 //=========================================================== \ In segment CODE, align 4, keep-with-next 5969 void edchat_locret(void){} \ edchat_locret: \ 00000000 1EFF2FE1 BX LR ;; return 5970 \ In segment CODE, align 4, keep-with-next 5971 char *ExtractAnswer(WSHDR *ws) 5972 { \ ExtractAnswer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 5973 S_SMILES *t; 5974 int c; 5975 int len=0; 5976 int scur; 5977 char *msg=NULL; 5978 unsigned short *wsbody=ws->wsbody; \ 00000004 005090E5 LDR R5,[R0, #+0] \ 00000008 0040A0E3 MOV R4,#+0 5979 int wslen=wsbody[0]; \ 0000000C B060D5E1 LDRH R6,[R5, #+0] \ 00000010 0070A0E3 MOV R7,#+0 5980 if (wslen) \ 00000014 000056E3 CMP R6,#+0 \ 00000018 3C00000A BEQ ??ExtractAnswer_0 5981 { 5982 for (int i=0; i=0xE100) 5986 { 5987 t=FindSmileByUni(c); 5988 if (t) 5989 { 5990 if (t->lines) 5991 { 5992 len+=strlen(t->lines->text); 5993 } 5994 } 5995 else len++; 5996 } 5997 else len++; 5998 } 5999 6000 msg=malloc(len+1); \ ??ExtractAnswer_2: \ 00000024 010084E2 ADD R0,R4,#+1 \ 00000028 140000EF SWI +20 \ 0000002C 0070A0E1 MOV R7,R0 6001 scur=0; \ 00000030 0090A0E3 MOV R9,#+0 6002 for (int wcur=0; wcur=0xE100) 6007 { 6008 t=FindSmileByUni(c); 6009 if (t) 6010 { 6011 int w; 6012 char *s; 6013 if (t->lines) 6014 { 6015 s=t->lines->text; 6016 while ((w=*s++) && scurnext)) \ FindNextActiveContact: \ ??FindNextActiveContact_0: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0300000A BEQ ??FindNextActiveContact_1 6043 { 6044 if (t->isactive) return t; \ 0000000C 741090E5 LDR R1,[R0, #+116] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 F9FFFF0A BEQ ??FindNextActiveContact_0 \ 00000018 1EFF2FE1 BX LR 6045 } 6046 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable244 ;; popup + 768 \ 00000020 020000EA B ??FindNextActiveContact_2 6047 while(t=(CLIST *)(t->next)) 6048 { 6049 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 741090E5 LDR R1,[R0, #+116] \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 1EFF2F11 BXNE LR 6050 } \ ??FindNextActiveContact_2: \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F9FFFF1A BNE ??FindNextActiveContact_3 6051 return NULL; \ 0000003C 1EFF2FE1 BX LR ;; return 6052 } 6053 \ In segment CODE, align 4, keep-with-next 6054 CLIST *FindPrevActiveContact(CLIST *t) 6055 { 6056 CLIST *cl; 6057 CLIST *cl_active=NULL; 6058 cl=(CLIST *)(&cltop); \ FindPrevActiveContact: \ 00000000 ........ LDR R2,??DataTable244 ;; popup + 768 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 020000EA B ??FindPrevActiveContact_0 6059 6060 6061 while(cl=cl->next) 6062 { 6063 if (cl==t) 6064 { 6065 if (cl_active==NULL) break; 6066 else return (cl_active); 6067 } 6068 else 6069 { 6070 if (cl->isactive) cl_active=cl; \ ??FindPrevActiveContact_1: \ 0000000C 743092E5 LDR R3,[R2, #+116] \ 00000010 000053E3 CMP R3,#+0 \ 00000014 0210A011 MOVNE R1,R2 6071 } \ ??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 6072 } 6073 while(t) \ ??FindPrevActiveContact_2: \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF0A BEQ ??FindPrevActiveContact_3 6074 { 6075 if (t->isactive) cl_active=t; \ 00000044 742090E5 LDR R2,[R0, #+116] \ 00000048 000052E3 CMP R2,#+0 \ 0000004C 0010A011 MOVNE R1,R0 6076 t=t->next; \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 F8FFFFEA B ??FindPrevActiveContact_2 6077 } 6078 return cl_active; 6079 } 6080 6081 \ In segment CODE, align 4, keep-with-next 6082 void ed_options_handler(USR_MENU_ITEM *item) 6083 { \ ed_options_handler: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 6084 EDCHAT_STRUCT *ed_struct=item->user_pointer; 6085 CLIST *t; 6086 int i=item->cur_item; 6087 if (item->type==0) \ 00000004 ........ LDR R5,??DataTable245 ;; popup \ 00000008 58D04DE2 SUB SP,SP,#+88 \ 0000000C 0070A0E1 MOV R7,R0 \ 00000010 0000D7E5 LDRB R0,[R7, #+0] \ 00000014 044097E5 LDR R4,[R7, #+4] \ 00000018 B860D7E1 LDRH R6,[R7, #+8] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 2C00001A BNE ??ed_options_handler_0 6088 { 6089 if(IsBufferMenu) \ 00000024 ........ LDR R3,??DataTable255 ;; IsBufferMenu \ 00000028 2C1495E5 LDR R1,[R5, #+1068] \ 0000002C 003093E5 LDR R3,[R3, #+0] \ 00000030 102094E5 LDR R2,[R4, #+16] \ 00000034 0C0097E5 LDR R0,[R7, #+12] \ 00000038 000053E3 CMP R3,#+0 \ 0000003C 1600000A BEQ ??ed_options_handler_1 6090 { 6091 switch(i) \ 00000040 34849FE5 LDR R8,??ed_options_handler_2 ;; `?` \ 00000044 0630B0E1 MOVS R3,R6 \ 00000048 0400000A BEQ ??ed_options_handler_3 \ 0000004C 013056E2 SUBS R3,R6,#+1 \ 00000050 0B00000A BEQ ??ed_options_handler_4 \ 00000054 013053E2 SUBS R3,R3,#+1 \ 00000058 0B00000A BEQ ??ed_options_handler_5 \ 0000005C 0C0000EA B ??ed_options_handler_6 6092 { 6093 case 0: 6094 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ed_options_handler_3: \ 00000060 040094E5 LDR R0,[R4, #+4] \ 00000064 820100EF SWI +386 \ 00000068 081094E5 LDR R1,[R4, #+8] \ 0000006C 010050E1 CMP R0,R1 \ 00000070 0C009715 LDRNE R0,[R7, #+12] \ 00000074 08108812 ADDNE R1,R8,#+8 6095 ascii2ws(item->ws,"Cмайлы"); \ 00000078 0C009705 LDREQ R0,[R7, #+12] \ 0000007C 0810A001 MOVEQ R1,R8 \ 00000080 130000EA B ??ed_options_handler_7 6096 else 6097 ascii2ws(item->ws,"В буфер"); 6098 break; 6099 case 1: 6100 ascii2ws(item->ws,"Из буфера"); \ ??ed_options_handler_4: \ 00000084 101088E2 ADD R1,R8,#+16 \ 00000088 110000EA B ??ed_options_handler_7 6101 break; 6102 case 2: 6103 ascii2ws(item->ws,"Очистить буфер"); \ ??ed_options_handler_5: \ 0000008C 1C1088E2 ADD R1,R8,#+28 \ 00000090 0F0000EA B ??ed_options_handler_7 6104 break; 6105 default: 6106 i-=3; \ ??ed_options_handler_6: \ 00000094 036046E2 SUB R6,R6,#+3 6107 if (iloaded_templates) ascii2ws(item->ws,templates_lines[i]); \ 00000098 0A0000EA B ??ed_options_handler_8 6108 break; 6109 } 6110 } 6111 else 6112 { 6113 switch(i) \ ??ed_options_handler_1: \ 0000009C ........ LDR R3,??DataTable247 ;; lgpData \ 000000A0 0680B0E1 MOVS R8,R6 \ 000000A4 0200000A BEQ ??ed_options_handler_9 \ 000000A8 018056E2 SUBS R8,R6,#+1 \ 000000AC 0200000A BEQ ??ed_options_handler_10 \ 000000B0 030000EA B ??ed_options_handler_11 6114 { 6115 case 0: 6116 ascii2ws(item->ws,lgpData[LGP_MnuEdNextAct]); \ ??ed_options_handler_9: \ 000000B4 CC1093E5 LDR R1,[R3, #+204] \ 000000B8 050000EA B ??ed_options_handler_7 6117 break; 6118 case 1: 6119 ascii2ws(item->ws,lgpData[LGP_MnuEdPrevAct]); \ ??ed_options_handler_10: \ 000000BC D01093E5 LDR R1,[R3, #+208] \ 000000C0 030000EA B ??ed_options_handler_7 6120 break; 6121 default: 6122 i-=2; \ ??ed_options_handler_11: \ 000000C4 026046E2 SUB R6,R6,#+2 6123 if (iloaded_templates) ascii2ws(item->ws,templates_lines[i]); \ ??ed_options_handler_8: \ 000000C8 020056E1 CMP R6,R2 \ 000000CC E80000AA BGE ??ed_options_handler_12 \ 000000D0 061191E7 LDR R1,[R1, +R6, LSL #+2] \ ??ed_options_handler_7: \ 000000D4 ........ _BLF ascii2ws,??ascii2ws??rA 6124 break; 6125 } 6126 } 6127 } 6128 if (item->type==1) \ ??ed_options_handler_0: \ 000000D8 0000D7E5 LDRB R0,[R7, #+0] \ 000000DC 010050E3 CMP R0,#+1 \ 000000E0 E300001A BNE ??ed_options_handler_12 6129 { 6130 if(IsBufferMenu) \ 000000E4 ........ LDR R3,??DataTable255 ;; IsBufferMenu \ 000000E8 2C1495E5 LDR R1,[R5, #+1068] \ 000000EC 003093E5 LDR R3,[R3, #+0] \ 000000F0 102094E5 LDR R2,[R4, #+16] \ 000000F4 040094E5 LDR R0,[R4, #+4] \ 000000F8 000053E3 CMP R3,#+0 \ 000000FC 9700000A BEQ ??ed_options_handler_13 6131 { 6132 switch(i) \ 00000100 0630B0E1 MOVS R3,R6 \ 00000104 0400000A BEQ ??ed_options_handler_14 \ 00000108 013056E2 SUBS R3,R6,#+1 \ 0000010C 4000000A BEQ ??ed_options_handler_15 \ 00000110 013053E2 SUBS R3,R3,#+1 \ 00000114 5A00000A BEQ ??ed_options_handler_16 \ 00000118 5D0000EA B ??ed_options_handler_17 6133 { 6134 case 0: 6135 { 6136 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ed_options_handler_14: \ 0000011C 820100EF SWI +386 \ 00000120 081094E5 LDR R1,[R4, #+8] \ 00000124 010050E1 CMP R0,R1 \ 00000128 0200001A BNE ??ed_options_handler_18 6137 CreateSmileSelectGUI(ed_struct); \ 0000012C 0400A0E1 MOV R0,R4 \ 00000130 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 00000134 340000EA B ??ed_options_handler_19 6138 else 6139 { 6140 int ed; 6141 EDITCONTROL ec; 6142 EDITCONTROL ec_hdr; 6143 6144 ed=EDIT_GetFocus(ed_struct->ed_chatgui); \ ??ed_options_handler_18: \ 00000138 040094E5 LDR R0,[R4, #+4] \ 0000013C 820100EF SWI +386 \ 00000140 0060A0E1 MOV R6,R0 6145 ExtractEditControl(ed_struct->ed_chatgui,ed,&ec); \ 00000144 040094E5 LDR R0,[R4, #+4] \ 00000148 2C208DE2 ADD R2,SP,#+44 \ 0000014C 0610A0E1 MOV R1,R6 \ 00000150 690100EF SWI +361 6146 ExtractEditControl(ed_struct->ed_chatgui,ed-1,&ec_hdr); \ 00000154 040094E5 LDR R0,[R4, #+4] \ 00000158 0D20A0E1 MOV R2,SP \ 0000015C 011046E2 SUB R1,R6,#+1 \ 00000160 690100EF SWI +361 6147 6148 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 00000164 400395E5 LDR R0,[R5, #+832] \ 00000168 230100EF SWI +291 \ 0000016C 012080E2 ADD R2,R0,#+1 \ 00000170 400395E5 LDR R0,[R5, #+832] \ 00000174 3E10A0E3 MOV R1,#+62 \ 00000178 1D0000EF SWI +29 6149 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 0000017C 400395E5 LDR R0,[R5, #+832] \ 00000180 230100EF SWI +291 \ 00000184 012080E2 ADD R2,R0,#+1 \ 00000188 400395E5 LDR R0,[R5, #+832] \ 0000018C 2010A0E3 MOV R1,#+32 \ 00000190 1D0000EF SWI +29 6150 wstrcat(wsBuffer,ec_hdr.pWS); \ 00000194 28109DE5 LDR R1,[SP, #+40] \ 00000198 400395E5 LDR R0,[R5, #+832] \ 0000019C 210100EF SWI +289 6151 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 000001A0 400395E5 LDR R0,[R5, #+832] \ 000001A4 230100EF SWI +291 \ 000001A8 012080E2 ADD R2,R0,#+1 \ 000001AC 400395E5 LDR R0,[R5, #+832] \ 000001B0 0A10A0E3 MOV R1,#+10 \ 000001B4 1D0000EF SWI +29 6152 6153 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 000001B8 400395E5 LDR R0,[R5, #+832] \ 000001BC 230100EF SWI +291 \ 000001C0 012080E2 ADD R2,R0,#+1 \ 000001C4 400395E5 LDR R0,[R5, #+832] \ 000001C8 3E10A0E3 MOV R1,#+62 \ 000001CC 1D0000EF SWI +29 6154 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 000001D0 400395E5 LDR R0,[R5, #+832] \ 000001D4 230100EF SWI +291 \ 000001D8 012080E2 ADD R2,R0,#+1 \ 000001DC 400395E5 LDR R0,[R5, #+832] \ 000001E0 2010A0E3 MOV R1,#+32 \ 000001E4 1D0000EF SWI +29 6155 wstrcat(wsBuffer,ec.pWS); \ 000001E8 54109DE5 LDR R1,[SP, #+84] \ 000001EC 400395E5 LDR R0,[R5, #+832] \ 000001F0 210100EF SWI +289 6156 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 000001F4 400395E5 LDR R0,[R5, #+832] \ 000001F8 230100EF SWI +291 \ 000001FC 012080E2 ADD R2,R0,#+1 \ 00000200 400395E5 LDR R0,[R5, #+832] \ 00000204 0A10A0E3 MOV R1,#+10 \ 00000208 1D0000EF SWI +29 \ ??ed_options_handler_19: \ 0000020C 58D08DE2 ADD SP,SP,#+88 \ 00000210 F081BDE8 POP {R4-R8,PC} 6157 } 6158 } 6159 break; 6160 case 1: 6161 { 6162 EDITCONTROL ec; 6163 WSHDR *ws; 6164 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); \ ??ed_options_handler_15: \ 00000214 081094E5 LDR R1,[R4, #+8] \ 00000218 0D20A0E1 MOV R2,SP \ 0000021C 690100EF SWI +361 6165 ws=AllocWS(ec.pWS->wsbody[0]+wsBuffer->wsbody[0]+1); \ 00000220 28009DE5 LDR R0,[SP, #+40] \ 00000224 401395E5 LDR R1,[R5, #+832] \ 00000228 000090E5 LDR R0,[R0, #+0] \ 0000022C 001091E5 LDR R1,[R1, #+0] \ 00000230 B000D0E1 LDRH R0,[R0, #+0] \ 00000234 B010D1E1 LDRH R1,[R1, #+0] \ 00000238 000081E0 ADD R0,R1,R0 \ 0000023C 010080E2 ADD R0,R0,#+1 \ 00000240 250100EF SWI +293 6166 wstrcpy(ws,ec.pWS); \ 00000244 28109DE5 LDR R1,[SP, #+40] \ 00000248 0060A0E1 MOV R6,R0 \ 0000024C 1F0100EF SWI +287 6167 wstrcat(ws,wsBuffer); \ 00000250 401395E5 LDR R1,[R5, #+832] \ 00000254 0600A0E1 MOV R0,R6 \ 00000258 210100EF SWI +289 6168 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ws); \ 0000025C 040094E5 LDR R0,[R4, #+4] \ 00000260 081094E5 LDR R1,[R4, #+8] \ 00000264 0620A0E1 MOV R2,R6 \ 00000268 DE0100EF SWI +478 6169 EDIT_SetCursorPos(ed_struct->ed_chatgui,wstrlen(ws)); \ 0000026C 0600A0E1 MOV R0,R6 \ 00000270 230100EF SWI +291 \ 00000274 0010A0E1 MOV R1,R0 \ 00000278 040094E5 LDR R0,[R4, #+4] \ 0000027C D40100EF SWI +468 \ 00000280 E1FFFFEA B ??ed_options_handler_19 6170 } 6171 break; 6172 case 2: 6173 CutWSTR(wsBuffer,0); \ ??ed_options_handler_16: \ 00000284 400395E5 LDR R0,[R5, #+832] \ 00000288 0010A0E3 MOV R1,#+0 \ 0000028C 260100EF SWI +294 \ 00000290 DDFFFFEA B ??ed_options_handler_19 6174 break; 6175 default: 6176 i-=3; \ ??ed_options_handler_17: \ 00000294 036046E2 SUB R6,R6,#+3 6177 if (iloaded_templates) \ 00000298 020056E1 CMP R6,R2 \ 0000029C 740000AA BGE ??ed_options_handler_12 6178 { 6179 EDITCONTROL ec; 6180 WSHDR *ed_ws; 6181 int c; 6182 char *p=templates_lines[i]; \ 000002A0 065191E7 LDR R5,[R1, +R6, LSL #+2] 6183 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); \ 000002A4 081094E5 LDR R1,[R4, #+8] \ 000002A8 0D20A0E1 MOV R2,SP \ 000002AC 690100EF SWI +361 6184 ed_ws=AllocWS(ec.pWS->wsbody[0]+strlen(p)); \ 000002B0 0500A0E1 MOV R0,R5 \ 000002B4 1B0000EF SWI +27 \ 000002B8 28109DE5 LDR R1,[SP, #+40] \ 000002BC 001091E5 LDR R1,[R1, #+0] \ 000002C0 B010D1E1 LDRH R1,[R1, #+0] \ 000002C4 010080E0 ADD R0,R0,R1 \ 000002C8 250100EF SWI +293 6185 wstrcpy(ed_ws,ec.pWS); \ 000002CC 28109DE5 LDR R1,[SP, #+40] \ 000002D0 0060A0E1 MOV R6,R0 \ 000002D4 1F0100EF SWI +287 6186 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ 000002D8 040094E5 LDR R0,[R4, #+4] \ 000002DC 820100EF SWI +386 \ 000002E0 081094E5 LDR R1,[R4, #+8] \ 000002E4 010050E1 CMP R0,R1 \ 000002E8 1800001A BNE ??ed_options_handler_20 6187 { 6188 int pos=EDIT_GetCursorPos(ed_struct->ed_chatgui); \ 000002EC 040094E5 LDR R0,[R4, #+4] \ 000002F0 D30100EF SWI +467 \ 000002F4 0070A0E1 MOV R7,R0 \ 000002F8 050000EA B ??ed_options_handler_21 6189 while(c=*p++) 6190 { 6191 wsInsertChar(ed_ws,char8to16(c),pos++); \ ??ed_options_handler_22: \ 000002FC ........ _BLF char8to16,??char8to16??rA \ 00000300 0720A0E1 MOV R2,R7 \ 00000304 0010A0E1 MOV R1,R0 \ 00000308 0600A0E1 MOV R0,R6 \ 0000030C 1D0000EF SWI +29 \ 00000310 017087E2 ADD R7,R7,#+1 6192 } \ ??ed_options_handler_21: \ 00000314 ........ LDRB R0,[R5], #+1 \ 00000318 000050E3 CMP R0,#+0 \ 0000031C F6FFFF1A BNE ??ed_options_handler_22 6193 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ ??ed_options_handler_23: \ 00000320 081094E5 LDR R1,[R4, #+8] \ 00000324 040094E5 LDR R0,[R4, #+4] \ 00000328 0620A0E1 MOV R2,R6 \ 0000032C DE0100EF SWI +478 6194 EDIT_SetCursorPos(ed_struct->ed_chatgui,pos); \ 00000330 040094E5 LDR R0,[R4, #+4] \ 00000334 0710A0E1 MOV R1,R7 \ 00000338 D40100EF SWI +468 \ 0000033C 4A0000EA B ??ed_options_handler_24 6195 } 6196 else 6197 { 6198 while(c=*p++) 6199 { 6200 wsAppendChar(ed_ws,char8to16(c)); \ ??ed_options_handler_25: \ 00000340 ........ _BLF char8to16,??char8to16??rA \ 00000344 0010A0E1 MOV R1,R0 \ 00000348 0600A0E1 MOV R0,R6 \ 0000034C 1C0000EF SWI +28 6201 } \ ??ed_options_handler_20: \ 00000350 ........ LDRB R0,[R5], #+1 \ 00000354 000050E3 CMP R0,#+0 \ 00000358 F8FFFF1A BNE ??ed_options_handler_25 6202 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 0000035C 3E0000EA B ??ed_options_handler_26 6203 } 6204 FreeWS(ed_ws); 6205 } 6206 break; 6207 } 6208 } 6209 else 6210 { 6211 switch(i) \ ??ed_options_handler_13: \ 00000360 007094E5 LDR R7,[R4, #+0] \ 00000364 0630B0E1 MOVS R3,R6 \ 00000368 0200000A BEQ ??ed_options_handler_27 \ 0000036C 013056E2 SUBS R3,R6,#+1 \ 00000370 0B00000A BEQ ??ed_options_handler_28 \ 00000374 0D0000EA B ??ed_options_handler_29 6212 { 6213 case 0: 6214 t=FindNextActiveContact(ed_struct->ed_contact); \ ??ed_options_handler_27: \ 00000378 0700A0E1 MOV R0,R7 \ 0000037C ........ BL FindNextActiveContact \ ??ed_options_handler_30: \ 00000380 0040B0E1 MOVS R4,R0 6215 if (t && t!=ed_struct->ed_contact) \ 00000384 07005411 CMPNE R4,R7 \ 00000388 3900000A BEQ ??ed_options_handler_12 6216 { 6217 GeneralFunc_flag1(edchat_id,1); \ 0000038C 5C0495E5 LDR R0,[R5, #+1116] \ 00000390 0110A0E3 MOV R1,#+1 \ 00000394 3D0100EF SWI +317 6218 CreateEditChat(t); \ 00000398 0400A0E1 MOV R0,R4 \ 0000039C ........ BL CreateEditChat \ 000003A0 99FFFFEA B ??ed_options_handler_19 6219 } 6220 break; 6221 case 1: 6222 t=FindPrevActiveContact(ed_struct->ed_contact); \ ??ed_options_handler_28: \ 000003A4 0700A0E1 MOV R0,R7 \ 000003A8 ........ BL FindPrevActiveContact \ 000003AC F3FFFFEA B ??ed_options_handler_30 6223 if (t && t!=ed_struct->ed_contact) 6224 { 6225 GeneralFunc_flag1(edchat_id,1); 6226 CreateEditChat(t); 6227 } 6228 break; 6229 default: 6230 i-=2; \ ??ed_options_handler_29: \ 000003B0 026046E2 SUB R6,R6,#+2 6231 if (iloaded_templates) \ 000003B4 020056E1 CMP R6,R2 \ 000003B8 2D0000AA BGE ??ed_options_handler_12 6232 { 6233 EDITCONTROL ec; 6234 WSHDR *ed_ws; 6235 int c; 6236 char *p=templates_lines[i]; \ 000003BC 065191E7 LDR R5,[R1, +R6, LSL #+2] 6237 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); \ 000003C0 081094E5 LDR R1,[R4, #+8] \ 000003C4 0D20A0E1 MOV R2,SP \ 000003C8 690100EF SWI +361 6238 ed_ws=AllocWS(ec.pWS->wsbody[0]+strlen(p)); \ 000003CC 0500A0E1 MOV R0,R5 \ 000003D0 1B0000EF SWI +27 \ 000003D4 28109DE5 LDR R1,[SP, #+40] \ 000003D8 001091E5 LDR R1,[R1, #+0] \ 000003DC B010D1E1 LDRH R1,[R1, #+0] \ 000003E0 010080E0 ADD R0,R0,R1 \ 000003E4 250100EF SWI +293 6239 wstrcpy(ed_ws,ec.pWS); \ 000003E8 28109DE5 LDR R1,[SP, #+40] \ 000003EC 0060A0E1 MOV R6,R0 \ 000003F0 1F0100EF SWI +287 6240 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ 000003F4 040094E5 LDR R0,[R4, #+4] \ 000003F8 820100EF SWI +386 \ 000003FC 081094E5 LDR R1,[R4, #+8] \ 00000400 010050E1 CMP R0,R1 \ 00000404 1100001A BNE ??ed_options_handler_31 6241 { 6242 int pos=EDIT_GetCursorPos(ed_struct->ed_chatgui); \ 00000408 040094E5 LDR R0,[R4, #+4] \ 0000040C D30100EF SWI +467 \ 00000410 0070A0E1 MOV R7,R0 \ 00000414 050000EA B ??ed_options_handler_32 6243 while(c=*p++) 6244 { 6245 wsInsertChar(ed_ws,char8to16(c),pos++); \ ??ed_options_handler_33: \ 00000418 ........ _BLF char8to16,??char8to16??rA \ 0000041C 0010A0E1 MOV R1,R0 \ 00000420 0720A0E1 MOV R2,R7 \ 00000424 0600A0E1 MOV R0,R6 \ 00000428 1D0000EF SWI +29 \ 0000042C 017087E2 ADD R7,R7,#+1 6246 } \ ??ed_options_handler_32: \ 00000430 ........ LDRB R0,[R5], #+1 \ 00000434 000050E3 CMP R0,#+0 \ 00000438 F6FFFF1A BNE ??ed_options_handler_33 6247 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 0000043C B7FFFFEA B ??ed_options_handler_23 6248 EDIT_SetCursorPos(ed_struct->ed_chatgui,pos); 6249 } 6250 else 6251 { 6252 while(c=*p++) 6253 { 6254 wsAppendChar(ed_ws,char8to16(c)); \ ??ed_options_handler_34: \ 00000440 ........ _BLF char8to16,??char8to16??rA \ 00000444 0010A0E1 MOV R1,R0 \ 00000448 0600A0E1 MOV R0,R6 \ 0000044C 1C0000EF SWI +28 6255 } \ ??ed_options_handler_31: \ 00000450 ........ LDRB R0,[R5], #+1 \ 00000454 000050E3 CMP R0,#+0 \ 00000458 F8FFFF1A BNE ??ed_options_handler_34 6256 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ ??ed_options_handler_26: \ 0000045C 081094E5 LDR R1,[R4, #+8] \ 00000460 040094E5 LDR R0,[R4, #+4] \ 00000464 0620A0E1 MOV R2,R6 \ 00000468 DE0100EF SWI +478 6257 } 6258 FreeWS(ed_ws); \ ??ed_options_handler_24: \ 0000046C 0600A0E1 MOV R0,R6 \ 00000470 290100EF SWI +297 6259 } 6260 break; 6261 } 6262 } 6263 } 6264 } \ ??ed_options_handler_12: \ 00000474 58D08DE2 ADD SP,SP,#+88 ;; stack cleaning \ 00000478 F081BDE8 POP {R4-R8,PC} ;; return \ ??ed_options_handler_2: \ 0000047C ........ DC32 `?` 6265 \ In segment CODE, align 4, keep-with-next 6266 unsigned short * wstrstr(unsigned short *ws, char *str, int *wslen, int len) 6267 { \ 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 6268 char *s; 6269 unsigned short *w; 6270 int l; 6271 6272 while(*wslen >= len) 6273 { 6274 s = str; 6275 w = ws; 6276 l = len; 6277 for(; (char16to8(*w) == *s) && l; w++, s++, l--); 6278 if(!l) return ws; 6279 ws++; 6280 (*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} 6281 } 6282 return 0; \ ??wstrstr_2: \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 F087BDE8 POP {R4-R10,PC} ;; return 6283 6284 } 6285 \ In segment CODE, align 4, keep-with-next 6286 int IsUrl(WSHDR *ws, int pos, char *link) 6287 { \ IsUrl: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0150A0E1 MOV R5,R1 6288 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 6289 6290 int len = wstrlen(ws); 6291 unsigned short *str = ws->wsbody+1, *tmp, *begin; 6292 tmp = str; 6293 6294 begin = str = wstrstr(str, "http://", &len, 7); \ 0000000C ........ LDR R7,??DataTable250 ;; `?` \ 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 6295 6296 while(str && (begin-tmp <= pos)) 6297 { 6298 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 6299 if(str-tmp >= pos-2) 6300 { 6301 for(;begin < str; begin++, link++) 6302 *link = char16to8(*begin); 6303 link[str-begin] = 0; 6304 return 1; 6305 } 6306 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 6307 } 6308 6309 len = wstrlen(ws); \ ??IsUrl_2: \ 00000080 04009DE5 LDR R0,[SP, #+4] \ 00000084 230100EF SWI +291 \ 00000088 00008DE5 STR R0,[SP, #+0] 6310 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} 6311 while(str && (begin-tmp <= pos)) 6312 { 6313 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 6314 if(str-tmp >= pos-2) 6315 { 6316 for(;begin < str; begin++, link++) 6317 *link = char16to8(*begin); 6318 link[str-begin] = 0; 6319 return 1; 6320 } 6321 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 6322 } 6323 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 6324 } 6325 6326 #define UTF16_DIS_UNDERLINE (0xE002) 6327 #define UTF16_ENA_UNDERLINE (0xE001) 6328 \ In segment CODE, align 4, keep-with-next 6329 void ParseAnswer(WSHDR *ws, const char *s) 6330 { \ ParseAnswer: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0040A0E1 MOV R4,R0 6331 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 6332 S_SMILES *t; 6333 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 6334 STXT_SMILES *st; 6335 unsigned int wchar; 6336 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 6337 CutWSTR(ws,0); \ 00000034 0010A0E3 MOV R1,#+0 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 260100EF SWI +294 \ 00000040 160000EA B ??ParseAnswer_1 6338 int i; 6339 while(wchar=*s) 6340 { 6341 if(s==strstr(s, "http://") || s == strstr(s, "www.")) 6342 { 6343 wsAppendChar(ws,UTF16_ENA_UNDERLINE); 6344 while(*s && strchr(valid, *s)) 6345 { 6346 wchar=char8to16(*s); \ ??ParseAnswer_2: \ 00000044 ........ LDRB R0,[R5], #+1 \ 00000048 ........ _BLF char8to16,??char8to16??rA 6347 wsAppendChar(ws,wchar); \ 0000004C 0010A0E1 MOV R1,R0 \ ??ParseAnswer_3: \ 00000050 0400A0E1 MOV R0,R4 \ 00000054 1C0000EF SWI +28 6348 s++; 6349 } \ 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 6350 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 6351 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 6352 continue; \ ??ParseAnswer_1: \ 000000A0 0070D5E5 LDRB R7,[R5, #+0] \ 000000A4 000057E3 CMP R7,#+0 \ 000000A8 4F00000A BEQ ??ParseAnswer_5 \ 000000AC ........ LDR R9,??DataTable250 ;; `?` \ 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 6353 } 6354 6355 t=t_root; \ ??ParseAnswer_7: \ 000000E4 0690A0E1 MOV R9,R6 \ 000000E8 230000EA B ??ParseAnswer_8 6356 while(t) 6357 { 6358 st=t->lines; 6359 while(st) 6360 { 6361 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 6362 { 6363 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 6364 } 6365 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] 6366 } \ ??ParseAnswer_13: \ 00000170 00005AE3 CMP R10,#+0 \ 00000174 DCFFFF1A BNE ??ParseAnswer_9 6367 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 6368 } 6369 L1: 6370 if (t) 6371 { 6372 wchar=t->uni_smile; 6373 s+=strlen(st->text); 6374 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); 6375 } 6376 else 6377 { 6378 wchar=char8to16(wchar); \ 00000188 0700A0E1 MOV R0,R7 \ 0000018C ........ _BLF char8to16,??char8to16??rA \ 00000190 0070A0E1 MOV R7,R0 6379 s++; 6380 ulb>>=8; 6381 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 6382 } \ ??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 6383 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 6384 } 6385 i=ws->wsbody[0]; \ ??ParseAnswer_5: \ 000001EC 000094E5 LDR R0,[R4, #+0] \ 000001F0 B010D0E1 LDRH R1,[R0, #+0] \ 000001F4 000000EA B ??ParseAnswer_15 6386 while(i>1) 6387 { 6388 if (ws->wsbody[i--]!=13) break; 6389 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 6390 } 6391 } \ 0000021C F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??ParseAnswer_0: \ 00000220 ........ DC32 s_top 6392 \ In segment CODE, align 4, keep-with-next 6393 void SaveAnswer(CLIST *cl, WSHDR *ws) 6394 { \ SaveAnswer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0100A0E1 MOV R0,R1 6395 char *p=ExtractAnswer(ws); \ 0000000C ........ BL ExtractAnswer \ 00000010 0050A0E1 MOV R5,R0 6396 mfree(cl->answer); \ 00000014 6C0094E5 LDR R0,[R4, #+108] \ 00000018 150000EF SWI +21 6397 cl->answer=p; \ 0000001C 6C5084E5 STR R5,[R4, #+108] 6398 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 6399 6400 \ In segment CODE, align 4, keep-with-next 6401 int GetTempName(void) 6402 { \ GetTempName: \ 00000000 00402DE9 PUSH {LR} \ 00000004 10D04DE2 SUB SP,SP,#+16 6403 static const int DMonth[]={0,31,59,90,120,151,181,212,243,273,304,334,365}; 6404 unsigned long iday; 6405 TTime tt; 6406 TDate dd; 6407 GetDateTime(&dd,&tt); \ 00000008 08108DE2 ADD R1,SP,#+8 \ 0000000C 0D00A0E1 MOV R0,SP \ 00000010 B40000EF SWI +180 6408 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 6409 iday=365*dd.year+DMonth[dd.month-1]+(dd.day - 1); 6410 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] 6411 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 6412 iday++; \ ??GetTempName_1: \ 00000078 011081E2 ADD R1,R1,#+1 6413 iday=(tt.sec+60*(tt.min+60*(tt.hour+24* iday))); 6414 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 6415 } \ 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 6416 6417 \ In segment CODE, align 4, keep-with-next 6418 int edchat_onkey(GUI *data, GUI_MSG *msg) 6419 { \ edchat_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 6420 //-1 - do redraw 6421 GBS_DelTimer(&tmr_illumination); \ 00000004 ........ LDR R6,??DataTable259 ;; popup \ 00000008 4CDF4DE2 SUB SP,SP,#+304 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0170A0E1 MOV R7,R1 \ 00000014 8800A0E3 MOV R0,#+136 \ 00000018 600D80E3 ORR R0,R0,#0x1800 \ 0000001C 060080E0 ADD R0,R0,R6 \ 00000020 8C0100EF SWI +396 6422 CLIST *t; 6423 TPKT *p; 6424 EDITCONTROL ec; 6425 int len, f; 6426 unsigned err; 6427 char *s; 6428 int l=msg->gbsmsg->submess; \ 00000024 040097E5 LDR R0,[R7, #+4] \ 00000028 048090E5 LDR R8,[R0, #+4] 6429 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 DF0100EF SWI +479 \ 00000034 0050A0E1 MOV R5,R0 6430 // WSHDR *ews; 6431 char fn[256]; 6432 6433 if (msg->keys==0xFFF) \ 00000038 F200D7E1 LDRSH R0,[R7, #+2] \ 0000003C FF10A0E3 MOV R1,#+255 \ 00000040 F01E81E3 ORR R1,R1,#0xF00 \ 00000044 010050E1 CMP R0,R1 \ 00000048 0200001A BNE ??edchat_onkey_0 6434 { 6435 void ec_menu(EDCHAT_STRUCT *); 6436 ec_menu(ed_struct); \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 ........ BL ec_menu 6437 return(-1); \ 00000054 300100EA B ??edchat_onkey_1 6438 } 6439 if (msg->keys==0xFF0) return (1); \ ??edchat_onkey_0: \ 00000058 FF0E50E3 CMP R0,#+4080 \ 0000005C 0100001A BNE ??edchat_onkey_2 \ 00000060 0100A0E3 MOV R0,#+1 \ 00000064 2D0100EA B ??edchat_onkey_3 \ ??edchat_onkey_2: \ 00000068 040097E5 LDR R0,[R7, #+4] \ 0000006C 9510A0E3 MOV R1,#+149 \ 00000070 F200D0E1 LDRSH R0,[R0, #+2] \ 00000074 401F81E3 ORR R1,R1,#0x100 \ 00000078 010050E1 CMP R0,R1 \ 0000007C 6F00001A BNE ??edchat_onkey_4 6440 if (msg->gbsmsg->msg==LONG_PRESS) 6441 { 6442 if (l==RIGHT_BUTTON) \ 00000080 3E0058E3 CMP R8,#+62 \ 00000084 2700001A BNE ??edchat_onkey_5 6443 { 6444 if(LongRightAction==2 && EDIT_GetFocus(data)==ed_struct->ed_answer) \ 00000088 24059FE5 LDR R0,??edchat_onkey_6 ;; LongRightAction \ 0000008C 000090E5 LDR R0,[R0, #+0] \ 00000090 020050E3 CMP R0,#+2 \ 00000094 0700001A BNE ??edchat_onkey_7 \ 00000098 0400A0E1 MOV R0,R4 \ 0000009C 820100EF SWI +386 \ 000000A0 081095E5 LDR R1,[R5, #+8] \ 000000A4 010050E1 CMP R0,R1 \ 000000A8 6400001A BNE ??edchat_onkey_4 6445 CreateSmileSelectGUI(ed_struct); \ 000000AC 0500A0E1 MOV R0,R5 \ 000000B0 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 000000B4 610000EA B ??edchat_onkey_4 6446 else 6447 if(LongRightAction==1) \ ??edchat_onkey_7: \ 000000B8 010050E3 CMP R0,#+1 \ 000000BC 5F00001A BNE ??edchat_onkey_4 6448 { 6449 if (EDIT_GetFocus(data)==ed_struct->ed_answer) \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 820100EF SWI +386 \ 000000C8 081095E5 LDR R1,[R5, #+8] \ 000000CC 010050E1 CMP R0,R1 \ 000000D0 5A00001A BNE ??edchat_onkey_4 6450 { 6451 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000D4 04208DE2 ADD R2,SP,#+4 \ 000000D8 0400A0E1 MOV R0,R4 \ 000000DC 690100EF SWI +361 6452 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) \ 000000E0 0400A0E1 MOV R0,R4 \ 000000E4 D30100EF SWI +467 \ 000000E8 2C109DE5 LDR R1,[SP, #+44] \ 000000EC 010040E2 SUB R0,R0,#+1 \ 000000F0 001091E5 LDR R1,[R1, #+0] \ 000000F4 B010D1E1 LDRH R1,[R1, #+0] \ 000000F8 000051E1 CMP R1,R0 \ 000000FC 4F00001A BNE ??edchat_onkey_4 6453 { 6454 t=FindNextActiveContact(ed_struct->ed_contact); \ 00000100 00A095E5 LDR R10,[R5, #+0] \ 00000104 0A00A0E1 MOV R0,R10 \ 00000108 ........ BL FindNextActiveContact \ 0000010C 0090B0E1 MOVS R9,R0 6455 if (t && t!=ed_struct->ed_contact) \ 00000110 0A005911 CMPNE R9,R10 \ 00000114 4900000A BEQ ??edchat_onkey_4 6456 { 6457 CreateEditChat(t); \ ??edchat_onkey_8: \ 00000118 0900A0E1 MOV R0,R9 \ 0000011C ........ BL CreateEditChat 6458 return(1); \ 00000120 0100A0E3 MOV R0,#+1 \ 00000124 FD0000EA B ??edchat_onkey_3 6459 } 6460 } 6461 } 6462 } 6463 } 6464 6465 if (l==LEFT_BUTTON && LongLeftAction) \ ??edchat_onkey_5: \ 00000128 3D0058E3 CMP R8,#+61 \ 0000012C 1A00001A BNE ??edchat_onkey_9 \ 00000130 80049FE5 LDR R0,??edchat_onkey_6+0x4 ;; LongLeftAction \ 00000134 000090E5 LDR R0,[R0, #+0] \ 00000138 000050E3 CMP R0,#+0 \ 0000013C 3F00000A BEQ ??edchat_onkey_4 6466 { 6467 if (EDIT_GetFocus(data)==ed_struct->ed_answer) \ 00000140 0400A0E1 MOV R0,R4 \ 00000144 820100EF SWI +386 \ 00000148 081095E5 LDR R1,[R5, #+8] \ 0000014C 010050E1 CMP R0,R1 \ 00000150 3A00001A BNE ??edchat_onkey_4 6468 { 6469 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000154 04208DE2 ADD R2,SP,#+4 \ 00000158 0400A0E1 MOV R0,R4 \ 0000015C 690100EF SWI +361 6470 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) \ 00000160 0400A0E1 MOV R0,R4 \ 00000164 D30100EF SWI +467 \ 00000168 2C109DE5 LDR R1,[SP, #+44] \ 0000016C 010040E2 SUB R0,R0,#+1 \ 00000170 001091E5 LDR R1,[R1, #+0] \ 00000174 B010D1E1 LDRH R1,[R1, #+0] \ 00000178 000051E1 CMP R1,R0 \ 0000017C 2F00001A BNE ??edchat_onkey_4 6471 { 6472 t=FindPrevActiveContact(ed_struct->ed_contact); \ 00000180 00A095E5 LDR R10,[R5, #+0] \ 00000184 0A00A0E1 MOV R0,R10 \ 00000188 ........ BL FindPrevActiveContact \ 0000018C 0090B0E1 MOVS R9,R0 6473 if (t && t!=ed_struct->ed_contact) \ 00000190 0A005911 CMPNE R9,R10 \ 00000194 2900000A BEQ ??edchat_onkey_4 \ 00000198 DEFFFFEA B ??edchat_onkey_8 6474 { 6475 CreateEditChat(t); 6476 return(1); 6477 } 6478 } 6479 } 6480 } 6481 6482 if (l==VOL_DOWN_BUTTON) \ ??edchat_onkey_9: \ 0000019C 150058E3 CMP R8,#+21 \ 000001A0 0F00001A BNE ??edchat_onkey_10 6483 { 6484 WSHDR *ws; 6485 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000001A4 081095E5 LDR R1,[R5, #+8] \ 000001A8 04208DE2 ADD R2,SP,#+4 \ 000001AC 0400A0E1 MOV R0,R4 \ 000001B0 690100EF SWI +361 6486 if(wstrlen(ec.pWS)>0) \ 000001B4 2C009DE5 LDR R0,[SP, #+44] \ 000001B8 230100EF SWI +291 \ 000001BC 010050E3 CMP R0,#+1 \ 000001C0 1E0000BA BLT ??edchat_onkey_4 6487 { 6488 ws=AllocWS(1); \ 000001C4 0100A0E3 MOV R0,#+1 \ 000001C8 250100EF SWI +293 \ 000001CC 0090A0E1 MOV R9,R0 6489 CutWSTR(ws,0); \ 000001D0 0010A0E3 MOV R1,#+0 \ 000001D4 260100EF SWI +294 6490 6491 EDIT_SetFocus(data,ed_struct->ed_answer); \ 000001D8 081095E5 LDR R1,[R5, #+8] \ 000001DC 0400A0E1 MOV R0,R4 \ 000001E0 0F0000EA B ??edchat_onkey_11 6492 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 6493 6494 FreeWS(ws); 6495 RefreshGUI(); 6496 } 6497 } 6498 6499 if (l==VOL_UP_BUTTON) \ ??edchat_onkey_10: \ 000001E4 140058E3 CMP R8,#+20 \ 000001E8 1400001A BNE ??edchat_onkey_4 6500 { 6501 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); \ 000001EC 0800A0E3 MOV R0,#+8 \ 000001F0 700E80E3 ORR R0,R0,#0x700 \ 000001F4 060080E0 ADD R0,R0,R6 \ 000001F8 1B0000EF SWI +27 \ 000001FC 010080E2 ADD R0,R0,#+1 \ 00000200 250100EF SWI +293 \ 00000204 0090A0E1 MOV R9,R0 6502 ascii2ws(ws,last_msg_buffer); \ 00000208 0800A0E3 MOV R0,#+8 \ 0000020C 700E80E3 ORR R0,R0,#0x700 \ 00000210 061080E0 ADD R1,R0,R6 \ 00000214 0900A0E1 MOV R0,R9 \ 00000218 ........ _BLF ascii2ws,??ascii2ws??rA 6503 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); \ 0000021C 081095E5 LDR R1,[R5, #+8] \ 00000220 040095E5 LDR R0,[R5, #+4] \ ??edchat_onkey_11: \ 00000224 9B0100EF SWI +411 6504 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000228 040095E5 LDR R0,[R5, #+4] \ 0000022C 0910A0E1 MOV R1,R9 \ 00000230 810100EF SWI +385 6505 FreeWS(ws); \ 00000234 0900A0E1 MOV R0,R9 \ 00000238 290100EF SWI +297 6506 RefreshGUI(); \ 0000023C 960100EF SWI +406 6507 } 6508 } 6509 6510 6511 if (msg->gbsmsg->msg==KEY_DOWN) \ ??edchat_onkey_4: \ 00000240 040097E5 LDR R0,[R7, #+4] \ 00000244 9310A0E3 MOV R1,#+147 \ 00000248 F200D0E1 LDRSH R0,[R0, #+2] \ 0000024C 401F81E3 ORR R1,R1,#0x100 \ 00000250 010050E1 CMP R0,R1 \ 00000254 0A00001A BNE ??edchat_onkey_12 6512 { 6513 if ((l>='0')&&(l<='9')) \ 00000258 300058E3 CMP R8,#+48 \ 0000025C 0B0000BA BLT ??edchat_onkey_13 \ 00000260 3A0058E3 CMP R8,#+58 \ 00000264 060000AA BGE ??edchat_onkey_12 6514 { 6515 if (EDIT_GetFocus(data)!=ed_struct->ed_answer) \ 00000268 0400A0E1 MOV R0,R4 \ 0000026C 820100EF SWI +386 \ 00000270 081095E5 LDR R1,[R5, #+8] \ 00000274 010050E1 CMP R0,R1 \ 00000278 0100000A BEQ ??edchat_onkey_12 6516 EDIT_SetFocus(data,ed_struct->ed_answer); \ 0000027C 0400A0E1 MOV R0,R4 \ 00000280 9B0100EF SWI +411 6517 } 6518 if (l==GREEN_BUTTON) 6519 { 6520 if (connect_state==3) 6521 { 6522 if ((t=ed_struct->ed_contact)) 6523 { 6524 ExtractEditControl(data,ed_struct->ed_answer,&ec); 6525 SaveAnswer(t,ec.pWS); 6526 if ((s=t->answer)) 6527 { 6528 if ((len=strlen(s))) 6529 { 6530 CountMessage[1]++; 6531 t->send++; 6532 msg_away_timer=0; 6533 away_m=0; 6534 t->automsgcount=0; 6535 if(change_back_status) 6536 { 6537 CurrentStatus=status_rem; 6538 set_my_status(); 6539 change_back_status=0; 6540 } 6541 t->isactive=ACTIVE_TIME; 6542 p=malloc(sizeof(PKT)+len+1); 6543 p->pkt.uin=t->uin; 6544 p->pkt.type=T_SENDMSG; 6545 p->pkt.data_len=len; 6546 strcpy(p->data,s); 6547 strcpy(last_msg_buffer, s); 6548 AddStringToLog(t,0x01,p->data,I_str,(++SENDMSGCOUNT)&0x7FFF,1); //Номер сообщения 6549 SUBPROC((void *)SendAnswer,0,p); 6550 mfree(t->answer); 6551 t->answer=NULL; 6552 // request_remake_edchat=1; 6553 EDIT_SetFocus(data,ed_struct->ed_answer); 6554 CutWSTR(ews,0); 6555 EDIT_SetTextToFocused(data,ews); 6556 AddMsgToChat(data); 6557 RecountMenu(t, 1); 6558 return(-1); 6559 } 6560 } 6561 } 6562 } 6563 } 6564 if (l==ENTER_BUTTON) 6565 { 6566 6567 if (!EDIT_IsMarkModeActive(data)) // Только если не выделение 6568 { 6569 int pos, len; 6570 char *link; 6571 ExtractEditControl(ed_struct->ed_chatgui,EDIT_GetFocus(ed_struct->ed_chatgui),&ec); 6572 wstrcpy(ews,ec.pWS); 6573 pos = EDIT_GetCursorPos(data); 6574 len = wstrlen(ews); 6575 6576 link = malloc(len+1); 6577 6578 if(IsUrl(ews, pos, link)) 6579 { 6580 snprintf(fn, 255, "%s\\tmp%u.url", TEMPLATES_PATH, GetTempName); 6581 if ((f=fopen(fn,A_WriteOnly+A_BIN+A_Create+A_Truncate,P_WRITE,&err))!=-1) 6582 { 6583 fwrite(f,link,strlen(link),&err); 6584 fclose(f,&err); 6585 str_2ws(ews,fn,256); 6586 ExecuteFile(ews,0,0); 6587 unlink(fn, &err); 6588 } 6589 6590 // LockSched(); 6591 // ShowMSG(1,(int)link); 6592 // UnlockSched(); 6593 mfree(link); 6594 return (-1); 6595 } 6596 else 6597 { 6598 int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 6599 // EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+2); 6600 if(IsBufferMenu) 6601 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+3); 6602 else 6603 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+2); 6604 6605 mfree(link); 6606 return (-1); 6607 } 6608 6609 } 6610 6611 } 6612 if (l==VOL_UP_BUTTON) 6613 { 6614 int pos; 6615 6616 if ((pos=EDIT_GetFocus(data)-2)>=2) 6617 { 6618 EDIT_SetFocus(data, pos); 6619 EDIT_SetCursorPos(data, 1); 6620 } 6621 return (-1); 6622 } 6623 if (l==VOL_DOWN_BUTTON) 6624 { 6625 int pos; 6626 6627 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 6628 { 6629 EDIT_SetFocus(data, pos); 6630 EDIT_SetCursorPos(data, 1); 6631 } 6632 return (-1); 6633 } 6634 } 6635 return(0); //Do standart keys \ ??edchat_onkey_12: \ 00000284 0000A0E3 MOV R0,#+0 \ 00000288 4CDF8DE2 ADD SP,SP,#+304 \ 0000028C F08FBDE8 POP {R4-R11,PC} ;; return \ ??edchat_onkey_13: \ 00000290 0B0058E3 CMP R8,#+11 \ 00000294 5B00001A BNE ??edchat_onkey_14 \ 00000298 340496E5 LDR R0,[R6, #+1076] \ 0000029C 030050E3 CMP R0,#+3 \ 000002A0 F7FFFF1A BNE ??edchat_onkey_12 \ 000002A4 009095E5 LDR R9,[R5, #+0] \ 000002A8 000059E3 CMP R9,#+0 \ 000002AC F4FFFF0A BEQ ??edchat_onkey_12 \ 000002B0 081095E5 LDR R1,[R5, #+8] \ 000002B4 04208DE2 ADD R2,SP,#+4 \ 000002B8 0400A0E1 MOV R0,R4 \ 000002BC 690100EF SWI +361 \ 000002C0 2C109DE5 LDR R1,[SP, #+44] \ 000002C4 0900A0E1 MOV R0,R9 \ 000002C8 ........ BL SaveAnswer \ 000002CC 6C7099E5 LDR R7,[R9, #+108] \ 000002D0 000057E3 CMP R7,#+0 \ 000002D4 EAFFFF0A BEQ ??edchat_onkey_12 \ 000002D8 0700A0E1 MOV R0,R7 \ 000002DC 1B0000EF SWI +27 \ 000002E0 0080B0E1 MOVS R8,R0 \ 000002E4 E6FFFF0A BEQ ??edchat_onkey_12 \ 000002E8 BB0FA0E3 MOV R0,#+748 \ 000002EC 061090E7 LDR R1,[R0, +R6] \ 000002F0 00A0A0E3 MOV R10,#+0 \ 000002F4 011081E2 ADD R1,R1,#+1 \ 000002F8 061080E7 STR R1,[R0, +R6] \ 000002FC A80099E5 LDR R0,[R9, #+168] \ 00000300 010080E2 ADD R0,R0,#+1 \ 00000304 A80089E5 STR R0,[R9, #+168] \ 00000308 08A486E5 STR R10,[R6, #+1032] \ 0000030C 0CA486E5 STR R10,[R6, #+1036] \ 00000310 94A089E5 STR R10,[R9, #+148] \ 00000314 140496E5 LDR R0,[R6, #+1044] \ 00000318 000050E3 CMP R0,#+0 \ 0000031C 0300000A BEQ ??edchat_onkey_15 \ 00000320 100496E5 LDR R0,[R6, #+1040] \ 00000324 FC0386E5 STR R0,[R6, #+1020] \ 00000328 ........ BL set_my_status \ 0000032C 14A486E5 STR R10,[R6, #+1044] \ ??edchat_onkey_15: \ 00000330 5A0FA0E3 MOV R0,#+360 \ 00000334 740089E5 STR R0,[R9, #+116] \ 00000338 090088E2 ADD R0,R8,#+9 \ 0000033C 140000EF SWI +20 \ 00000340 00B0A0E1 MOV R11,R0 \ 00000344 0C0099E5 LDR R0,[R9, #+12] \ 00000348 0710A0E1 MOV R1,R7 \ 0000034C 00008BE5 STR R0,[R11, #+0] \ 00000350 0200A0E3 MOV R0,#+2 \ 00000354 B400CBE1 STRH R0,[R11, #+4] \ 00000358 B680CBE1 STRH R8,[R11, #+6] \ 0000035C 08008BE2 ADD R0,R11,#+8 \ 00000360 1A0000EF SWI +26 \ 00000364 0710A0E1 MOV R1,R7 \ 00000368 0800A0E3 MOV R0,#+8 \ 0000036C 700E80E3 ORR R0,R0,#0x700 \ 00000370 060080E0 ADD R0,R0,R6 \ 00000374 1A0000EF SWI +26 \ 00000378 0C0396E5 LDR R0,[R6, #+780] \ 0000037C ........ LDR R3,??DataTable288 ;; I_str \ 00000380 010080E2 ADD R0,R0,#+1 \ 00000384 0C0386E5 STR R0,[R6, #+780] \ 00000388 0110A0E3 MOV R1,#+1 \ 0000038C 02002DE9 PUSH {R1} \ 00000390 8008A0E1 LSL R0,R0,#+17 \ 00000394 A008A0E1 LSR R0,R0,#+17 \ 00000398 01002DE9 PUSH {R0} \ 0000039C 08208BE2 ADD R2,R11,#+8 \ 000003A0 0900A0E1 MOV R0,R9 \ 000003A4 ........ BL AddStringToLog \ 000003A8 ........ LDR R0,??DataTable289 ;; SendAnswer \ 000003AC 0B20A0E1 MOV R2,R11 \ 000003B0 0010A0E3 MOV R1,#+0 \ 000003B4 710100EF SWI +369 \ 000003B8 6C0099E5 LDR R0,[R9, #+108] \ 000003BC 150000EF SWI +21 \ 000003C0 6CA089E5 STR R10,[R9, #+108] \ 000003C4 081095E5 LDR R1,[R5, #+8] \ 000003C8 0400A0E1 MOV R0,R4 \ 000003CC 9B0100EF SWI +411 \ 000003D0 700396E5 LDR R0,[R6, #+880] \ 000003D4 0A10A0E1 MOV R1,R10 \ 000003D8 260100EF SWI +294 \ 000003DC 701396E5 LDR R1,[R6, #+880] \ 000003E0 0400A0E1 MOV R0,R4 \ 000003E4 810100EF SWI +385 \ 000003E8 0400A0E1 MOV R0,R4 \ 000003EC ........ BL AddMsgToChat \ 000003F0 0110A0E3 MOV R1,#+1 \ 000003F4 0900A0E1 MOV R0,R9 \ 000003F8 ........ BL RecountMenu \ 000003FC 0A00E0E1 MVN R0,R10 \ 00000400 08D08DE2 ADD SP,SP,#+8 \ 00000404 450000EA B ??edchat_onkey_3 \ ??edchat_onkey_14: \ 00000408 1A0058E3 CMP R8,#+26 \ 0000040C 5300001A BNE ??edchat_onkey_16 \ 00000410 0400A0E1 MOV R0,R4 \ 00000414 D80100EF SWI +472 \ 00000418 000050E3 CMP R0,#+0 \ 0000041C 98FFFF1A BNE ??edchat_onkey_12 \ 00000420 040095E5 LDR R0,[R5, #+4] \ 00000424 820100EF SWI +386 \ 00000428 04208DE2 ADD R2,SP,#+4 \ 0000042C 0010A0E1 MOV R1,R0 \ 00000430 040095E5 LDR R0,[R5, #+4] \ 00000434 690100EF SWI +361 \ 00000438 700396E5 LDR R0,[R6, #+880] \ 0000043C 2C109DE5 LDR R1,[SP, #+44] \ 00000440 1F0100EF SWI +287 \ 00000444 0400A0E1 MOV R0,R4 \ 00000448 D30100EF SWI +467 \ 0000044C 0080A0E1 MOV R8,R0 \ 00000450 700396E5 LDR R0,[R6, #+880] \ 00000454 230100EF SWI +291 \ 00000458 010080E2 ADD R0,R0,#+1 \ 0000045C 140000EF SWI +20 \ 00000460 0070A0E1 MOV R7,R0 \ 00000464 700396E5 LDR R0,[R6, #+880] \ 00000468 0720A0E1 MOV R2,R7 \ 0000046C 0810A0E1 MOV R1,R8 \ 00000470 ........ BL IsUrl \ 00000474 000050E3 CMP R0,#+0 \ 00000478 2A00000A BEQ ??edchat_onkey_17 \ 0000047C 38019FE5 LDR R0,??edchat_onkey_6+0x8 ;; GetTempName \ 00000480 ........ LDR R3,??DataTable254 ;; TEMPLATES_PATH \ 00000484 34219FE5 LDR R2,??edchat_onkey_6+0xC ;; `?` \ 00000488 01002DE9 PUSH {R0} \ 0000048C FF10A0E3 MOV R1,#+255 \ 00000490 34008DE2 ADD R0,SP,#+52 \ 00000494 1B0100EF SWI +283 \ 00000498 04308DE2 ADD R3,SP,#+4 \ 0000049C 402FA0E3 MOV R2,#+256 \ 000004A0 0110A0E3 MOV R1,#+1 \ 000004A4 831C81E3 ORR R1,R1,#0x8300 \ 000004A8 34008DE2 ADD R0,SP,#+52 \ 000004AC 0A0000EF SWI +10 \ 000004B0 0040A0E1 MOV R4,R0 \ 000004B4 010074E3 CMN R4,#+1 \ 000004B8 04D08DE2 ADD SP,SP,#+4 \ 000004BC 1400000A BEQ ??edchat_onkey_18 \ 000004C0 0700A0E1 MOV R0,R7 \ 000004C4 1B0000EF SWI +27 \ 000004C8 0020A0E1 MOV R2,R0 \ 000004CC 0D30A0E1 MOV R3,SP \ 000004D0 0710A0E1 MOV R1,R7 \ 000004D4 0400A0E1 MOV R0,R4 \ 000004D8 0C0000EF SWI +12 \ 000004DC 0D10A0E1 MOV R1,SP \ 000004E0 0400A0E1 MOV R0,R4 \ 000004E4 0D0000EF SWI +13 \ 000004E8 700396E5 LDR R0,[R6, #+880] \ 000004EC 402FA0E3 MOV R2,#+256 \ 000004F0 30108DE2 ADD R1,SP,#+48 \ 000004F4 6C0100EF SWI +364 \ 000004F8 700396E5 LDR R0,[R6, #+880] \ 000004FC 0020A0E3 MOV R2,#+0 \ 00000500 0010A0E3 MOV R1,#+0 \ 00000504 940000EF SWI +148 \ 00000508 0D10A0E1 MOV R1,SP \ 0000050C 30008DE2 ADD R0,SP,#+48 \ 00000510 6B0100EF SWI +363 \ ??edchat_onkey_18: \ 00000514 0700A0E1 MOV R0,R7 \ 00000518 150000EF SWI +21 \ ??edchat_onkey_1: \ 0000051C 0000E0E3 MVN R0,#+0 \ ??edchat_onkey_3: \ 00000520 4CDF8DE2 ADD SP,SP,#+304 \ 00000524 F08FBDE8 POP {R4-R11,PC} \ ??edchat_onkey_17: \ 00000528 000095E5 LDR R0,[R5, #+0] \ 0000052C 0C0090E5 LDR R0,[R0, #+12] \ 00000530 ........ BL LoadTemplates \ 00000534 ........ LDR R2,??DataTable255 ;; IsBufferMenu \ 00000538 84109FE5 LDR R1,??edchat_onkey_6+0x10 ;; ed_options_handler \ 0000053C 100085E5 STR R0,[R5, #+16] \ 00000540 002092E5 LDR R2,[R2, #+0] \ 00000544 000052E3 CMP R2,#+0 \ 00000548 02308002 ADDEQ R3,R0,#+2 \ 0000054C 03308012 ADDNE R3,R0,#+3 \ 00000550 0520A0E1 MOV R2,R5 \ 00000554 0400A0E1 MOV R0,R4 \ 00000558 E50100EF SWI +485 \ 0000055C ECFFFFEA B ??edchat_onkey_18 \ ??edchat_onkey_16: \ 00000560 140058E3 CMP R8,#+20 \ 00000564 0A00001A BNE ??edchat_onkey_19 \ 00000568 0400A0E1 MOV R0,R4 \ 0000056C 820100EF SWI +386 \ 00000570 021040E2 SUB R1,R0,#+2 \ 00000574 020051E3 CMP R1,#+2 \ ??edchat_onkey_20: \ 00000578 E7FFFFBA BLT ??edchat_onkey_1 \ 0000057C 0400A0E1 MOV R0,R4 \ 00000580 9B0100EF SWI +411 \ 00000584 0110A0E3 MOV R1,#+1 \ 00000588 0400A0E1 MOV R0,R4 \ 0000058C D40100EF SWI +468 \ ??edchat_onkey_21: \ 00000590 E1FFFFEA B ??edchat_onkey_1 \ ??edchat_onkey_19: \ 00000594 150058E3 CMP R8,#+21 \ 00000598 39FFFF1A BNE ??edchat_onkey_12 \ 0000059C 0400A0E1 MOV R0,R4 \ 000005A0 820100EF SWI +386 \ 000005A4 021080E2 ADD R1,R0,#+2 \ 000005A8 080095E5 LDR R0,[R5, #+8] \ 000005AC 010050E1 CMP R0,R1 \ 000005B0 F0FFFFEA B ??edchat_onkey_20 \ ??edchat_onkey_6: \ 000005B4 ........ DC32 LongRightAction \ 000005B8 ........ DC32 LongLeftAction \ 000005BC ........ DC32 GetTempName \ 000005C0 ........ DC32 `?` \ 000005C4 ........ DC32 ed_options_handler 6636 //1: close 6637 } 6638 6639 static const HEADER_DESC edchat_hdr={0,0,NULL,NULL,NULL,0,LGP_NULL}; 6640 6641 void (*old_ed_redraw)(void *data); \ In segment CODE, align 4, keep-with-next 6642 void my_ed_redraw(void *data) 6643 { \ my_ed_redraw: \ 00000000 70402DE9 PUSH {R4-R6,LR} 6644 void *edchat_gui; 6645 EDCHAT_STRUCT *ed_struct; 6646 if (old_ed_redraw) old_ed_redraw(data); \ 00000004 ........ LDR R4,??DataTable259 ;; popup \ 00000008 9C1494E5 LDR R1,[R4, #+1180] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0100000A BEQ ??my_ed_redraw_0 \ 00000014 31FF2FE1 BLX R1 6647 edchat_gui=FindGUIbyId(edchat_id,NULL); \ 00000018 0010A0E3 MOV R1,#+0 \ ??my_ed_redraw_0: \ 0000001C 5C0494E5 LDR R0,[R4, #+1116] \ 00000020 090200EF SWI +521 6648 if (edchat_gui) \ 00000024 000050E3 CMP R0,#+0 \ 00000028 7080BD08 POPEQ {R4-R6,PC} 6649 { 6650 ed_struct=EDIT_GetUserPointer(edchat_gui); \ 0000002C DF0100EF SWI +479 6651 if (ed_struct) \ 00000030 000050E3 CMP R0,#+0 \ 00000034 7080BD08 POPEQ {R4-R6,PC} 6652 { 6653 #ifndef NEWSGOLD 6654 int icon, width; 6655 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 385290E5 LDR R5,[R0, #+568] 6656 ((HEADER_DESC *)&edchat_hdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); \ 00000048 888100EF SWI +33160 \ 0000004C 0060A0E1 MOV R6,R0 \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 220000EF SWI +34 \ 00000058 28109FE5 LDR R1,??my_ed_redraw_1 ;; edchat_desc + 60 \ 0000005C 0040A0E1 MOV R4,R0 \ 00000060 012046E2 SUB R2,R6,#+1 \ 00000064 000042E0 SUB R0,R2,R0 \ 00000068 B000C1E1 STRH R0,[R1, #+0] 6657 DrawImg(ScreenW()-1-width,1,icon); \ 0000006C 888100EF SWI +33160 \ 00000070 0520A0E1 MOV R2,R5 \ 00000074 0110A0E3 MOV R1,#+1 \ 00000078 010040E2 SUB R0,R0,#+1 \ 0000007C 040040E0 SUB R0,R0,R4 \ 00000080 230000EF SWI +35 6658 #else 6659 6660 #ifdef NEW_HEADER_TO_CHAT 6661 CLIST *t = ed_struct->ed_contact; 6662 IMGHDR *status = GetIconByItem(GetIconIndex(t)); 6663 IMGHDR *xstatus = GetXIconByItem(t->xstate); 6664 int pos_x=1; 6665 char *s=malloc(128); 6666 zeromem(s,sizeof(s)); 6667 DrawRoundedFrame(0,YDISP,ScreenW()-40,YDISP+status->h*2+3,0,0,1,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(25)); 6668 6669 pos_x = DrwImage(status,pos_x,YDISP+1,RET_X) + 2; 6670 if(t->xstate!=0) pos_x += DrwImage(xstatus,pos_x,YDISP+1,RET_X) + 2; 6671 6672 //void DrawStr(char *str, int x, int y, int x2,int y2, int align, int font, char *color,int needcut) 6673 char *ptr; 6674 ptr = strchr(t->sttime,':'); 6675 6676 // sprintf(s,"%s, %s", t->name, (strlen(t->sttime) && ptr) ? (ptr+1) : (empty_str)); 6677 sprintf(s,_s, t->name); 6678 if(strlen(t->sttime) && ptr) 6679 { 6680 strcat(s,", "); 6681 strcat(s,ptr+1); 6682 } 6683 DrawStr(s,pos_x,YDISP+1,ScreenW()-42,YDISP+status->h,0,FONT_SMALL,"\xFF\xFF\xFF\x64",1); 6684 //char *GetLastXTextLOGQ(CLIST *t) 6685 char *xtext = malloc(256); 6686 zeromem(xtext,sizeof(xtext)); 6687 if(strlen(t->xtext) && t->xtext) 6688 { 6689 strncpy(xtext,t->xtext+1, t->xtext[0]); 6690 xtext[strlen(xtext)] = '\0'; 6691 } 6692 else 6693 strcpy(xtext, "Нет хстатуса"); 6694 DrawStr(xtext ,2,YDISP+status->h+2,ScreenW()-42,YDISP+status->h*2,0,FONT_SMALL,"\xFF\xFF\xFF\x64",1); 6695 // DrawLine(0,YDISP+status->h*2+3,ScreenW(),YDISP+status->h*2+3,0,"\xFF\x00\x00\x64"); 6696 mfree(s); 6697 #else 6698 int icon, width; 6699 // extern const char XSTATUSES_PATH[]; 6700 icon=*(S_ICONS+GetIconIndex(ed_struct->ed_contact)); 6701 width=GetImgWidth(icon); 6702 DrawImg(2,((HeaderH()-width)>>1)+YDISP,icon); 6703 /* CLIST *t = ed_struct->ed_contact; 6704 char s[256]; 6705 zeromem(s,sizeof(s)); 6706 sprintf(s,"%s\\%d.png",XSTATUSES_PATH,t->xstate); 6707 DrawImg(4+width,YDISP,(int)s);*/ 6708 6709 /* DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 6710 GetPaletteAdrByColorIndex(0), 6711 GetPaletteAdrByColorIndex(EDIT_IsBusy(edchat_gui)?3:4));*/ 6712 #endif 6713 6714 #endif 6715 } 6716 } 6717 } \ 00000084 7080BDE8 POP {R4-R6,PC} ;; return \ ??my_ed_redraw_1: \ 00000088 ........ DC32 edchat_desc + 60 6718 \ In segment CODE, align 4, keep-with-next 6719 void edchat_ghook(GUI *data, int cmd) 6720 { \ edchat_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 6721 static SOFTKEY_DESC sk={0x0FFF,0x0000,NULL}; 6722 sk.lgp_id=(int)lgpData[LGP_Menu]; \ 00000004 ........ LDR R4,??DataTable259 ;; popup \ 00000008 0050A0E1 MOV R5,R0 \ 0000000C ........ LDR R0,??DataTable287 ;; lgpData \ 00000010 2CD04DE2 SUB SP,SP,#+44 \ 00000014 0160A0E1 MOV R6,R1 \ 00000018 181090E5 LDR R1,[R0, #+24] 6723 static SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,NULL}; 6724 sk_cancel.lgp_id=(int)lgpData[LGP_Close]; \ 0000001C 200090E5 LDR R0,[R0, #+32] \ 00000020 F41284E5 STR R1,[R4, #+756] \ 00000024 FC0284E5 STR R0,[R4, #+764] 6725 // static SOFTKEY_DESC sk={0x0018,0x0000,(int)"Menu"}; 6726 int j; 6727 EDITCONTROL ec; 6728 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 00000028 0500A0E1 MOV R0,R5 \ 0000002C DF0100EF SWI +479 \ 00000030 0080A0E1 MOV R8,R0 6729 PNGTOP_DESC *pltop=PNG_TOP(); \ 00000034 B98100EF SWI +33209 \ 00000038 0090A0E1 MOV R9,R0 6730 if (cmd==9) \ 0000003C 0070A0E3 MOV R7,#+0 \ 00000040 090056E3 CMP R6,#+9 \ 00000044 0500001A BNE ??edchat_ghook_0 6731 { 6732 GBS_DelTimer(&tmr_illumination); //by BoBa 25.06.07 \ 00000048 8800A0E3 MOV R0,#+136 \ 0000004C 600D80E3 ORR R0,R0,#0x1800 \ 00000050 040080E0 ADD R0,R0,R4 \ 00000054 8C0100EF SWI +396 6733 pltop->dyn_pltop=NULL; \ 00000058 087089E5 STR R7,[R9, #+8] \ 0000005C 170000EA B ??edchat_ghook_1 6734 } 6735 if (cmd==2) \ ??edchat_ghook_0: \ 00000060 081098E5 LDR R1,[R8, #+8] \ 00000064 020056E3 CMP R6,#+2 \ 00000068 1600001A BNE ??edchat_ghook_2 6736 { 6737 ed_struct->ed_chatgui=data; \ 0000006C 045088E5 STR R5,[R8, #+4] 6738 // edgui_data=data; 6739 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000070 0500A0E1 MOV R0,R5 \ 00000074 9B0100EF SWI +411 6740 6741 static void *methods[16]; 6742 void **m=GetDataOfItemByID(data,2); \ 00000078 0210A0E3 MOV R1,#+2 \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 4F0100EF SWI +335 \ 00000084 0050B0E1 MOVS R5,R0 6743 if (m) 6744 { 6745 if (m[1]) \ 00000088 04009515 LDRNE R0,[R5, #+4] \ 0000008C 00005013 CMPNE R0,#+0 \ 00000090 6200000A BEQ ??edchat_ghook_3 6746 { 6747 memcpy(methods,m[1],sizeof(methods)); \ 00000094 4A6EA0E3 MOV R6,#+1184 \ 00000098 4020A0E3 MOV R2,#+64 \ 0000009C 0010A0E1 MOV R1,R0 \ 000000A0 040086E0 ADD R0,R6,R4 \ 000000A4 1E0100EF SWI +286 6748 old_ed_redraw=(void (*)(void *))(methods[0]); \ 000000A8 040096E7 LDR R0,[R6, +R4] \ 000000AC 9C0484E5 STR R0,[R4, #+1180] 6749 methods[0]=(void *)my_ed_redraw; \ 000000B0 70019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 000000B4 040086E7 STR R0,[R6, +R4] 6750 m[1]=methods; \ 000000B8 040086E0 ADD R0,R6,R4 \ 000000BC 040085E5 STR R0,[R5, #+4] \ ??edchat_ghook_1: \ 000000C0 2CD08DE2 ADD SP,SP,#+44 \ 000000C4 F083BDE8 POP {R4-R9,PC} 6751 } 6752 } 6753 } 6754 if (cmd==3) \ ??edchat_ghook_2: \ 000000C8 030056E3 CMP R6,#+3 \ 000000CC 0E00001A BNE ??edchat_ghook_5 6755 { 6756 // if (edgui_data==data) edgui_data=NULL; 6757 if (ed_struct->ed_contact) \ 000000D0 000098E5 LDR R0,[R8, #+0] \ 000000D4 000050E3 CMP R0,#+0 \ 000000D8 0500000A BEQ ??edchat_ghook_6 6758 { 6759 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000DC 0D20A0E1 MOV R2,SP \ 000000E0 0500A0E1 MOV R0,R5 \ 000000E4 690100EF SWI +361 6760 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000E8 28109DE5 LDR R1,[SP, #+40] \ 000000EC 000098E5 LDR R0,[R8, #+0] \ 000000F0 ........ BL SaveAnswer 6761 } 6762 RecountMenu(ed_struct->ed_contact, 1); \ ??edchat_ghook_6: \ 000000F4 000098E5 LDR R0,[R8, #+0] \ 000000F8 0110A0E3 MOV R1,#+1 \ 000000FC ........ BL RecountMenu 6763 mfree(ed_struct); \ 00000100 0800A0E1 MOV R0,R8 \ 00000104 150000EF SWI +21 \ 00000108 ECFFFFEA B ??edchat_ghook_1 6764 } 6765 if (cmd==0x0A) \ ??edchat_ghook_5: \ 0000010C 0A0056E3 CMP R6,#+10 \ 00000110 0900001A BNE ??edchat_ghook_7 6766 { 6767 pltop->dyn_pltop=SmilesImgList; \ 00000114 10019FE5 LDR R0,??edchat_ghook_4+0x4 ;; SmilesImgList \ 00000118 000090E5 LDR R0,[R0, #+0] \ 0000011C 080089E5 STR R0,[R9, #+8] 6768 DisableIDLETMR(); \ 00000120 7F0100EF SWI +383 6769 total_unread-=ed_struct->requested_decrement_total_unread; \ 00000124 380394E5 LDR R0,[R4, #+824] \ 00000128 0C1098E5 LDR R1,[R8, #+12] \ 0000012C 010040E0 SUB R0,R0,R1 \ 00000130 380384E5 STR R0,[R4, #+824] 6770 ed_struct->requested_decrement_total_unread=0; \ 00000134 0C7088E5 STR R7,[R8, #+12] \ 00000138 E0FFFFEA B ??edchat_ghook_1 6771 /* if (request_close_edchat) 6772 { 6773 request_close_edchat=0; 6774 GeneralFunc_flag1(edchat_id,1); 6775 return; 6776 }*/ 6777 } 6778 if (cmd==7) \ ??edchat_ghook_7: \ 0000013C 070056E3 CMP R6,#+7 \ 00000140 2700001A BNE ??edchat_ghook_8 6779 { 6780 SetSoftKey(data,&sk,SET_SOFT_KEY_N); \ 00000144 0120A0E3 MOV R2,#+1 \ 00000148 BC1F84E2 ADD R1,R4,#+752 \ 0000014C 0500A0E1 MOV R0,R5 \ 00000150 680100EF SWI +360 6781 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000154 081098E5 LDR R1,[R8, #+8] \ 00000158 0D20A0E1 MOV R2,SP \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 690100EF SWI +361 6782 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 6783 SetSoftKey(data,&sk_cancel,SET_SOFT_KEY_N==0?1:0); \ 00000178 0020A0E3 MOV R2,#+0 \ 0000017C BE1F84E2 ADD R1,R4,#+760 \ 00000180 0500A0E1 MOV R0,R5 \ 00000184 680100EF SWI +360 6784 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 6785 { 6786 time_to_stop_t9=0; \ 00000198 747484E5 STR R7,[R4, #+1140] 6787 if (ed_struct->ed_contact->req_add) \ 0000019C 000098E5 LDR R0,[R8, #+0] \ 000001A0 601090E5 LDR R1,[R0, #+96] \ 000001A4 000051E3 CMP R1,#+0 \ 000001A8 0500000A BEQ ??edchat_ghook_10 6788 { 6789 ed_struct->ed_contact->req_add=0; \ 000001AC 607080E5 STR R7,[R0, #+96] 6790 AddMsgToChat(data); \ 000001B0 0500A0E1 MOV R0,R5 \ 000001B4 ........ BL AddMsgToChat 6791 RecountMenu(ed_struct->ed_contact, 1); \ 000001B8 000098E5 LDR R0,[R8, #+0] \ 000001BC 0110A0E3 MOV R1,#+1 \ 000001C0 ........ BL RecountMenu 6792 } 6793 if (ed_struct->ed_contact->req_drawack) \ ??edchat_ghook_10: \ 000001C4 000098E5 LDR R0,[R8, #+0] \ 000001C8 641090E5 LDR R1,[R0, #+100] \ 000001CC 000051E3 CMP R1,#+0 \ 000001D0 1200000A BEQ ??edchat_ghook_3 6794 { 6795 ed_struct->ed_contact->req_drawack=0; \ 000001D4 647080E5 STR R7,[R0, #+100] 6796 DrawAck(data); \ 000001D8 0500A0E1 MOV R0,R5 \ 000001DC ........ BL DrawAck \ 000001E0 B6FFFFEA B ??edchat_ghook_1 6797 } 6798 } 6799 } 6800 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001E4 0C0056E3 CMP R6,#+12 \ 000001E8 0C00001A BNE ??edchat_ghook_3 6801 { 6802 j=EDIT_GetFocus(data); \ 000001EC 0500A0E1 MOV R0,R5 \ 000001F0 820100EF SWI +386 \ 000001F4 0040A0E1 MOV R4,R0 6803 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 080098E5 LDR R0,[R8, #+8] \ 0000020C 000054E1 CMP R4,R0 \ 00000210 0200000A BEQ ??edchat_ghook_3 6804 EDIT_SetCursorPos(data,1); \ 00000214 0110A0E3 MOV R1,#+1 \ 00000218 0500A0E1 MOV R0,R5 \ 0000021C D40100EF SWI +468 6805 } 6806 } \ ??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 \ In segment DATA_C, align 4, align-sorted 6807 6808 6809 6810 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 070000006400 DC32 7, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ 00000038 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000040 000000000000 DC32 0H, 0, 32767 \ 0000FF7F0000 \ 0000004C 2D2D2D2D2D2D DC8 "-------" \ 2D00 6811 { 6812 1, 6813 edchat_onkey, 6814 edchat_ghook, 6815 (void *)edchat_locret, 6816 0, 6817 &menu_skt, 6818 {0,NULL,NULL,NULL}, 6819 FONT_SMALL, 6820 100, 6821 101, 6822 0, 6823 // 0x00000001 - Выровнять по правому краю 6824 // 0x00000002 - Выровнять по центру 6825 // 0x00000004 - Инверсия знакомест 6826 // 0x00000008 - UnderLine 6827 // 0x00000020 - Не переносить слова 6828 // 0x00000200 - bold 6829 0, 6830 // 0x00000002 - ReadOnly 6831 // 0x00000004 - Не двигается курсор 6832 // 0x40000000 - Поменять местами софт-кнопки 6833 0x40000000 6834 }; 6835 \ In segment CODE, align 4, keep-with-next 6836 void CreateEditChat(CLIST *t) 6837 { \ CreateEditChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 6838 extern const int FIRST_LETTER; 6839 void *ma=malloc_adr(); 6840 void *eq; 6841 EDITCONTROL ec; 6842 EDITC_OPTIONS ec_options; 6843 int color, font, type; 6844 int zc; 6845 6846 LOGQ *lp; 6847 int edchat_toitem; 6848 6849 #ifdef NEW_HEADER_TO_CHAT 6850 *((int *)(&edchat_hdr.lgp_id))=(int)""; 6851 #else 6852 *((int *)(&edchat_hdr.lgp_id))=(int)t->name;//(int)s; \ 00000004 CC649FE5 LDR R6,??CreateEditChat_0 ;; edchat_desc 6853 #endif 6854 // *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+GetIconIndex(t); 6855 *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+IS_NULLICON; \ 00000008 ........ LDR R7,??DataTable259 ;; popup \ 0000000C 4CD04DE2 SUB SP,SP,#+76 \ 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 9F0F87E2 ADD R0,R7,#+636 \ 00000028 400086E5 STR R0,[R6, #+64] 6856 6857 eq=AllocEQueue(ma,mfree_adr()); \ 0000002C 158000EF SWI +32789 \ 00000030 0010A0E1 MOV R1,R0 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 630100EF SWI +355 6858 6859 6860 lp=t->log; \ 0000003C 689094E5 LDR R9,[R4, #+104] \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 000059E3 CMP R9,#+0 \ 00000048 A500000A BEQ ??CreateEditChat_1 6861 6862 while(lp) 6863 { 6864 font = ED_H_FONT_SIZE; 6865 if ((zc=lp->acked&3)) \ ??CreateEditChat_2: \ 0000004C ........ LDR R2,??DataTable260 ;; ED_X_FONT_SIZE \ 00000050 ........ LDR R0,??DataTable261 ;; ED_H_FONT_SIZE \ 00000054 002092E5 LDR R2,[R2, #+0] \ 00000058 00A090E5 LDR R10,[R0, #+0] \ 0000005C 040099E5 LDR R0,[R9, #+4] \ 00000060 ........ LDR R1,??DataTable262 ;; I_COLOR \ 00000064 1C208DE5 STR R2,[SP, #+28] \ 00000068 ........ LDR R2,??DataTable263 ;; X_COLOR \ 0000006C 030010E2 ANDS R0,R0,#0x3 \ 00000070 002092E5 LDR R2,[R2, #+0] \ 00000074 14208DE5 STR R2,[SP, #+20] \ 00000078 ........ LDR R2,??DataTable264 ;; O_ED_X_FONT_SIZE \ 0000007C 002092E5 LDR R2,[R2, #+0] \ 00000080 18208DE5 STR R2,[SP, #+24] \ 00000084 ........ LDR R2,??DataTable265 ;; O_X_COLOR \ 00000088 002092E5 LDR R2,[R2, #+0] \ 0000008C 10208DE5 STR R2,[SP, #+16] \ 00000090 00B091E5 LDR R11,[R1, #+0] \ 00000094 0300000A BEQ ??CreateEditChat_3 6866 { 6867 if (zc==1) \ 00000098 010050E3 CMP R0,#+1 \ 0000009C 2900001A BNE ??CreateEditChat_4 6868 color=ACK_COLOR; //Зеленый \ 000000A0 ........ LDR R0,??DataTable266 ;; ACK_COLOR \ 000000A4 260000EA B ??CreateEditChat_5 6869 else 6870 color=I_COLOR; 6871 } 6872 else 6873 { 6874 if (lp->ID==0xFFFFFFFF) \ ??CreateEditChat_3: \ 000000A8 080099E5 LDR R0,[R9, #+8] \ 000000AC 010070E3 CMN R0,#+1 \ 000000B0 2200001A BNE ??CreateEditChat_6 6875 { 6876 type = lp->type&0x0F; \ 000000B4 0C0099E5 LDR R0,[R9, #+12] \ 000000B8 0F1000E2 AND R1,R0,#0xF 6877 if(lp->type&0x10) \ 000000BC 100010E3 TST R0,#0x10 \ 000000C0 1100000A BEQ ??CreateEditChat_7 6878 { 6879 color = (type==1)?O_I_COLOR:((type==3 || type==4)?O_X_COLOR:O_TO_COLOR); \ 000000C4 010051E3 CMP R1,#+1 \ 000000C8 0400001A BNE ??CreateEditChat_8 \ 000000CC ........ LDR R0,??DataTable267 ;; O_I_COLOR \ ??CreateEditChat_9: \ 000000D0 00B090E5 LDR R11,[R0, #+0] \ ??CreateEditChat_10: \ 000000D4 ........ LDR R0,??DataTable268 ;; O_ED_H_FONT_SIZE \ 000000D8 00A090E5 LDR R10,[R0, #+0] \ 000000DC 190000EA B ??CreateEditChat_4 \ ??CreateEditChat_8: \ 000000E0 030051E3 CMP R1,#+3 \ 000000E4 04005113 CMPNE R1,#+4 \ 000000E8 0500001A BNE ??CreateEditChat_11 \ 000000EC 02B0A0E1 MOV R11,R2 6880 font = (type==3 || type==4)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; \ 000000F0 030051E3 CMP R1,#+3 \ 000000F4 04005113 CMPNE R1,#+4 \ 000000F8 F5FFFF1A BNE ??CreateEditChat_10 \ 000000FC 18A09DE5 LDR R10,[SP, #+24] \ 00000100 100000EA B ??CreateEditChat_4 \ ??CreateEditChat_11: \ 00000104 ........ LDR R0,??DataTable269 ;; O_TO_COLOR \ 00000108 F0FFFFEA B ??CreateEditChat_9 6881 } 6882 else 6883 { 6884 color = (type==1)?I_COLOR:((type==3 || type==4)?X_COLOR:TO_COLOR); \ ??CreateEditChat_7: \ 0000010C 010051E3 CMP R1,#+1 \ 00000110 0C00000A BEQ ??CreateEditChat_4 \ 00000114 030051E3 CMP R1,#+3 \ 00000118 04005113 CMPNE R1,#+4 \ 0000011C 0500001A BNE ??CreateEditChat_12 \ 00000120 14B09DE5 LDR R11,[SP, #+20] 6885 font = (type==3 || type==4)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; \ 00000124 030051E3 CMP R1,#+3 \ 00000128 04005113 CMPNE R1,#+4 \ 0000012C 0500001A BNE ??CreateEditChat_4 \ 00000130 1CA09DE5 LDR R10,[SP, #+28] \ 00000134 030000EA B ??CreateEditChat_4 \ ??CreateEditChat_12: \ 00000138 ........ LDR R0,??DataTable270 ;; TO_COLOR \ 0000013C 000000EA B ??CreateEditChat_5 6886 } 6887 } 6888 else 6889 color=UNACK_COLOR; //Серый \ ??CreateEditChat_6: \ 00000140 ........ LDR R0,??DataTable271 ;; UNACK_COLOR \ ??CreateEditChat_5: \ 00000144 00B090E5 LDR R11,[R0, #+0] 6890 } 6891 PrepareEditControl(&ec); \ ??CreateEditChat_4: \ 00000148 20008DE2 ADD R0,SP,#+32 \ 0000014C 640100EF SWI +356 6892 if ((lp->type&0x0F)!=3 && (lp->type&0x0F)!=4) \ 00000150 0C0099E5 LDR R0,[R9, #+12] \ 00000154 0F1000E2 AND R1,R0,#0xF \ 00000158 030051E3 CMP R1,#+3 \ 0000015C 0F000012 ANDNE R0,R0,#0xF \ 00000160 04005013 CMPNE R0,#+4 \ 00000164 0800000A BEQ ??CreateEditChat_13 6893 { 6894 ascii2ws(ews,lp->hdr); \ 00000168 700397E5 LDR R0,[R7, #+880] \ 0000016C 101089E2 ADD R1,R9,#+16 \ 00000170 ........ _BLF ascii2ws,??ascii2ws??rA 6895 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000174 703397E5 LDR R3,[R7, #+880] \ 00000178 4020A0E3 MOV R2,#+64 \ 0000017C 000093E5 LDR R0,[R3, #+0] \ 00000180 B000D0E1 LDRH R0,[R0, #+0] \ 00000184 01002DE9 PUSH {R0} \ 00000188 030000EA B ??CreateEditChat_14 6896 } 6897 else 6898 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??CreateEditChat_13: \ 0000018C 0000A0E3 MOV R0,#+0 \ 00000190 01002DE9 PUSH {R0} \ 00000194 703397E5 LDR R3,[R7, #+880] \ 00000198 2020A0E3 MOV R2,#+32 \ ??CreateEditChat_14: \ 0000019C 0110A0E3 MOV R1,#+1 \ 000001A0 24008DE2 ADD R0,SP,#+36 \ 000001A4 650100EF SWI +357 \ 000001A8 04D08DE2 ADD SP,SP,#+4 6899 PrepareEditCOptions(&ec_options); \ 000001AC 0D00A0E1 MOV R0,SP \ 000001B0 C80100EF SWI +456 6900 SetPenColorToEditCOptions(&ec_options,color); \ 000001B4 0B10A0E1 MOV R1,R11 \ 000001B8 0D00A0E1 MOV R0,SP \ 000001BC CC0100EF SWI +460 6901 SetFontToEditCOptions(&ec_options,font); \ 000001C0 0A10A0E1 MOV R1,R10 \ 000001C4 0D00A0E1 MOV R0,SP \ 000001C8 CA0100EF SWI +458 6902 CopyOptionsToEditControl(&ec,&ec_options); \ 000001CC 0D10A0E1 MOV R1,SP \ 000001D0 20008DE2 ADD R0,SP,#+32 \ 000001D4 CE0100EF SWI +462 6903 AddEditControlToEditQend(eq,&ec,ma); \ 000001D8 0520A0E1 MOV R2,R5 \ 000001DC 20108DE2 ADD R1,SP,#+32 \ 000001E0 0800A0E1 MOV R0,R8 \ 000001E4 660100EF SWI +358 6904 if ((lp->type&0x0F)!=3 && (lp->type&0x0F)!=4) \ 000001E8 0C0099E5 LDR R0,[R9, #+12] \ 000001EC 0F1000E2 AND R1,R0,#0xF \ 000001F0 030051E3 CMP R1,#+3 \ 000001F4 04005113 CMPNE R1,#+4 \ 000001F8 0300000A BEQ ??CreateEditChat_15 6905 { 6906 ParseAnswer(ews,lp->text); \ 000001FC 700397E5 LDR R0,[R7, #+880] \ 00000200 601089E2 ADD R1,R9,#+96 \ 00000204 ........ BL ParseAnswer \ 00000208 060000EA B ??CreateEditChat_16 6907 } 6908 else 6909 { 6910 ParseXStatusText(ews,lp->text,(lp->type&0x10)?O_X_COLOR:X_COLOR,t->xstate); \ ??CreateEditChat_15: \ 0000020C B635D4E1 LDRH R3,[R4, #+86] \ 00000210 100010E3 TST R0,#0x10 \ 00000214 10209D15 LDRNE R2,[SP, #+16] \ 00000218 700397E5 LDR R0,[R7, #+880] \ 0000021C 14209D05 LDREQ R2,[SP, #+20] \ 00000220 601089E2 ADD R1,R9,#+96 \ 00000224 ........ BL ParseXStatusText 6911 } 6912 PrepareEditControl(&ec); \ ??CreateEditChat_16: \ 00000228 20008DE2 ADD R0,SP,#+32 \ 0000022C 640100EF SWI +356 6913 ConstructEditControl(&ec, 6914 ECT_NORMAL_TEXT, 6915 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 6916 ews,ews->wsbody[0]); \ 00000230 703397E5 LDR R3,[R7, #+880] \ 00000234 000093E5 LDR R0,[R3, #+0] \ 00000238 B010D0E1 LDRH R1,[R0, #+0] \ 0000023C 000051E3 CMP R1,#+0 \ 00000240 0100A0E1 MOV R0,R1 \ 00000244 01002DE9 PUSH {R0} \ 00000248 812DA013 MOVNE R2,#+8256 \ 0000024C 2020A003 MOVEQ R2,#+32 \ 00000250 0310A0E3 MOV R1,#+3 \ 00000254 24008DE2 ADD R0,SP,#+36 \ 00000258 650100EF SWI +357 6917 PrepareEditCOptions(&ec_options); \ 0000025C 04008DE2 ADD R0,SP,#+4 \ 00000260 C80100EF SWI +456 6918 //#ifdef M75 6919 if ((lp->type&0x0F)!=3 && (lp->type&0x0F)!=4) \ 00000264 0C0099E5 LDR R0,[R9, #+12] \ 00000268 04D08DE2 ADD SP,SP,#+4 \ 0000026C 0F1000E2 AND R1,R0,#0xF \ 00000270 030051E3 CMP R1,#+3 \ 00000274 04005113 CMPNE R1,#+4 \ 00000278 0400000A BEQ ??CreateEditChat_17 6920 { 6921 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 0000027C 100010E3 TST R0,#0x10 \ 00000280 ........ LDRNE R0,??DataTable272 ;; O_ED_FONT_SIZE \ 00000284 ........ LDREQ R0,??DataTable274 ;; ED_FONT_SIZE \ 00000288 001090E5 LDR R1,[R0, #+0] \ 0000028C 080000EA B ??CreateEditChat_18 6922 } 6923 else 6924 { 6925 SetPenColorToEditCOptions(&ec_options,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_17: \ 00000290 100010E3 TST R0,#0x10 \ 00000294 10109D15 LDRNE R1,[SP, #+16] \ 00000298 0D00A0E1 MOV R0,SP \ 0000029C 14109D05 LDREQ R1,[SP, #+20] \ 000002A0 CC0100EF SWI +460 6926 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_X_FONT_SIZE:ED_X_FONT_SIZE); \ 000002A4 0C0099E5 LDR R0,[R9, #+12] \ 000002A8 100010E3 TST R0,#0x10 \ 000002AC 18109D15 LDRNE R1,[SP, #+24] \ 000002B0 1C109D05 LDREQ R1,[SP, #+28] \ ??CreateEditChat_18: \ 000002B4 0D00A0E1 MOV R0,SP \ 000002B8 CA0100EF SWI +458 6927 } 6928 //#else 6929 // SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 6930 //#endif 6931 CopyOptionsToEditControl(&ec,&ec_options); \ 000002BC 0D10A0E1 MOV R1,SP \ 000002C0 20008DE2 ADD R0,SP,#+32 \ 000002C4 CE0100EF SWI +462 6932 AddEditControlToEditQend(eq,&ec,ma); \ 000002C8 0520A0E1 MOV R2,R5 \ 000002CC 20108DE2 ADD R1,SP,#+32 \ 000002D0 0800A0E1 MOV R0,R8 \ 000002D4 660100EF SWI +358 6933 lp=lp->next; \ 000002D8 009099E5 LDR R9,[R9, #+0] 6934 } \ 000002DC 000059E3 CMP R9,#+0 \ 000002E0 59FFFF1A BNE ??CreateEditChat_2 6935 if (t->isunread) total_unread--; \ ??CreateEditChat_1: \ 000002E4 5C0094E5 LDR R0,[R4, #+92] 6936 t->isunread=0; \ 000002E8 0090A0E3 MOV R9,#+0 \ 000002EC 000050E3 CMP R0,#+0 \ 000002F0 38039715 LDRNE R0,[R7, #+824] \ 000002F4 01004012 SUBNE R0,R0,#+1 \ 000002F8 38038715 STRNE R0,[R7, #+824] \ 000002FC 5C9084E5 STR R9,[R4, #+92] 6937 6938 total_unread_all -= t->unread_msg; \ 00000300 3C0397E5 LDR R0,[R7, #+828] \ 00000304 881094E5 LDR R1,[R4, #+136] \ 00000308 010040E0 SUB R0,R0,R1 \ 0000030C 3C0387E5 STR R0,[R7, #+828] 6939 t->unread_msg=0; \ 00000310 889084E5 STR R9,[R4, #+136] 6940 6941 6942 ChangeContactPos(t); \ 00000314 0400A0E1 MOV R0,R4 \ 00000318 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 6943 wsprintf(ews, "-------"); \ 0000031C 700397E5 LDR R0,[R7, #+880] \ 00000320 4C1086E2 ADD R1,R6,#+76 \ 00000324 240100EF SWI +292 6944 PrepareEditControl(&ec); \ 00000328 20008DE2 ADD R0,SP,#+32 \ 0000032C 640100EF SWI +356 6945 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000330 703397E5 LDR R3,[R7, #+880] \ 00000334 4020A0E3 MOV R2,#+64 \ 00000338 000093E5 LDR R0,[R3, #+0] \ 0000033C 0110A0E3 MOV R1,#+1 \ 00000340 B000D0E1 LDRH R0,[R0, #+0] \ 00000344 01002DE9 PUSH {R0} \ 00000348 24008DE2 ADD R0,SP,#+36 \ 0000034C 650100EF SWI +357 6946 PrepareEditCOptions(&ec_options); \ 00000350 04008DE2 ADD R0,SP,#+4 \ 00000354 C80100EF SWI +456 6947 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000358 ........ LDR R0,??DataTable274 ;; ED_FONT_SIZE \ 0000035C 00A090E5 LDR R10,[R0, #+0] \ 00000360 04008DE2 ADD R0,SP,#+4 \ 00000364 0A10A0E1 MOV R1,R10 \ 00000368 CA0100EF SWI +458 6948 CopyOptionsToEditControl(&ec,&ec_options); \ 0000036C 04108DE2 ADD R1,SP,#+4 \ 00000370 24008DE2 ADD R0,SP,#+36 \ 00000374 CE0100EF SWI +462 6949 AddEditControlToEditQend(eq,&ec,ma); \ 00000378 0520A0E1 MOV R2,R5 \ 0000037C 24108DE2 ADD R1,SP,#+36 \ 00000380 0800A0E1 MOV R0,R8 \ 00000384 660100EF SWI +358 6950 6951 if (t->answer) ParseAnswer(ews,t->answer); \ 00000388 6C1094E5 LDR R1,[R4, #+108] \ 0000038C 04D08DE2 ADD SP,SP,#+4 \ 00000390 000051E3 CMP R1,#+0 \ 00000394 0200000A BEQ ??CreateEditChat_19 \ 00000398 700397E5 LDR R0,[R7, #+880] \ 0000039C ........ BL ParseAnswer \ 000003A0 020000EA B ??CreateEditChat_20 6952 else CutWSTR(ews,0); \ ??CreateEditChat_19: \ 000003A4 700397E5 LDR R0,[R7, #+880] \ 000003A8 0010A0E3 MOV R1,#+0 \ 000003AC 260100EF SWI +294 6953 PrepareEditControl(&ec); \ ??CreateEditChat_20: \ 000003B0 20008DE2 ADD R0,SP,#+32 \ 000003B4 640100EF SWI +356 6954 ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,7168); \ 000003B8 1C019FE5 LDR R0,??CreateEditChat_0+0x4 ;; FIRST_LETTER \ 000003BC 0310A0E3 MOV R1,#+3 \ 000003C0 000090E5 LDR R0,[R0, #+0] \ 000003C4 000050E3 CMP R0,#+0 \ 000003C8 700DA0E3 MOV R0,#+7168 \ 000003CC 01002DE9 PUSH {R0} \ 000003D0 703397E5 LDR R3,[R7, #+880] \ 000003D4 402DA013 MOVNE R2,#+4096 \ 000003D8 0020A003 MOVEQ R2,#+0 \ 000003DC 24008DE2 ADD R0,SP,#+36 \ 000003E0 650100EF SWI +357 6955 6956 PrepareEditCOptions(&ec_options); \ 000003E4 04008DE2 ADD R0,SP,#+4 \ 000003E8 C80100EF SWI +456 6957 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 000003EC 0A10A0E1 MOV R1,R10 \ 000003F0 04008DE2 ADD R0,SP,#+4 \ 000003F4 CA0100EF SWI +458 6958 CopyOptionsToEditControl(&ec,&ec_options); \ 000003F8 04108DE2 ADD R1,SP,#+4 \ 000003FC 24008DE2 ADD R0,SP,#+36 \ 00000400 CE0100EF SWI +462 6959 edchat_toitem=AddEditControlToEditQend(eq,&ec,ma); \ 00000404 0520A0E1 MOV R2,R5 \ 00000408 24108DE2 ADD R1,SP,#+36 \ 0000040C 0800A0E1 MOV R0,R8 \ 00000410 660100EF SWI +358 \ 00000414 00A0A0E1 MOV R10,R0 6960 6961 if (t->req_xtext) \ 00000418 800094E5 LDR R0,[R4, #+128] \ 0000041C 04D08DE2 ADD SP,SP,#+4 \ 00000420 000050E3 CMP R0,#+0 \ 00000424 0400000A BEQ ??CreateEditChat_21 6962 { 6963 FreeXText(t); \ 00000428 0400A0E1 MOV R0,R4 \ 0000042C ........ _BLF FreeXText,??FreeXText??rA 6964 t->req_xtext=0; \ 00000430 809084E5 STR R9,[R4, #+128] 6965 RequestXText(t->uin); \ 00000434 0C0094E5 LDR R0,[R4, #+12] \ 00000438 ........ BL RequestXText 6966 } 6967 6968 EDCHAT_STRUCT *ed_struct=malloc(sizeof(EDCHAT_STRUCT)); \ ??CreateEditChat_21: \ 0000043C 1400A0E3 MOV R0,#+20 \ 00000440 140000EF SWI +20 \ 00000444 0050A0E1 MOV R5,R0 6969 ed_struct->ed_contact=t; \ 00000448 004085E5 STR R4,[R5, #+0] 6970 ed_struct->ed_answer=edchat_toitem; \ 0000044C 08A085E5 STR R10,[R5, #+8] 6971 ed_struct->requested_decrement_total_unread=0; \ 00000450 0C9085E5 STR R9,[R5, #+12] 6972 t->req_add=0; \ 00000454 609084E5 STR R9,[R4, #+96] 6973 t->last_log=NULL; \ 00000458 709084E5 STR R9,[R4, #+112] 6974 6975 int scr_w=ScreenW(); \ 0000045C 888100EF SWI +33160 6976 int scr_h=ScreenH(); \ 00000460 898100EF SWI +33161 6977 // int head_h=HeaderH(); 6978 6979 patch_header(&edchat_hdr); \ 00000464 389086E5 STR R9,[R6, #+56] \ 00000468 888100EF SWI +33160 \ 0000046C 010040E2 SUB R0,R0,#+1 \ 00000470 BC03C6E1 STRH R0,[R6, #+60] \ 00000474 8A8100EF SWI +33162 \ 00000478 010040E2 SUB R0,R0,#+1 \ 0000047C BE03C6E1 STRH R0,[R6, #+62] 6980 patch_input(&edchat_desc); \ 00000480 B891C6E1 STRH R9,[R6, #+24] \ 00000484 8A8100EF SWI +33162 \ 00000488 010080E2 ADD R0,R0,#+1 \ 0000048C BA01C6E1 STRH R0,[R6, #+26] \ 00000490 888100EF SWI +33160 \ 00000494 010040E2 SUB R0,R0,#+1 \ 00000498 BC01C6E1 STRH R0,[R6, #+28] \ 0000049C 898100EF SWI +33161 \ 000004A0 0040A0E1 MOV R4,R0 \ 000004A4 8B8100EF SWI +33163 \ 000004A8 000044E0 SUB R0,R4,R0 \ 000004AC 010040E2 SUB R0,R0,#+1 \ 000004B0 BE01C6E1 STRH R0,[R6, #+30] 6981 // edchat_desc.font=ED_FONT_SIZE; 6982 6983 6984 edchat_id=CreateInputTextDialog(&edchat_desc,&edchat_hdr,eq,1,ed_struct); \ 000004B4 20002DE9 PUSH {R5} \ 000004B8 0130A0E3 MOV R3,#+1 \ 000004BC 0820A0E1 MOV R2,R8 \ 000004C0 381086E2 ADD R1,R6,#+56 \ 000004C4 0600A0E1 MOV R0,R6 \ 000004C8 670100EF SWI +359 \ 000004CC 5C0487E5 STR R0,[R7, #+1116] 6985 } \ 000004D0 50D08DE2 ADD SP,SP,#+80 \ 000004D4 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 000004D8 ........ DC32 edchat_desc \ 000004DC ........ DC32 FIRST_LETTER 6986 6987 //----------------------------------------------------------------------------- 6988 6989 #define EC_MNU_MAX 10 6990 \ In segment DATA_Z, align 4, align-sorted 6991 int Focus_Quote = 0;//Флаг, определяет после цитирования перейти на поле ввода, или остаться на текущей позиции \ Focus_Quote: \ 00000000 DS8 4 6992 \ In segment CODE, align 4, keep-with-next 6993 void Quote(GUI *data) 6994 { \ Quote: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 6995 int q_n; 6996 EDITCONTROL ec, ec_hdr; 6997 EDITCONTROL ec_ed; 6998 WSHDR *ed_ws; 6999 WSHDR *ws; 7000 7001 EDCHAT_STRUCT *ed_struct; 7002 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 7003 7004 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 7005 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 7006 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 7007 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 7008 7009 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 7010 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 7011 { 7012 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 7013 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote_1 7014 } 7015 else 7016 CutWSTR(ed_ws,0); \ ??Quote_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 7017 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 7018 { 7019 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 7020 } 7021 else 7022 { 7023 wstrcat(ed_ws,ec.pWS); \ ??Quote_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 7024 } 7025 int ed_pos=0; \ ??Quote_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 7026 do 7027 { 7028 ed_pos++; \ ??Quote_4: \ 000000D0 017080E2 ADD R7,R0,#+1 7029 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 7030 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 7031 } 7032 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 7033 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 7034 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 7035 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 7036 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 7037 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 7038 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 7039 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 7040 7041 int ii=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000170 040094E5 LDR R0,[R4, #+4] \ 00000174 820100EF SWI +386 7042 7043 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 7044 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000188 040094E5 LDR R0,[R4, #+4] \ 0000018C 0610A0E1 MOV R1,R6 \ 00000190 810100EF SWI +385 7045 7046 if(!Focus_Quote) EDIT_SetFocus(ed_struct->ed_chatgui,ii); \ 00000194 ........ LDR R0,??DataTable277 ;; Focus_Quote \ 00000198 000090E5 LDR R0,[R0, #+0] \ 0000019C 000050E3 CMP R0,#+0 \ 000001A0 0200001A BNE ??Quote_5 \ 000001A4 040094E5 LDR R0,[R4, #+4] \ 000001A8 0510A0E1 MOV R1,R5 \ 000001AC 9B0100EF SWI +411 7047 FreeWS(ws); \ ??Quote_5: \ 000001B0 0600A0E1 MOV R0,R6 \ 000001B4 290100EF SWI +297 7048 GeneralFuncF1(1); \ 000001B8 0100A0E3 MOV R0,#+1 \ 000001BC 3B0100EF SWI +315 7049 } \ 000001C0 84D08DE2 ADD SP,SP,#+132 \ 000001C4 F080BDE8 POP {R4-R7,PC} ;; return 7050 \ In segment CODE, align 4, keep-with-next 7051 void QuoteFocus(GUI *data) 7052 { 7053 Focus_Quote = 1; \ QuoteFocus: \ 00000000 ........ LDR R1,??DataTable277 ;; Focus_Quote \ 00000004 0120A0E3 MOV R2,#+1 \ 00000008 002081E5 STR R2,[R1, #+0] 7054 Quote(data); \ 0000000C ........ B Quote ;; tailcall 7055 } 7056 \ In segment CODE, align 4, keep-with-next 7057 void QuoteNotFocus(GUI *data) 7058 { 7059 Focus_Quote = 0; \ QuoteNotFocus: \ 00000000 ........ LDR R1,??DataTable277 ;; Focus_Quote \ 00000004 0020A0E3 MOV R2,#+0 \ 00000008 002081E5 STR R2,[R1, #+0] 7060 Quote(data); \ 0000000C ........ B Quote ;; tailcall 7061 } 7062 \ In segment CODE, align 4, keep-with-next 7063 void GetShortInfo(GUI *data) 7064 { \ GetShortInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} 7065 EDCHAT_STRUCT *ed_struct; 7066 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 7067 7068 TPKT *p; 7069 CLIST *t; 7070 if ((t=ed_struct->ed_contact)&&(connect_state==3)) \ 0000000C 005094E5 LDR R5,[R4, #+0] \ 00000010 000055E3 CMP R5,#+0 \ 00000014 2100000A BEQ ??GetShortInfo_0 \ 00000018 ........ LDR R0,??DataTable292 ;; popup \ 0000001C 341490E5 LDR R1,[R0, #+1076] \ 00000020 030051E3 CMP R1,#+3 \ 00000024 1D00001A BNE ??GetShortInfo_0 7071 { 7072 req_info_contact = 1; \ 00000028 0110A0E3 MOV R1,#+1 \ 0000002C 781480E5 STR R1,[R0, #+1144] 7073 p=malloc(sizeof(PKT)); \ 00000030 0800A0E3 MOV R0,#+8 \ 00000034 140000EF SWI +20 7074 p->pkt.uin=t->uin; 7075 p->pkt.type=T_REQINFOSHORT; 7076 p->pkt.data_len=0; 7077 AddStringToLog(t, 0x01, "Request info...", I_str,0xFFFFFFFF,1); \ 00000038 ........ LDR R3,??DataTable288 ;; I_str \ 0000003C 68209FE5 LDR R2,??GetShortInfo_1 ;; `?` \ 00000040 0060A0E1 MOV R6,R0 \ 00000044 0C0095E5 LDR R0,[R5, #+12] \ 00000048 0110A0E3 MOV R1,#+1 \ 0000004C 000086E5 STR R0,[R6, #+0] \ 00000050 0B00A0E3 MOV R0,#+11 \ 00000054 B400C6E1 STRH R0,[R6, #+4] \ 00000058 0000A0E3 MOV R0,#+0 \ 0000005C B600C6E1 STRH R0,[R6, #+6] \ 00000060 0100A0E3 MOV R0,#+1 \ 00000064 01002DE9 PUSH {R0} \ 00000068 000060E2 RSB R0,R0,#+0 \ 0000006C 01002DE9 PUSH {R0} \ 00000070 0500A0E1 MOV R0,R5 \ 00000074 ........ BL AddStringToLog 7078 AddMsgToChat(ed_struct->ed_chatgui); \ 00000078 040094E5 LDR R0,[R4, #+4] \ 0000007C ........ BL AddMsgToChat 7079 RecountMenu(t, 1); \ 00000080 0110A0E3 MOV R1,#+1 \ 00000084 0500A0E1 MOV R0,R5 \ 00000088 ........ BL RecountMenu 7080 SUBPROC((void *)SendAnswer,0,p); \ 0000008C ........ LDR R0,??DataTable289 ;; SendAnswer \ 00000090 0620A0E1 MOV R2,R6 \ 00000094 0010A0E3 MOV R1,#+0 \ 00000098 710100EF SWI +369 \ 0000009C 08D08DE2 ADD SP,SP,#+8 7081 } 7082 GeneralFuncF1(1); \ ??GetShortInfo_0: \ 000000A0 0100A0E3 MOV R0,#+1 \ 000000A4 3B0100EF SWI +315 7083 } \ 000000A8 7080BDE8 POP {R4-R6,PC} ;; return \ ??GetShortInfo_1: \ 000000AC ........ DC32 `?` 7084 7085 void AskNickAndAddContact(EDCHAT_STRUCT *); \ In segment CODE, align 4, keep-with-next 7086 void AddCurContact(GUI *data) 7087 { \ AddCurContact: \ 00000000 00402DE9 PUSH {LR} 7088 EDCHAT_STRUCT *ed_struct; 7089 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 7090 7091 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,??DataTable286 ;; popup + 1076 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0000001A BNE ??AddCurContact_0 \ 00000024 ........ _BLF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA 7092 GeneralFuncF1(1); \ ??AddCurContact_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 7093 } \ 00000030 0080BDE8 POP {PC} ;; return 7094 \ In segment CODE, align 4, keep-with-next 7095 void SendAuthReq(GUI *data) 7096 { \ SendAuthReq: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 7097 EDCHAT_STRUCT *ed_struct; 7098 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 7099 7100 TPKT *p; 7101 CLIST *t; 7102 int l; 7103 //const char s[]=LG_AUTHREQ; 7104 //char s[]=""; 7105 //strcpy(s,(char*)lgpData[LGP_AuthReq]); 7106 7107 if ((t=ed_struct->ed_contact)&&(connect_state==3)) \ 0000000C 005094E5 LDR R5,[R4, #+0] \ 00000010 000055E3 CMP R5,#+0 \ 00000014 2500000A BEQ ??SendAuthReq_0 \ 00000018 ........ LDR R0,??DataTable286 ;; popup + 1076 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 2100001A BNE ??SendAuthReq_0 7108 { 7109 p=malloc(sizeof(PKT)+(l=strlen((char*)lgpData[LGP_AuthReq]))+1); \ 00000028 ........ LDR R7,??DataTable287 ;; lgpData \ 0000002C 540097E5 LDR R0,[R7, #+84] \ 00000030 1B0000EF SWI +27 \ 00000034 0080A0E1 MOV R8,R0 \ 00000038 090088E2 ADD R0,R8,#+9 \ 0000003C 140000EF SWI +20 \ 00000040 0060A0E1 MOV R6,R0 7110 p->pkt.uin=t->uin; \ 00000044 0C0095E5 LDR R0,[R5, #+12] \ 00000048 000086E5 STR R0,[R6, #+0] 7111 p->pkt.type=T_AUTHREQ; \ 0000004C 0A00A0E3 MOV R0,#+10 \ 00000050 B400C6E1 STRH R0,[R6, #+4] 7112 p->pkt.data_len=l; \ 00000054 B680C6E1 STRH R8,[R6, #+6] 7113 strcpy(p->data,(char*)lgpData[LGP_AuthReq]); \ 00000058 541097E5 LDR R1,[R7, #+84] \ 0000005C 080086E2 ADD R0,R6,#+8 \ 00000060 1A0000EF SWI +26 7114 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000064 ........ LDR R3,??DataTable288 ;; I_str \ 00000068 0100A0E3 MOV R0,#+1 \ 0000006C 01002DE9 PUSH {R0} \ 00000070 082086E2 ADD R2,R6,#+8 \ 00000074 0110A0E3 MOV R1,#+1 \ 00000078 000060E2 RSB R0,R0,#+0 \ 0000007C 01002DE9 PUSH {R0} \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 ........ BL AddStringToLog 7115 AddMsgToChat(ed_struct->ed_chatgui); \ 00000088 040094E5 LDR R0,[R4, #+4] \ 0000008C ........ BL AddMsgToChat 7116 RecountMenu(t, 1); \ 00000090 0110A0E3 MOV R1,#+1 \ 00000094 0500A0E1 MOV R0,R5 \ 00000098 ........ BL RecountMenu 7117 SUBPROC((void *)SendAnswer,0,p); \ 0000009C ........ LDR R0,??DataTable289 ;; SendAnswer \ 000000A0 0620A0E1 MOV R2,R6 \ 000000A4 0010A0E3 MOV R1,#+0 \ 000000A8 710100EF SWI +369 \ 000000AC 08D08DE2 ADD SP,SP,#+8 7118 } 7119 GeneralFuncF1(1); \ ??SendAuthReq_0: \ 000000B0 0100A0E3 MOV R0,#+1 \ 000000B4 3B0100EF SWI +315 7120 } \ 000000B8 F081BDE8 POP {R4-R8,PC} ;; return 7121 \ In segment CODE, align 4, keep-with-next 7122 void SendAuthGrant(GUI *data) 7123 { \ SendAuthGrant: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 7124 EDCHAT_STRUCT *ed_struct; 7125 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 7126 7127 TPKT *p; 7128 CLIST *t; 7129 int l; 7130 //const char s[]=LG_AUTHGRANT; 7131 //char s[]=""; 7132 //strcpy(s,(char*)lgpData[LGP_AuthGrant]); 7133 7134 if ((t=ed_struct->ed_contact)&&(connect_state==3)) \ 0000000C 005094E5 LDR R5,[R4, #+0] \ 00000010 000055E3 CMP R5,#+0 \ 00000014 2500000A BEQ ??SendAuthGrant_0 \ 00000018 ........ LDR R0,??DataTable286 ;; popup + 1076 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 2100001A BNE ??SendAuthGrant_0 7135 { 7136 p=malloc(sizeof(PKT)+(l=strlen((char*)lgpData[LGP_AuthGrant]))+1); \ 00000028 ........ LDR R7,??DataTable287 ;; lgpData \ 0000002C 580097E5 LDR R0,[R7, #+88] \ 00000030 1B0000EF SWI +27 \ 00000034 0080A0E1 MOV R8,R0 \ 00000038 090088E2 ADD R0,R8,#+9 \ 0000003C 140000EF SWI +20 \ 00000040 0060A0E1 MOV R6,R0 7137 p->pkt.uin=t->uin; \ 00000044 0C0095E5 LDR R0,[R5, #+12] \ 00000048 000086E5 STR R0,[R6, #+0] 7138 p->pkt.type=T_AUTHGRANT; \ 0000004C 0E00A0E3 MOV R0,#+14 \ 00000050 B400C6E1 STRH R0,[R6, #+4] 7139 p->pkt.data_len=l; \ 00000054 B680C6E1 STRH R8,[R6, #+6] 7140 strcpy(p->data,(char*)lgpData[LGP_AuthGrant]); \ 00000058 581097E5 LDR R1,[R7, #+88] \ 0000005C 080086E2 ADD R0,R6,#+8 \ 00000060 1A0000EF SWI +26 7141 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000064 ........ LDR R3,??DataTable288 ;; I_str \ 00000068 0100A0E3 MOV R0,#+1 \ 0000006C 01002DE9 PUSH {R0} \ 00000070 082086E2 ADD R2,R6,#+8 \ 00000074 0110A0E3 MOV R1,#+1 \ 00000078 000060E2 RSB R0,R0,#+0 \ 0000007C 01002DE9 PUSH {R0} \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 ........ BL AddStringToLog 7142 AddMsgToChat(ed_struct->ed_chatgui); \ 00000088 040094E5 LDR R0,[R4, #+4] \ 0000008C ........ BL AddMsgToChat 7143 RecountMenu(t, 1); \ 00000090 0110A0E3 MOV R1,#+1 \ 00000094 0500A0E1 MOV R0,R5 \ 00000098 ........ BL RecountMenu 7144 SUBPROC((void *)SendAnswer,0,p); \ 0000009C ........ LDR R0,??DataTable289 ;; SendAnswer \ 000000A0 0620A0E1 MOV R2,R6 \ 000000A4 0010A0E3 MOV R1,#+0 \ 000000A8 710100EF SWI +369 \ 000000AC 08D08DE2 ADD SP,SP,#+8 7145 } 7146 GeneralFuncF1(1); \ ??SendAuthGrant_0: \ 000000B0 0100A0E3 MOV R0,#+1 \ 000000B4 3B0100EF SWI +315 7147 } \ 000000B8 F081BDE8 POP {R4-R8,PC} ;; return 7148 \ In segment CODE, align 4, keep-with-next 7149 void OpenLogfile(GUI *data) 7150 { \ OpenLogfile: \ 00000000 30402DE9 PUSH {R4,R5,LR} 7151 EDCHAT_STRUCT *ed_struct; 7152 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 7153 7154 extern const char HIST_PATH[64]; 7155 extern const int HISTORY_TYPE; 7156 CLIST *t; 7157 WSHDR *ws=AllocWS(256); \ 0000000C 400FA0E3 MOV R0,#+256 \ 00000010 250100EF SWI +293 \ 00000014 0050A0E1 MOV R5,R0 7158 if ((t=ed_struct->ed_contact)) \ 00000018 000094E5 LDR R0,[R4, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1400000A BEQ ??OpenLogfile_0 7159 { 7160 if (HISTORY_TYPE) \ 00000024 0C3090E5 LDR R3,[R0, #+12] \ 00000028 5C009FE5 LDR R0,??OpenLogfile_1 ;; HISTORY_TYPE \ 0000002C 5C109FE5 LDR R1,??OpenLogfile_1+0x4 ;; `?` \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 58209FE5 LDR R2,??OpenLogfile_1+0x8 ;; HIST_PATH \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 0600000A BEQ ??OpenLogfile_2 7161 wsprintf(ws,"%s\\%u\\%u.txt",HIST_PATH,UIN,t->uin); \ 00000040 ........ LDR R0,??DataTable290 ;; UIN \ 00000044 08002DE9 PUSH {R3} \ 00000048 003090E5 LDR R3,[R0, #+0] \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 240100EF SWI +292 \ 00000054 04D08DE2 ADD SP,SP,#+4 \ 00000058 020000EA B ??OpenLogfile_3 7162 else 7163 wsprintf(ws,"%s\\%u.txt",HIST_PATH,t->uin); \ ??OpenLogfile_2: \ 0000005C 101081E2 ADD R1,R1,#+16 \ 00000060 0500A0E1 MOV R0,R5 \ 00000064 240100EF SWI +292 7164 ExecuteFile(ws,NULL,NULL); \ ??OpenLogfile_3: \ 00000068 0020A0E3 MOV R2,#+0 \ 0000006C 0010A0E3 MOV R1,#+0 \ 00000070 0500A0E1 MOV R0,R5 \ 00000074 940000EF SWI +148 7165 } 7166 FreeWS(ws); \ ??OpenLogfile_0: \ 00000078 0500A0E1 MOV R0,R5 \ 0000007C 290100EF SWI +297 7167 GeneralFuncF1(1); \ 00000080 0100A0E3 MOV R0,#+1 \ 00000084 3B0100EF SWI +315 7168 } \ 00000088 3080BDE8 POP {R4,R5,PC} ;; return \ ??OpenLogfile_1: \ 0000008C ........ DC32 HISTORY_TYPE \ 00000090 ........ DC32 `?` \ 00000094 ........ DC32 HIST_PATH 7169 \ In segment CODE, align 4, keep-with-next 7170 void ClearLog(GUI *data/*,void *dummy*/) 7171 { \ ClearLog: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 7172 EDITCONTROL ec; 7173 EDCHAT_STRUCT *ed_struct; 7174 WSHDR *ws; 7175 CLIST *t; 7176 7177 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 7178 7179 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 7180 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 7181 { 7182 ws=AllocWS(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 250100EF SWI +293 \ 00000038 0050A0E1 MOV R5,R0 7183 CutWSTR(ws,0); \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 260100EF SWI +294 7184 7185 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 7186 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000050 040094E5 LDR R0,[R4, #+4] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 810100EF SWI +385 7187 7188 FreeWS(ws); \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 290100EF SWI +297 7189 GeneralFuncF1(1); \ 00000064 1D0000EA B ??ClearLog_1 7190 } 7191 else 7192 { 7193 7194 if ((t=ed_struct->ed_contact)) \ ??ClearLog_0: \ 00000068 005094E5 LDR R5,[R4, #+0] \ 0000006C 000055E3 CMP R5,#+0 \ 00000070 1C00000A BEQ ??ClearLog_2 7195 { 7196 if (t->log) \ 00000074 680095E5 LDR R0,[R5, #+104] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 7197 { 7198 FreeLOGQ(&t->log); \ 00000084 680085E2 ADD R0,R5,#+104 \ 00000088 ........ BL FreeLOGQ 7199 t->msg_count=0; \ 0000008C 786085E5 STR R6,[R5, #+120] 7200 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 7201 { 7202 while(ed_struct->ed_answer!=2) 7203 { 7204 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??ClearLog_5: \ 000000AC 040094E5 LDR R0,[R4, #+4] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 D10100EF SWI +465 7205 ed_struct->ed_answer--; \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 010040E2 SUB R0,R0,#+1 \ 000000C0 080084E5 STR R0,[R4, #+8] 7206 } \ ??ClearLog_4: \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC F6FFFF1A BNE ??ClearLog_5 7207 } 7208 } 7209 t->isactive=0; //by BoBa 18.06.07 \ ??ClearLog_3: \ 000000D0 746085E5 STR R6,[R5, #+116] 7210 RecountMenu(t, 1); \ 000000D4 0110A0E3 MOV R1,#+1 \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ BL RecountMenu 7211 GeneralFuncF1(1); \ ??ClearLog_1: \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 3B0100EF SWI +315 7212 } 7213 } 7214 } \ ??ClearLog_2: \ 000000E8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000EC 7080BDE8 POP {R4-R6,PC} ;; return 7215 7216 /* 7217 * Функция: LoadMoreHistory 7218 * Описание: Загружает в чат истории на 8кб, бывает нужно)) 7219 * Параметры: GUI *data 7220 * Возвращаемое значение: Ничего не возвращает 7221 */ \ In segment CODE, align 4, keep-with-next 7222 void LoadMoreHistory(GUI *data) 7223 { \ LoadMoreHistory: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 7224 ClearLog(data); \ 00000008 ........ BL ClearLog 7225 EDCHAT_STRUCT *ed_struct; 7226 CLIST *t; 7227 7228 ed_struct = MenuGetUserPointer(data); \ 0000000C 0400A0E1 MOV R0,R4 \ 00000010 E00100EF SWI +480 7229 t=ed_struct->ed_contact; \ 00000014 004090E5 LDR R4,[R0, #+0] 7230 GetHistory(t, 8*1024); \ 00000018 801DA0E3 MOV R1,#+8192 \ 0000001C 0400A0E1 MOV R0,R4 \ 00000020 ........ _BLF GetHistory,??GetHistory??rA 7231 GeneralFunc_flag1(edchat_id,1); \ 00000024 ........ LDR R0,??DataTable291 ;; popup + 1116 \ 00000028 0110A0E3 MOV R1,#+1 \ 0000002C 000090E5 LDR R0,[R0, #+0] \ 00000030 3D0100EF SWI +317 7232 CreateEditChat(t); \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1040BDE8 POP {R4,LR} ;; Pop \ 0000003C ........ B CreateEditChat ;; tailcall 7233 } 7234 \ In segment CODE, align 4, keep-with-next 7235 void ecmenu_ghook(void *data, int cmd) 7236 { \ ecmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 7237 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 7238 { 7239 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 7240 } 7241 } \ 00000010 0080BDE8 POP {PC} ;; return 7242 7243 static MENUITEM_DESC ecmenu_ITEMS[EC_MNU_MAX]= 7244 { 7245 {NULL,NULL,LGP_NULL,0,NULL,MENU_FLAG3,MENU_FLAG2}, 7246 {NULL,NULL,LGP_NULL,0,NULL,MENU_FLAG3,MENU_FLAG2}, 7247 {NULL,NULL,LGP_NULL,0,NULL,MENU_FLAG3,MENU_FLAG2}, 7248 {NULL,NULL,LGP_NULL,0,NULL,MENU_FLAG3,MENU_FLAG2}, 7249 {NULL,NULL,LGP_NULL,0,NULL,MENU_FLAG3,MENU_FLAG2}, 7250 {NULL,NULL,LGP_NULL,0,NULL,MENU_FLAG3,MENU_FLAG2}, 7251 {NULL,NULL,LGP_NULL,0,NULL,MENU_FLAG3,MENU_FLAG2}, 7252 {NULL,NULL,LGP_NULL,0,NULL,MENU_FLAG3,MENU_FLAG2}, 7253 {NULL,NULL,LGP_NULL,0,NULL,MENU_FLAG3,MENU_FLAG2}, 7254 {NULL,NULL,LGP_NULL,0,NULL,MENU_FLAG3,MENU_FLAG2} 7255 }; 7256 7257 extern void AddSmile(GUI *data); \ In segment DATA_C, align 4, align-sorted 7258 static const MENUPROCS_DESC ecmenu_HNDLS[EC_MNU_MAX]= \ ecmenu_HNDLS: \ 00000000 ............ DC32 QuoteFocus, QuoteNotFocus, AddSmile, GetShortInfo, AddCurContact \ ............ \ ............ \ .... \ 00000014 ............ DC32 SendAuthReq, SendAuthGrant, OpenLogfile, LoadMoreHistory, ClearLog \ ............ \ ............ \ .... 7259 { 7260 QuoteFocus,//Quote, 7261 QuoteNotFocus,//QuoteNotFocus, 7262 AddSmile, 7263 GetShortInfo, 7264 AddCurContact, 7265 SendAuthReq, 7266 SendAuthGrant, 7267 OpenLogfile, 7268 LoadMoreHistory, 7269 ClearLog, 7270 }; 7271 /* 7272 static const void *menuprocs[EC_MNU_MAX]= 7273 { 7274 (void *)QuoteFocus, 7275 (void *)QuoteNotFocus, 7276 (void *)AddSmile, 7277 (void *)GetShortInfo, 7278 (void *)AddCurContact, 7279 (void *)ChangeSoundMode, 7280 #ifdef ELKA 7281 (void *)ChangeSLIMode, 7282 #endif 7283 (void *)ChangeDoubleVibra, 7284 (void *)ChangePOPUPMode, 7285 (void *)ChangeShowOfflineMode, 7286 (void *)ChangeShowGroupsMode, 7287 (void *)ChangeActiveUp, 7288 (void *)EditConfig, 7289 (void *)Disconnect, 7290 (void *)PingToServer, 7291 (void *)AboutDlg 7292 };*/ 7293 7294 //05.10.2009 \ In segment CODE, align 4, keep-with-next 7295 int ec_menu_onkey(void *data, GUI_MSG *msg)//кейхук для закладок 7296 { 7297 /* int i; 7298 i=GetCurMenuItem(data); 7299 int k=msg->gbsmsg->submess; 7300 int m=msg->gbsmsg->msg; 7301 if(m==KEY_DOWN && (k>='0' && k<='9')) 7302 { 7303 // if(k>='0' && k<='9') 7304 ((void (*)(void))(ecmenu_HNDLS[k-'1']))(); 7305 return 1; 7306 }*/ 7307 return 0; \ ec_menu_onkey: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 7308 } \ In segment DATA_I, align 4, align-sorted \ popup: \ 00000000 DS8 288 \ 00000120 REQUIRE `?` \ ecmenu_ITEMS: \ 00000120 DS8 280 \ 00000238 REQUIRE `?` \ S_ICONS: \ 00000238 DS8 128 \ 000002B8 REQUIRE `?` \ menu_sk: \ 000002B8 DS8 24 \ 000002D0 REQUIRE `?` \ gipc: \ 000002D0 DS8 12 \ 000002DC REQUIRE `?` \ tmr_gipc: \ 000002DC DS8 12 \ 000002E8 REQUIRE `?` \ CountMessage: \ 000002E8 DS8 8 \ 000002F0 REQUIRE `?` \ 000002F0 DS8 8 \ 000002F8 REQUIRE `?` \ 000002F8 DS8 8 \ 00000300 REQUIRE `?` \ cltop: \ 00000300 DS8 4 \ 00000304 REQUIRE `?` \ maincsm_id: \ 00000304 DS8 4 \ 00000308 REQUIRE `?` \ maingui_id: \ 00000308 DS8 4 \ 0000030C REQUIRE `?` \ SENDMSGCOUNT: \ 0000030C DS8 4 \ 00000310 REQUIRE `?` \ IsActiveUp: \ 00000310 DS8 4 \ 00000314 REQUIRE `?` \ vibra_count: \ 00000314 DS8 4 \ 00000318 REQUIRE `?` \ Is_Double_Vibra_On: \ 00000318 DS8 4 \ 0000031C REQUIRE `?` \ Is_Vibra_Enabled: \ 0000031C DS8 4 \ 00000320 REQUIRE `?` \ Is_Sounds_Enabled: \ 00000320 DS8 4 \ 00000324 REQUIRE `?` \ Is_Show_Offline: \ 00000324 DS8 4 \ 00000328 REQUIRE `?` \ Is_Show_Groups: \ 00000328 DS8 4 \ 0000032C REQUIRE `?` \ Is_POPUP_On: \ 0000032C DS8 4 \ 00000330 REQUIRE `?` \ Is_ILU_By_Online: \ 00000330 DS8 4 \ 00000334 REQUIRE `?` \ Is_Extd_Sound: \ 00000334 DS8 4 \ 00000338 REQUIRE `?` \ total_unread: \ 00000338 DS8 4 \ 0000033C REQUIRE `?` \ total_unread_all: \ 0000033C DS8 4 \ 00000340 REQUIRE `?` \ wsBuffer: \ 00000340 DS8 4 \ 00000344 REQUIRE `?` \ develop_by_unlock: \ 00000344 DS8 4 \ 00000348 REQUIRE `?` \ ShowLoadScreen: \ 00000348 DS8 4 \ 0000034C REQUIRE `?` \ 0000034C DS8 4 \ 00000350 REQUIRE `?` \ on_off_timer: \ 00000350 DS8 4 \ 00000354 REQUIRE `?` \ online_contact: \ 00000354 DS8 4 \ 00000358 REQUIRE `?` \ total_contact: \ 00000358 DS8 4 \ 0000035C REQUIRE `?` \ isonline: \ 0000035C DS8 4 \ 00000360 REQUIRE `?` \ DoRefreshCL: \ 00000360 DS8 4 \ 00000364 REQUIRE `?` \ blocked_spam: \ 00000364 DS8 4 \ 00000368 REQUIRE `?` \ LongPressTimer: \ 00000368 DS8 4 \ 0000036C REQUIRE `?` \ PrintTimer: \ 0000036C DS8 4 \ 00000370 REQUIRE `?` \ ews: \ 00000370 DS8 4 \ 00000374 REQUIRE `?` \ icons_names: \ 00000374 DS8 124 \ 000003F0 REQUIRE `?` \ Is_ILU_Mode: \ 000003F0 DS8 4 \ 000003F4 REQUIRE `?` \ silenthide: \ 000003F4 DS8 4 \ 000003F8 REQUIRE `?` \ disautorecconect: \ 000003F8 DS8 4 \ 000003FC REQUIRE `?` \ CurrentStatus: \ 000003FC DS8 4 \ 00000400 REQUIRE `?` \ CurrentXStatus: \ 00000400 DS8 4 \ 00000404 REQUIRE `?` \ CurrentPrivateStatus: \ 00000404 DS8 4 \ 00000408 REQUIRE `?` \ msg_away_timer: \ 00000408 DS8 4 \ 0000040C REQUIRE `?` \ away_m: \ 0000040C DS8 4 \ 00000410 REQUIRE `?` \ status_rem: \ 00000410 DS8 4 \ 00000414 REQUIRE `?` \ change_back_status: \ 00000414 DS8 4 \ 00000418 REQUIRE `?` \ double_on: \ 00000418 DS8 4 \ 0000041C REQUIRE `?` \ FIRST_START: \ 0000041C DS8 4 \ 00000420 REQUIRE `?` \ ExtSndModeIndivd: \ 00000420 DS8 4 \ 00000424 REQUIRE `?` \ ExtSndMode_flag: \ 00000424 DS8 4 \ 00000428 REQUIRE `?` \ templates_chars: \ 00000428 DS8 4 \ 0000042C REQUIRE `?` \ templates_lines: \ 0000042C DS8 4 \ 00000430 REQUIRE `?` \ RXstate: \ 00000430 DS8 4 \ 00000434 REQUIRE `?` \ connect_state: \ 00000434 DS8 4 \ 00000438 REQUIRE `?` \ sock: \ 00000438 DS8 4 \ 0000043C REQUIRE `?` \ TOTALRECEIVED: \ 0000043C DS8 4 \ 00000440 REQUIRE `?` \ TOTALSENDED: \ 00000440 DS8 4 \ 00000444 REQUIRE `?` \ ALLTOTALRECEIVED: \ 00000444 DS8 4 \ 00000448 REQUIRE `?` \ ALLTOTALSENDED: \ 00000448 DS8 4 \ 0000044C REQUIRE `?` \ sendq_l: \ 0000044C DS8 4 \ 00000450 REQUIRE `?` \ sendq_p: \ 00000450 DS8 4 \ 00000454 REQUIRE `?` \ is_gprs_online: \ 00000454 DS8 4 \ 00000458 REQUIRE `?` \ GROUP_CACHE: \ 00000458 DS8 4 \ 0000045C REQUIRE `?` \ edchat_id: \ 0000045C DS8 4 \ 00000460 REQUIRE `?` \ tenseconds_to_ping: \ 00000460 DS8 4 \ 00000464 REQUIRE `?` \ DNR_ID: \ 00000464 DS8 4 \ 00000468 REQUIRE `?` \ DNR_TRIES: \ 00000468 DS8 4 \ 0000046C REQUIRE `?` \ host_counter: \ 0000046C DS8 4 \ 00000470 REQUIRE `?` \ NEW_MSG: \ 00000470 DS8 4 \ 00000474 REQUIRE `?` \ time_to_stop_t9: \ 00000474 DS8 4 \ 00000478 REQUIRE `?` \ req_info_contact: \ 00000478 DS8 4 \ 0000047C REQUIRE `?` \ HeaderY: \ 0000047C DS8 4 \ 00000480 REQUIRE `?` \ 00000480 DS8 4 \ 00000484 REQUIRE `?` \ 00000484 DS8 4 \ 00000488 REQUIRE `?` \ shot_soft: \ 00000488 DS8 4 \ 0000048C REQUIRE `?` \ shot_header: \ 0000048C DS8 4 \ 00000490 REQUIRE `?` \ myack: \ 00000490 DS8 4 \ 00000494 REQUIRE `?` \ scr_w: \ 00000494 DS8 4 \ 00000498 REQUIRE `?` \ scr_h: \ 00000498 DS8 4 \ 0000049C REQUIRE `?` \ old_ed_redraw: \ 0000049C DS8 4 \ 000004A0 REQUIRE `?` \ 000004A0 DS8 64 \ 000004E0 REQUIRE `?` \ uptime: \ 000004E0 DS8 8 \ 000004E8 REQUIRE `?` \ elf_path: \ 000004E8 DS8 256 \ 000005E8 REQUIRE `?` \ prmsg: \ 000005E8 DS8 256 \ 000006E8 REQUIRE `?` \ ContactT9Key: \ 000006E8 DS8 32 \ 00000708 REQUIRE `?` \ last_msg_buffer: \ 00000708 DS8 4096 \ 00001708 REQUIRE `?` \ on_off_buf: \ 00001708 DS8 128 \ 00001788 REQUIRE `?` \ logmsg: \ 00001788 DS8 256 \ 00001888 REQUIRE `?` \ tmr_illumination: \ 00001888 DS8 16 \ 00001898 REQUIRE `?` \ away_msg: \ 00001898 DS8 256 \ 00001998 REQUIRE `?` \ away_msg_time: \ 00001998 DS8 64 \ 000019D8 REQUIRE `?` \ away_msg_time_dace: \ 000019D8 DS8 16 \ 000019E8 REQUIRE `?` \ away_tmr: \ 000019E8 DS8 16 \ 000019F8 REQUIRE `?` \ remind_tmr: \ 000019F8 DS8 16 \ 00001A08 REQUIRE `?` \ tmr_vibra: \ 00001A08 DS8 16 \ 00001A18 REQUIRE `?` \ reconnect_tmr: \ 00001A18 DS8 16 \ 00001A28 REQUIRE `?` \ tmr_active: \ 00001A28 DS8 16 \ 00001A38 REQUIRE `?` \ 00001A38 DS8 32 \ 00001A58 REQUIRE `?` \ 00001A58 DS8 32 \ 00001A78 REQUIRE `?` \ clmenu_sk_r: \ 00001A78 DS8 16 \ 00001A88 REQUIRE `?` \ 00001A88 DS8 32 \ 00001AA8 REQUIRE `?` \ 00001AA8 DS8 32 \ 00001AC8 REQUIRE `?` \ hostname: \ 00001AC8 DS8 128 \ 00001B48 REQUIRE `?` \ send_tmr: \ 00001B48 DS8 16 \ 00001B58 REQUIRE `?` \ clrBlack: \ 00001B58 DS8 4 \ 00001B5C REQUIRE `?` \ clrWhite: \ 00001B5C DS8 4 \ 00001B60 REQUIRE `?` \ clrRed: \ 00001B60 DS8 4 \ 00001B64 REQUIRE `?` \ blue: \ 00001B64 DS8 8 \ 00001B6C REQUIRE `?` \ tmr_scroll: \ 00001B6C DS8 16 \ 00001B7C REQUIRE `?` \ online_tmr: \ 00001B7C DS8 16 \ 00001B8C REQUIRE `?` \ OneSecTmr: \ 00001B8C DS8 16 \ 00001B9C REQUIRE `?` \ MAINCSM: \ 00001B9C DS8 44 \ 00001BC8 REQUIRE `?` 7309 7310 7311 char ecm_contactname[64]; \ ecm_contactname: \ 00001BC8 DS8 64 \ 00001C08 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ Is_SLI_On: \ 00000000 DS8 4 \ 00000004 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ SoftShot: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ HeaderShot: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` 7312 \ In segment DATA_C, align 4, align-sorted 7313 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, 32767 \ ....FF7F0000 \ 00000014 C1EEEBFCF8E5 DC8 "\301\356\353\374\370\345 \350\361\362\356\360\350\350" \ 20E8F1F2EEF0 \ E8E800 \ 00000023 00 DC8 0 \ 00000024 080000000000 DC32 8, 0H, ecmenu_ghook, 0H, menusoftkeys, menu_skt, 0, 0H \ 0000........ \ 00000000.... \ ............ \ 000000000000 \ 0000 \ 00000044 ............ DC32 ecmenu_ITEMS, ecmenu_HNDLS, 10 \ ....0A000000 7314 7315 static const MENU_DESC ecmenu_STRUCT= 7316 { 7317 8,/*ec_menu_onkey*/NULL,ecmenu_ghook,NULL, 7318 menusoftkeys, 7319 &menu_skt, 7320 0, 7321 NULL, 7322 ecmenu_ITEMS, 7323 ecmenu_HNDLS, 7324 EC_MNU_MAX 7325 }; 7326 7327 7328 \ In segment CODE, align 4, keep-with-next 7329 void ec_menu(EDCHAT_STRUCT *ed_struct) 7330 { \ ec_menu: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 \ 00000008 0040A0E1 MOV R4,R0 7331 CLIST *t; 7332 int to_remove[EC_MNU_MAX+1]; 7333 int remove=0; 7334 if ((t=ed_struct->ed_contact)) \ 0000000C 006094E5 LDR R6,[R4, #+0] \ 00000010 000056E3 CMP R6,#+0 \ 00000014 6600000A BEQ ??ec_menu_0 7335 { 7336 if(strlen(t->name)) \ 00000018 ........ LDR R5,??DataTable292 ;; popup \ 0000001C C800A0E3 MOV R0,#+200 \ 00000020 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000024 057080E0 ADD R7,R0,R5 \ 00000028 140086E2 ADD R0,R6,#+20 \ 0000002C 1B0000EF SWI +27 \ 00000030 000050E3 CMP R0,#+0 \ 00000034 0400000A BEQ ??ec_menu_1 7337 { 7338 strncpy(ecm_contactname,t->name,63); \ 00000038 3F20A0E3 MOV R2,#+63 \ 0000003C 141086E2 ADD R1,R6,#+20 \ 00000040 0700A0E1 MOV R0,R7 \ 00000044 160100EF SWI +278 \ 00000048 030000EA B ??ec_menu_2 7339 } 7340 else 7341 { 7342 sprintf(ecm_contactname,"%u",t->uin); \ ??ec_menu_1: \ 0000004C 0C2096E5 LDR R2,[R6, #+12] \ 00000050 591F8FE2 ADR R1,??ec_menu_3 ;; "%u" \ 00000054 0700A0E1 MOV R0,R7 \ 00000058 160000EF SWI +22 7343 } 7344 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ec_menu_2: \ 0000005C 040094E5 LDR R0,[R4, #+4] \ 00000060 820100EF SWI +386 \ 00000064 083094E5 LDR R3,[R4, #+8] \ 00000068 0220A0E3 MOV R2,#+2 \ 0000006C 0010A0E3 MOV R1,#+0 \ 00000070 030050E1 CMP R0,R3 \ 00000074 0400001A BNE ??ec_menu_4 7345 { 7346 to_remove[++remove]=0; \ 00000078 04108DE5 STR R1,[SP, #+4] 7347 to_remove[++remove]=1; \ 0000007C 0260A0E3 MOV R6,#+2 \ 00000080 0130A0E3 MOV R3,#+1 \ 00000084 08308DE5 STR R3,[SP, #+8] \ 00000088 010000EA B ??ec_menu_5 7348 } 7349 else 7350 { 7351 // to_remove[++remove]=1; 7352 to_remove[++remove]=2; \ ??ec_menu_4: \ 0000008C 0160A0E3 MOV R6,#+1 \ 00000090 04208DE5 STR R2,[SP, #+4] 7353 } 7354 7355 if (ed_struct->ed_answer<=2) \ ??ec_menu_5: \ 00000094 080094E5 LDR R0,[R4, #+8] \ 00000098 030050E3 CMP R0,#+3 \ 0000009C 030000AA BGE ??ec_menu_6 7356 to_remove[++remove]=7; \ 000000A0 016086E2 ADD R6,R6,#+1 \ 000000A4 0D00A0E1 MOV R0,SP \ 000000A8 0730A0E3 MOV R3,#+7 \ 000000AC 063180E7 STR R3,[R0, +R6, LSL #+2] 7357 7358 if (!ed_struct->ed_contact || connect_state!=3) \ ??ec_menu_6: \ 000000B0 000094E5 LDR R0,[R4, #+0] \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 0200000A BEQ ??ec_menu_7 \ 000000BC 340495E5 LDR R0,[R5, #+1076] \ 000000C0 030050E3 CMP R0,#+3 \ 000000C4 1000000A BEQ ??ec_menu_8 7359 { 7360 to_remove[++remove]=2; \ ??ec_menu_7: \ 000000C8 010086E2 ADD R0,R6,#+1 \ 000000CC 0D30A0E1 MOV R3,SP \ 000000D0 002183E7 STR R2,[R3, +R0, LSL #+2] 7361 to_remove[++remove]=3; \ 000000D4 010080E2 ADD R0,R0,#+1 \ 000000D8 0D20A0E1 MOV R2,SP \ 000000DC 0330A0E3 MOV R3,#+3 \ 000000E0 003182E7 STR R3,[R2, +R0, LSL #+2] 7362 to_remove[++remove]=4; \ 000000E4 010080E2 ADD R0,R0,#+1 \ 000000E8 0430A0E3 MOV R3,#+4 \ 000000EC 003182E7 STR R3,[R2, +R0, LSL #+2] 7363 to_remove[++remove]=5; \ 000000F0 010080E2 ADD R0,R0,#+1 \ 000000F4 0530A0E3 MOV R3,#+5 \ 000000F8 003182E7 STR R3,[R2, +R0, LSL #+2] 7364 to_remove[++remove]=6; \ 000000FC 016080E2 ADD R6,R0,#+1 \ 00000100 0D00A0E1 MOV R0,SP \ 00000104 0620A0E3 MOV R2,#+6 \ 00000108 062180E7 STR R2,[R0, +R6, LSL #+2] 7365 } 7366 7367 patch_header(&ecmenu_HDR); \ ??ec_menu_8: \ 0000010C AC709FE5 LDR R7,??ec_menu_3+0x4 ;; ecmenu_HDR \ 00000110 001087E5 STR R1,[R7, #+0] \ 00000114 888100EF SWI +33160 \ 00000118 010040E2 SUB R0,R0,#+1 \ 0000011C B400C7E1 STRH R0,[R7, #+4] \ 00000120 8A8100EF SWI +33162 \ 00000124 010040E2 SUB R0,R0,#+1 \ 00000128 B600C7E1 STRH R0,[R7, #+6] 7368 to_remove[0]=remove; 7369 7370 //Инициализация ленгпака 7371 ecmenu_ITEMS[0].lgp_id_small=(int)lgpData[LGP_MnuQuote]; \ 0000012C ........ LDR R0,??DataTable293 ;; lgpData \ 00000130 00608DE5 STR R6,[SP, #+0] \ 00000134 A81090E5 LDR R1,[R0, #+168] 7372 ecmenu_ITEMS[1].lgp_id_small=(int)lgpData[LGP_MnuQuoteNotFocus]; 7373 ecmenu_ITEMS[2].lgp_id_small=(int)lgpData[LGP_MnuAddSml]; 7374 ecmenu_ITEMS[3].lgp_id_small=(int)lgpData[LGP_MnuShInfo]; 7375 ecmenu_ITEMS[4].lgp_id_small=(int)lgpData[LGP_MnuAddRen]; 7376 ecmenu_ITEMS[5].lgp_id_small=(int)lgpData[LGP_MnuSAuthReq]; 7377 ecmenu_ITEMS[6].lgp_id_small=(int)lgpData[LGP_MnuSAuthGrt]; 7378 ecmenu_ITEMS[7].lgp_id_small=(int)lgpData[LGP_MnuOpenLog]; 7379 ecmenu_ITEMS[8].lgp_id_small=(int)"Больше истории"; 7380 ecmenu_ITEMS[9].lgp_id_small=(int)lgpData[LGP_MnuClearCht]; 7381 7382 CreateMenu(0,0,&ecmenu_STRUCT,&ecmenu_HDR,0,EC_MNU_MAX,ed_struct,to_remove); \ 00000138 0730A0E1 MOV R3,R7 \ 0000013C 241185E5 STR R1,[R5, #+292] \ 00000140 AC1090E5 LDR R1,[R0, #+172] \ 00000144 242087E2 ADD R2,R7,#+36 \ 00000148 401185E5 STR R1,[R5, #+320] \ 0000014C B01090E5 LDR R1,[R0, #+176] \ 00000150 5C1185E5 STR R1,[R5, #+348] \ 00000154 B41090E5 LDR R1,[R0, #+180] \ 00000158 781185E5 STR R1,[R5, #+376] \ 0000015C B81090E5 LDR R1,[R0, #+184] \ 00000160 941185E5 STR R1,[R5, #+404] \ 00000164 BC1090E5 LDR R1,[R0, #+188] \ 00000168 B01185E5 STR R1,[R5, #+432] \ 0000016C C01090E5 LDR R1,[R0, #+192] \ 00000170 CC1185E5 STR R1,[R5, #+460] \ 00000174 C41090E5 LDR R1,[R0, #+196] \ 00000178 C80090E5 LDR R0,[R0, #+200] \ 0000017C E81185E5 STR R1,[R5, #+488] \ 00000180 141087E2 ADD R1,R7,#+20 \ 00000184 041285E5 STR R1,[R5, #+516] \ 00000188 200285E5 STR R0,[R5, #+544] \ 0000018C 0D00A0E1 MOV R0,SP \ 00000190 01002DE9 PUSH {R0} \ 00000194 10002DE9 PUSH {R4} \ 00000198 0010A0E3 MOV R1,#+0 \ 0000019C 0A00A0E3 MOV R0,#+10 \ 000001A0 01002DE9 PUSH {R0} \ 000001A4 0000A0E3 MOV R0,#+0 \ 000001A8 01002DE9 PUSH {R0} \ 000001AC 520100EF SWI +338 \ 000001B0 10D08DE2 ADD SP,SP,#+16 7383 } 7384 } \ ??ec_menu_0: \ 000001B4 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000001B8 F080BDE8 POP {R4-R7,PC} ;; return \ ??ec_menu_3: \ 000001BC 25750000 DC8 "%u",+0 \ 000001C0 ........ DC32 ecmenu_HDR 7385 7386 \ In segment CODE, align 4, keep-with-next 7387 void AskNickAndAddContact(EDCHAT_STRUCT *ed_struct) 7388 { 7389 CreateAddContactGrpDialog(ed_struct->ed_contact); \ AskNickAndAddContact: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 ........ _BF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA ;; tailcall 7390 } 7391 \ In segment CODE, align 4, keep-with-next 7392 static void AddSmile(GUI *data) 7393 { \ AddSmile: \ 00000000 00402DE9 PUSH {LR} 7394 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 7395 CreateSmileSelectGUI(ed_struct); \ 00000008 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 7396 GeneralFuncF1(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0100EF SWI +315 7397 } \ 00000014 0080BDE8 POP {PC} ;; return \ In segment CODE, align 4, keep-with-next \ ??DataTable7: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable9: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable13: \ 00000000 ........ DC32 Remind \ In segment CODE, align 4, keep-with-next \ ??DataTable15: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable16: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable18: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable19: \ 00000000 ........ DC32 successed_config_filename \ In segment CODE, align 4, keep-with-next \ ??DataTable20: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable21: \ 00000000 ........ DC32 DEVELOP_IF \ In segment CODE, align 4, keep-with-next \ ??DataTable22: \ 00000000 ........ DC32 popup \ In segment CODE, align 4, keep-with-next \ ??DataTable23: \ 00000000 ........ DC32 longAct_0 \ In segment CODE, align 4, keep-with-next \ ??DataTable24: \ 00000000 ........ DC32 longAct_1 \ In segment CODE, align 4, keep-with-next \ ??DataTable25: \ 00000000 ........ DC32 longAct_2 \ In segment CODE, align 4, keep-with-next \ ??DataTable26: \ 00000000 ........ DC32 longAct_3 \ In segment CODE, align 4, keep-with-next \ ??DataTable27: \ 00000000 ........ DC32 longAct_4 \ In segment CODE, align 4, keep-with-next \ ??DataTable28: \ 00000000 ........ DC32 longAct_5 \ In segment CODE, align 4, keep-with-next \ ??DataTable29: \ 00000000 ........ DC32 longAct_6 \ In segment CODE, align 4, keep-with-next \ ??DataTable30: \ 00000000 ........ DC32 longAct_7 \ In segment CODE, align 4, keep-with-next \ ??DataTable31: \ 00000000 ........ DC32 longAct_8 \ In segment CODE, align 4, keep-with-next \ ??DataTable32: \ 00000000 ........ DC32 longAct_9 \ In segment CODE, align 4, keep-with-next \ ??DataTable33: \ 00000000 ........ DC32 longAct_10 \ In segment CODE, align 4, keep-with-next \ ??DataTable34: \ 00000000 ........ DC32 longAct_11 \ In segment CODE, align 4, keep-with-next \ ??DataTable38: \ 00000000 ........ DC32 isPopupOff \ In segment CODE, align 4, keep-with-next \ ??DataTable41: \ 00000000 ........ DC32 popup \ In segment CODE, align 4, keep-with-next \ ??DataTable42: \ 00000000 ........ DC32 PopupFont \ In segment CODE, align 4, keep-with-next \ ??DataTable43: \ 00000000 ........ DC32 PopupBGCl \ In segment CODE, align 4, keep-with-next \ ??DataTable47: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable48: \ 00000000 ........ DC32 def_setting \ In segment CODE, align 4, keep-with-next \ ??DataTable54: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable59: \ 00000000 ........ DC32 lgpData \ In segment CODE, align 4, keep-with-next \ ??DataTable60: \ 00000000 ........ DC32 popup + 1768 \ In segment CODE, align 4, keep-with-next \ ??DataTable62: \ 00000000 ........ DC32 popup \ In segment CODE, align 4, keep-with-next \ ??DataTable63: \ 00000000 ........ DC32 popup + 768 \ In segment CODE, align 4, keep-with-next \ ??DataTable65: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable66: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable70: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable72: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable73: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable74: \ 00000000 ........ DC32 popup \ In segment CODE, align 4, keep-with-next \ ??DataTable75: \ 00000000 ........ DC32 sndMsg \ In segment CODE, align 4, keep-with-next \ ??DataTable76: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable80: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable82: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable83: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable84: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable92: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable93: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable95: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable96: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable97: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable98: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable99: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable100: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable101: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable102: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable103: \ 00000000 ........ DC32 popup + 1116 \ In segment CODE, align 4, keep-with-next \ ??DataTable108: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable110: \ 00000000 ........ DC32 lgpData \ In segment CODE, align 4, keep-with-next \ ??DataTable111: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable112: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable113: \ 00000000 ........ DC32 popup \ In segment CODE, align 4, keep-with-next \ ??DataTable115: \ 00000000 ........ DC32 percent_t \ In segment CODE, align 4, keep-with-next \ ??DataTable116: \ 00000000 89888888 DC32 0xffffffff88888889 \ In segment CODE, align 4, keep-with-next \ ??DataTable117: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable118: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable120: \ 00000000 ........ DC32 popup \ In segment CODE, align 4, keep-with-next \ ??DataTable121: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable122: \ 00000000 ........ DC32 sndMsg \ In segment CODE, align 4, keep-with-next \ ??DataTable123: \ 00000000 ........ DC32 isPopupOff \ In segment CODE, align 4, keep-with-next \ ??DataTable124: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable125: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable126: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable127: \ 00000000 ........ DC32 DEVELOP_IF \ In segment CODE, align 4, keep-with-next \ ??DataTable129: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable130: \ 00000000 ........ DC32 process_active_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable137: \ 00000000 ........ DC32 _t \ In segment CODE, align 4, keep-with-next \ ??DataTable138: \ 00000000 ........ DC32 popup + 1768 \ In segment CODE, align 4, keep-with-next \ ??DataTable139: \ 00000000 ........ DC32 longAct_0 \ In segment CODE, align 4, keep-with-next \ ??DataTable140: \ 00000000 ........ DC32 longAct_1 \ In segment CODE, align 4, keep-with-next \ ??DataTable141: \ 00000000 ........ DC32 longAct_2 \ In segment CODE, align 4, keep-with-next \ ??DataTable142: \ 00000000 ........ DC32 longAct_3 \ In segment CODE, align 4, keep-with-next \ ??DataTable143: \ 00000000 ........ DC32 longAct_4 \ In segment CODE, align 4, keep-with-next \ ??DataTable144: \ 00000000 ........ DC32 longAct_5 \ In segment CODE, align 4, keep-with-next \ ??DataTable145: \ 00000000 ........ DC32 longAct_6 \ In segment CODE, align 4, keep-with-next \ ??DataTable146: \ 00000000 ........ DC32 longAct_7 \ In segment CODE, align 4, keep-with-next \ ??DataTable147: \ 00000000 ........ DC32 longAct_8 \ In segment CODE, align 4, keep-with-next \ ??DataTable148: \ 00000000 ........ DC32 longAct_9 \ In segment CODE, align 4, keep-with-next \ ??DataTable149: \ 00000000 ........ DC32 longAct_10 \ In segment CODE, align 4, keep-with-next \ ??DataTable150: \ 00000000 ........ DC32 longAct_11 \ In segment CODE, align 4, keep-with-next \ ??DataTable154: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable155: \ 00000000 ........ DC32 popup \ In segment CODE, align 4, keep-with-next \ ??DataTable156: \ 00000000 ........ DC32 HeadFont \ In segment CODE, align 4, keep-with-next \ ??DataTable157: \ 00000000 ........ DC32 percent_t \ In segment CODE, align 4, keep-with-next \ ??DataTable159: \ 00000000 ........ DC32 scroll_timer_proc \ In segment CODE, align 4, keep-with-next \ ??DataTable161: \ 00000000 ........ DC32 ClFont \ In segment CODE, align 4, keep-with-next \ ??DataTable167: \ 00000000 ........ DC32 SOFT_MODE \ In segment CODE, align 4, keep-with-next \ ??DataTable168: \ 00000000 ........ DC32 HeadFont \ In segment CODE, align 4, keep-with-next \ ??DataTable169: \ 00000000 ........ DC32 ClFont \ In segment CODE, align 4, keep-with-next \ ??DataTable171: \ 00000000 ........ DC32 GroupClr \ In segment CODE, align 4, keep-with-next \ ??DataTable172: \ 00000000 ........ DC32 ClBoldFont \ In segment CODE, align 4, keep-with-next \ ??DataTable174: \ 00000000 ........ DC32 VIEW_MODE \ In segment CODE, align 4, keep-with-next \ ??DataTable175: \ 00000000 ........ DC32 popup \ In segment CODE, align 4, keep-with-next \ ??DataTable179: \ 00000000 ........ DC32 popup + 844 \ In segment CODE, align 4, keep-with-next \ ??DataTable182: \ 00000000 ........ DC32 SOFT_MODE \ In segment CODE, align 4, keep-with-next \ ??DataTable185: \ 00000000 ........ DC32 popup + 768 \ In segment CODE, align 4, keep-with-next \ ??DataTable187: \ 00000000 ........ DC32 VIEW_MODE \ In segment CODE, align 4, keep-with-next \ ??DataTable188: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable190: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable191: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable194: \ 00000000 89888888 DC32 0xffffffff88888889 \ In segment CODE, align 4, keep-with-next \ ??DataTable199: \ 00000000 ........ DC32 lgpData \ In segment CODE, align 4, keep-with-next \ ??DataTable200: \ 00000000 ........ DC32 popup \ In segment CODE, align 4, keep-with-next \ ??DataTable204: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable209: \ 00000000 ........ DC32 OneSecondTimer \ In segment CODE, align 4, keep-with-next \ ??DataTable210: \ 00000000 ........ DC32 process_active_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable212: \ 00000000 ........ DC32 popup \ In segment CODE, align 4, keep-with-next \ ??DataTable220: \ 00000000 ........ DC32 DEVELOP_IF \ In segment CODE, align 4, keep-with-next \ ??DataTable221: \ 00000000 ........ DC32 popup \ In segment CODE, align 4, keep-with-next \ ??DataTable222: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable226: \ 00000000 ........ DC32 ClFont \ In segment CODE, align 4, keep-with-next \ ??DataTable227: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable229: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable230: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable233: \ 00000000 ........ DC32 LoadLocalCL \ In segment CODE, align 4, keep-with-next \ ??DataTable234: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable235: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable236: \ 00000000 ........ DC32 ClearSendQ \ In segment CODE, align 4, keep-with-next \ ??DataTable237: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable240: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable241: \ 00000000 ........ DC32 successed_config_filename \ In segment CODE, align 4, keep-with-next \ ??DataTable242: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable244: \ 00000000 ........ DC32 popup + 768 \ In segment CODE, align 4, keep-with-next \ ??DataTable245: \ 00000000 ........ DC32 popup \ In segment CODE, align 4, keep-with-next \ ??DataTable247: \ 00000000 ........ DC32 lgpData \ In segment CODE, align 4, keep-with-next \ ??DataTable250: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable254: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable255: \ 00000000 ........ DC32 IsBufferMenu \ In segment CODE, align 4, keep-with-next \ ??DataTable259: \ 00000000 ........ DC32 popup \ In segment CODE, align 4, keep-with-next \ ??DataTable260: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable261: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable262: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable263: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable264: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable265: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable266: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable267: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable268: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable269: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable270: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable271: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable272: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable274: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable277: \ 00000000 ........ DC32 Focus_Quote \ In segment CODE, align 4, keep-with-next \ ??DataTable286: \ 00000000 ........ DC32 popup + 1076 \ In segment CODE, align 4, keep-with-next \ ??DataTable287: \ 00000000 ........ DC32 lgpData \ In segment CODE, align 4, keep-with-next \ ??DataTable288: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable289: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable290: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable291: \ 00000000 ........ DC32 popup + 1116 \ In segment CODE, align 4, keep-with-next \ ??DataTable292: \ 00000000 ........ DC32 popup \ In segment CODE, align 4, keep-with-next \ ??DataTable293: \ 00000000 ........ DC32 lgpData \ In segment CODE, align 4, keep-with-next \ ??DataTable294: \ 00000000 ........ DC32 LoadLocalCL \ 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 \ 000000000000 \ 00000000 \ 000000E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000100 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000110 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000120 000000000000 DC32 0H, 0, 32767, 0, 0H, 3, 1400, 0H, 0, 32767, 0, 0H, 3, 1400, 0H, 0 \ 0000FF7F0000 \ 000000000000 \ 000003000000 \ 780500000000 \ 000000000000 \ FF7F00000000 \ 000000000000 \ 030000007805 \ 000000000000 \ 00000000 \ 00000160 FF7F00000000 DC32 32767, 0, 0H, 3, 1400, 0H, 0, 32767, 0, 0H, 3, 1400, 0H, 0, 32767 \ 000000000000 \ 030000007805 \ 000000000000 \ 00000000FF7F \ 000000000000 \ 000000000300 \ 000078050000 \ 000000000000 \ 0000FF7F0000 \ 0000019C 000000000000 DC32 0, 0H, 3, 1400, 0H, 0, 32767, 0, 0H, 3, 1400, 0H, 0, 32767, 0, 0H \ 000003000000 \ 780500000000 \ 000000000000 \ FF7F00000000 \ 000000000000 \ 030000007805 \ 000000000000 \ 00000000FF7F \ 000000000000 \ 00000000 \ 000001DC 030000007805 DC32 3, 1400, 0H, 0, 32767, 0, 0H, 3, 1400, 0H, 0, 32767, 0, 0H, 3 \ 000000000000 \ 00000000FF7F \ 000000000000 \ 000000000300 \ 000078050000 \ 000000000000 \ 0000FF7F0000 \ 000000000000 \ 000003000000 \ 00000218 780500000000 DC32 1400, 0H, 0, 32767, 0, 0H, 3, 1400 \ 000000000000 \ FF7F00000000 \ 000000000000 \ 030000007805 \ 0000 \ `?`: \ 00000238 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000248 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000258 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000268 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000278 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000288 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000298 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000002B8 18000000 DC16 24, 0 \ 000002BC 00000000 DC32 0 \ 000002C0 01000000 DC16 1, 0 \ 000002C4 00000000 DC32 0 \ 000002C8 3D000000 DC16 61, 0 \ 000002CC FBC0FF7F DC32 2147467515 \ `?`: \ 000002D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000002DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000002E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 000002F0 FF0F0000 DC16 4095, 0 \ 000002F4 00000000 DC32 0 \ `?`: \ 000002F8 F00F0000 DC16 4080, 0 \ 000002FC 00000000 DC32 0 \ `?`: \ 00000300 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000304 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000308 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000030C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000310 00000000 DC32 0 \ `?`: \ 00000314 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000318 00000000 DC32 0 \ `?`: \ 0000031C 00000000 DC32 0 \ `?`: \ 00000320 00000000 DC32 0 \ `?`: \ 00000324 00000000 DC32 0 \ `?`: \ 00000328 00000000 DC32 0 \ `?`: \ 0000032C 01000000 DC32 1 \ `?`: \ 00000330 01000000 DC32 1 \ `?`: \ 00000334 00000000 DC32 0 \ `?`: \ 00000338 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000033C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000340 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000344 00000000 DC32 0 \ `?`: \ 00000348 01000000 DC32 1 \ `?`: \ 0000034C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000350 00000000 DC32 0 \ `?`: \ 00000354 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000358 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000035C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000360 00000000 DC32 0 \ `?`: \ 00000364 00000000 DC32 0 \ `?`: \ 00000368 00000000 DC32 0 \ `?`: \ 0000036C 00000000 DC32 0 \ `?`: \ 00000370 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000374 ............ DC32 `?`, `?` \ .... \ 0000037C ............ DC32 `?`, `?` \ .... \ 00000384 ............ DC32 `?`, `?` \ .... \ 0000038C ............ DC32 `?`, `?` \ .... \ 00000394 ............ DC32 `?`, `?` \ .... \ 0000039C ............ DC32 `?`, `?` \ .... \ 000003A4 ............ DC32 `?`, `?` \ .... \ 000003AC ............ DC32 `?`, `?` \ .... \ 000003B4 ............ DC32 `?`, `?` \ .... \ 000003BC ............ DC32 `?`, `?` \ .... \ 000003C4 ............ DC32 `?`, `?` \ .... \ 000003CC ............ DC32 `?`, `?` \ .... \ 000003D4 ............ DC32 `?`, `?` \ .... \ 000003DC ............ DC32 `?`, `?` \ .... \ 000003E4 ............ DC32 `?`, `?` \ .... \ 000003EC ........ DC32 `?` \ `?`: \ 000003F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000400 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000404 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000408 00000000 DC32 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 00000000 DC32 0 \ `?`: \ 00000420 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000424 00000000 DC32 0 \ `?`: \ 00000428 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000042C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000430 F6FFFFFF DC32 -10 \ `?`: \ 00000434 00000000 DC32 0 \ `?`: \ 00000438 FFFFFFFF DC32 -1 \ `?`: \ 0000043C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000440 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000444 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000448 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000044C 00000000 DC32 0 \ `?`: \ 00000450 00000000 DC32 0H \ `?`: \ 00000454 01000000 DC32 1 \ `?`: \ 00000458 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000045C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000460 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000464 00000000 DC32 0 \ `?`: \ 00000468 03000000 DC32 3 \ `?`: \ 0000046C 00000000 DC32 0 \ `?`: \ 00000470 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000474 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000478 00000000 DC32 0 \ `?`: \ 0000047C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000480 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000484 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000488 00000000 DC32 0 \ `?`: \ 0000048C 00000000 DC32 0 \ `?`: \ 00000490 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000494 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000498 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000049C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000004E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 000004E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000508 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000518 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000528 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000538 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000548 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000558 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000568 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000578 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000588 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000598 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000005E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000608 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000618 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000628 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000638 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000648 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000658 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000668 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000678 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000688 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000698 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000006E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000708 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000718 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000728 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000738 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000748 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000758 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000768 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000778 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000788 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000798 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000808 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000818 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000828 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000838 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000848 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000858 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000868 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000878 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000888 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000898 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000908 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000918 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000928 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000938 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000948 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000958 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000968 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000978 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000988 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000998 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ED8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001008 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001018 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001028 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001038 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001048 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001058 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001068 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001078 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001088 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001098 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001108 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001118 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001128 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001138 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001148 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001158 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001168 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001178 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001188 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001198 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001208 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001218 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001228 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001238 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001248 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001258 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001268 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001278 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001288 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001298 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001308 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001318 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001328 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001338 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001348 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001358 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001368 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001378 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001388 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001398 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001408 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001418 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001428 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001438 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001448 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001458 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001468 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001478 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001488 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001498 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001508 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001518 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001528 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001538 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001548 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001558 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001568 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001578 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001588 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001598 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001608 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001618 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001628 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001638 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001648 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001658 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001668 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001678 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001688 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001698 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001708 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001718 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001728 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001738 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001748 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001758 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001768 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001778 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001788 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001798 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001808 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001818 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001828 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001838 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001848 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001858 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001868 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001878 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001888 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001898 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001908 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001918 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001928 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001938 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001948 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001958 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001968 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001978 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001988 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001998 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000019D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000019E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000019F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A38 00 DC8 "" \ 00001A39 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A49 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000 \ `?`: \ 00001A58 00 DC8 "" \ 00001A59 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A69 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000 \ `?`: \ 00001A78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A88 00 DC8 "" \ 00001A89 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A99 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000 \ `?`: \ 00001AA8 00 DC8 "" \ 00001AA9 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AB9 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000 \ `?`: \ 00001AC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001B48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001B58 00000064 DC8 0, 0, 0, 100 \ `?`: \ 00001B5C FFFFFF64 DC8 255, 255, 255, 100 \ `?`: \ 00001B60 FF000064 DC8 255, 0, 0, 100 \ `?`: \ 00001B64 0000FF6400 DC8 0, 0, 0FFH, 64H, 0 \ 00001B69 000000 DC8 0, 0, 0 \ `?`: \ 00001B6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001B7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001B8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001B9C ............ DC32 maincsm_onmessage, maincsm_oncreate, maincsm_onclose, 44, 1 \ ............ \ 2C0000000100 \ 0000 \ 00001BB0 ............ DC32 minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ ....CCCCAA55 \ 55AA33330000 \ 0000 \ 00001BC4 8B00 DC16 139 \ 00001BC6 0000 DC8 0, 0 \ `?`: \ 00001BC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 01000000 DC32 1 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 0000 DC8 0, 0 \ 00000002 0800 DC16 8 \ 00000004 ........ DC32 `?` \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 0000 DC8 0, 0 \ 00000002 0800 DC16 8 \ 00000004 ........ DC32 `?` \ 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 636865636B2E DC8 "check.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 756E63686563 DC8 "uncheck.png" \ 6B2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 62672E706E67 DC8 "bg.png" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 1, align-sorted \ `?`: \ 00000000 00 DC8 "" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 253032643A25 DC8 "%02d:%02d" \ 30326400 \ 0000000A 0000 DC8 0, 0 \ 0000000C CEF2F1F3F2F1 DC8 "\316\362\361\363\362\361\362\342\363\376 \357\360\350\354\345\360\355\356 \361 %02d:%02d" \ F2E2F3FE20EF \ F0E8ECE5F0ED \ EE20F1202530 \ 32643A253032 \ 6400 \ 0000002C CDE5E4EEF1F2 DC8 "\315\345\344\356\361\362\363\357\345\355 \357\360\350\354\345\360\355\356 \361 %02d:%02d" \ F3EFE5ED20EF \ F0E8ECE5F0ED \ EE20F1202530 \ 32643A253032 \ 6400 \ 0000004C 513A20256420 DC8 "Q: %d b" \ 6200 \ 00000054 CEF7E8F1F2E8 DC8 "\316\367\350\361\362\350\362\374 \3229" \ F2FC20D23900 \ 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 \ 00000000 77617600 DC8 "wav" \ In segment DATA_C, align 4, align-sorted \ 00000000 616D7200 DC8 "amr" \ 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 57616974696E DC8 "Waiting for GPRS up..." \ 6720666F7220 \ 475052532075 \ 702E2E2E00 \ 00000017 00 DC8 0 \ 00000018 25733A256400 DC8 "%s:%d" \ 0000001E 0000 DC8 0, 0 \ 00000020 436F6E6E6563 DC8 "Connect by IP!" \ 742062792049 \ 502100 \ 0000002F 00 DC8 0 \ 00000030 53656E642044 DC8 "Send DNR..." \ 4E522E2E2E00 \ 0000003C 444E52204552 DC8 "DNR ERROR %d!" \ 524F52202564 \ 2100 \ 0000004A 0000 DC8 0, 0 \ 0000004C 444E52204F6B DC8 "DNR Ok, connecting..." \ 2C20636F6E6E \ 656374696E67 \ 2E2E2E00 \ 00000062 0000 DC8 0, 0 \ 00000064 25733A25640A DC8 "%s:%d\012(IP: %d.%d.%d.%d)" \ 2849503A2025 \ 642E25642E25 \ 642E25642900 \ In segment DATA_C, align 4, align-sorted \ 00000000 6D703300 DC8 "mp3" \ In segment DATA_C, align 4, align-sorted \ `?_1`: \ 00000000 00 DC8 "" \ 00000001 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 0000000000 \ 0000000C 5C7265762E74 DC8 "\\rev.txt" \ 787400 \ 00000015 000000 DC8 0, 0, 0 \ 00000018 5369655F2573 DC8 "Sie_%s" \ 00 \ 0000001F 00 DC8 0 \ 00000020 5369655F3336 DC8 "Sie_3689" \ 383900 \ 00000029 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5369655F3336 DC8 "Sie_3680" \ 383000 \ 00000009 000000 DC8 0, 0, 0 \ 0000000C 73656E642072 DC8 "send res %d" \ 657320256400 \ 00000018 53656E642064 DC8 "Send delayed..." \ 656C61796564 \ 2E2E2E00 \ 00000028 53656E642065 DC8 "Send error!" \ 72726F722100 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 426164207061 DC8 "Bad packet" \ 636B657400 \ 0000000B 00 DC8 0 \ 0000000C 545F4C4F4749 DC8 "T_LOGIN %s" \ 4E20257300 \ 00000017 00 DC8 0 \ 00000018 545F58544558 DC8 "T_XTEXT_ACK %d %s" \ 545F41434B20 \ 256420257300 \ 0000002A 0000 DC8 0, 0 \ 0000002C 545F47524F55 DC8 "T_GROUPID %d %s" \ 504944202564 \ 20257300 \ 0000003C 545F47524F55 DC8 "T_GROUPFOLLOW %d %s" \ 50464F4C4C4F \ 572025642025 \ 7300 \ 00000050 545F434C454E DC8 "T_CLENTRY %d %s" \ 545259202564 \ 20257300 \ 00000060 5069636B4F46 DC8 "PickOFF xD %d %s" \ 462078442025 \ 6420257300 \ 00000071 000000 DC8 0, 0, 0 \ 00000074 534325643A20 DC8 "SC%d: %04X" \ 2530345800 \ 0000007F 00 DC8 0 \ 00000080 4552523A2025 DC8 "ERR: %s" \ 7300 \ 00000088 CDEEECE5F0EE DC8 "\315\356\354\345\360\356\354 \347\340\370\353\350 \361 \344\360\363\343\356\343\356 \352\353\350\345\355\362\340" \ EC20E7E0F8EB \ E820F120E4F0 \ F3E3EEE3EE20 \ EAEBE8E5EDF2 \ E000 \ 000000A8 4572726F7220 DC8 "Error code 1" \ 636F64652031 \ 00 \ 000000B5 000000 DC8 0, 0, 0 \ 000000B8 4D534725643A DC8 "MSG%d: %s" \ 20257300 \ 000000C2 0000 DC8 0, 0 \ 000000C4 6D73675C2575 DC8 "msg\\%u" \ 00 \ 000000CB 00 DC8 0 \ 000000CC 545F434C4945 DC8 "T_CLIENT_ACK %d %s" \ 4E545F41434B \ 202564202573 \ 00 \ 000000DF 00 DC8 0 \ 000000E0 50696E672025 DC8 "Ping %d-%d seconds!" \ 642D25642073 \ 65636F6E6473 \ 2100 \ 000000F4 545F4C415354 DC8 "T_LASTPRIVACY %d %s" \ 505249564143 \ 592025642025 \ 7300 \ In segment DATA_C, align 4, align-sorted \ 00000000 31313000 DC8 "110" \ In segment DATA_C, align 4, align-sorted \ `?_1`: \ 00000000 253032643A25 DC8 "%02d:%02d:%02d %02d.%02d.%02d %s:\015\012" \ 3032643A2530 \ 326420253032 \ 642E25303264 \ 2E2530326420 \ 25733A0D0A00 \ 00000024 5B25645D2530 DC8 "[%d]%02d:%02d:%02d %02d.%02d %s:" \ 32643A253032 \ 643A25303264 \ 20253032642E \ 253032642025 \ 733A00 \ 00000045 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 257500 DC8 "%u" \ 00000003 00 DC8 0 \ 00000004 25735C25752E DC8 "%s\\%u.clv" \ 636C7600 \ 0000000E 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ 00000000 F7E0F100 DC8 "\367\340\361" \ In segment DATA_C, align 1, align-sorted \ 00000000 3A0A00 DC8 ":\012" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 0000 DC8 0, 0 \ 00000002 0800 DC16 8 \ 00000004 ........ DC32 `?` \ 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 C2E8E1F0E000 DC8 "\302\350\341\360\340" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C8EDE2E8E700 DC8 "\310\355\342\350\347" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CAEEEDF4E8E3 DC8 "\312\356\355\364\350\343" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CFE8EDE300 DC8 "\317\350\355\343" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CDE020E3FD00 DC8 "\315\340 \343\375" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C3F0F3EFEFFB DC8 "\303\360\363\357\357\373" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?` \ 00000008 ........ DC32 `?` \ 0000000C ........ DC32 `?` \ 00000010 ........ DC32 `?` \ 00000020 ........ DC32 `?` \ 00000024 ........ DC32 `?` \ 0000002C ........ DC32 `?` \ 00000034 6572726F7200 DC8 "error" \ 0000003A 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 2F256400 DC8 "/%d" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 0000004000 DC8 0, 0, 0, 40H, 0 \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CCE5EDFE00 DC8 "\314\345\355\376" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6C756E63682E DC8 "lunch.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ 00000000 25730000 DC8 25H, 73H, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 446973636F6E DC8 "Disconnect!" \ 6E6563742100 \ 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 CEF7E8F1F2E8 DC8 "\316\367\350\361\362\350\362\374 \341\363\364\345\360" \ F2FC20E1F3F4 \ E5F000 \ 0000002B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616263646566 DC8 61H, 62H, 63H, 64H, 65H, 66H, 67H, 68H \ 6768 \ 00000008 696A6B6C6D6E DC8 69H, 6AH, 6BH, 6CH, 6DH, 6EH, 6FH, 70H \ 6F70 \ 00000010 717273747576 DC8 71H, 72H, 73H, 74H, 75H, 76H, 77H, 78H \ 7778 \ 00000018 797A41424344 DC8 79H, 7AH, 41H, 42H, 43H, 44H, 45H, 46H \ 4546 \ 00000020 4748494A4B4C DC8 47H, 48H, 49H, 4AH, 4BH, 4CH, 4DH, 4EH \ 4D4E \ 00000028 4F5051525354 DC8 4FH, 50H, 51H, 52H, 53H, 54H, 55H, 56H \ 5556 \ 00000030 5758595A3031 DC8 57H, 58H, 59H, 5AH, 30H, 31H, 32H, 33H \ 3233 \ 00000038 343536373839 DC8 34H, 35H, 36H, 37H, 38H, 39H, 24H, 2DH \ 242D \ 00000040 5F2E2B212A27 DC8 5FH, 2EH, 2BH, 21H, 2AH, 27H, 28H, 29H \ 2829 \ 00000048 2C253B3A4026 DC8 2CH, 25H, 3BH, 3AH, 40H, 26H, 3DH, 2FH \ 3D2F \ 00000050 3FE0E1E2E3E4 DC8 3FH, 0E0H, 0E1H, 0E2H, 0E3H, 0E4H, 0E5H, 0B8H \ E5B8 \ 00000058 E6E7E8E9EAEB DC8 0E6H, 0E7H, 0E8H, 0E9H, 0EAH, 0EBH, 0ECH, 0EDH \ ECED \ 00000060 EEEFF0F1F2F3 DC8 0EEH, 0EFH, 0F0H, 0F1H, 0F2H, 0F3H, 0F4H, 0F5H \ F4F5 \ 00000068 F6F7F8F9FAFB DC8 0F6H, 0F7H, 0F8H, 0F9H, 0FAH, 0FBH, 0FCH, 0FDH \ FCFD \ 00000070 FEFFC0C1C2C3 DC8 0FEH, 0FFH, 0C0H, 0C1H, 0C2H, 0C3H, 0C4H, 0C5H \ C4C5 \ 00000078 A8C6C7C8C9CA DC8 0A8H, 0C6H, 0C7H, 0C8H, 0C9H, 0CAH, 0CBH, 0CCH \ CBCC \ 00000080 CDCECFD0D1D2 DC8 0CDH, 0CEH, 0CFH, 0D0H, 0D1H, 0D2H, 0D3H, 0D4H \ D3D4 \ 00000088 D5D6D7D8D9DA DC8 0D5H, 0D6H, 0D7H, 0D8H, 0D9H, 0DAH, 0DBH, 0DCH \ DBDC \ 00000090 DDDEDF00 DC8 0DDH, 0DEH, 0DFH, 0 \ 00000094 687474703A2F DC8 "http://" \ 2F00 \ 0000009C 7777772E00 DC8 "www." \ 000000A1 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25735C746D70 DC8 "%s\\tmp%u.url" \ 25752E75726C \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 526571756573 DC8 "Request info..." \ 7420696E666F \ 2E2E2E00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25735C25755C DC8 "%s\\%u\\%u.txt" \ 25752E747874 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ 00000010 25735C25752E DC8 "%s\\%u.txt" \ 74787400 \ 0000001A 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 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 Maximum stack usage in bytes: Function CSTACK -------- ------ AddContactT9Key 12 AddCurContact 4 AddLOGQ 0 AddMsgToChat 108 AddSmile 4 AddStringToLog 200 AskNickAndAddContact 4 AutoAnswer 64 BackSpaceContactT9 8 CheckDoubleRun 8 ClOnKey 556 ClearContactT9Key 4 ClearLog 60 ClearSendQ 8 ClrOnOffBuffer 4 ClrPrintMess 16 CreateEditChat 116 DoScreen 32 DrawAck 80 DrawContactList 28 DrawHeader 64 DrawList 108 DrawLoadScreen 92 DrawOnlineContact 24 DrawScrollBar 60 DrawScrollStr 60 DrawSoftKeys 84 DrawStr 64 DrawWSStr 80 DrwImage 60 ElfKiller 4 ExtractAnswer 36 FindContactLOGQByAck 12 FindMessage 8 FindNextActiveContact 0 FindPrevActiveContact 0 FindSubWord 20 FreeLOGQ 8 FreeTemplates 8 GetCLV 176 GetColor 8 GetExtSnd 16 GetHost 0 GetHostsCount 0 GetIconIndex 0 GetLastXTextLOGQ 0 GetLongPressText 72 GetOnTotalContact 8 GetPort 16 GetPrivateIcon 0 GetShortInfo 24 GetStatusByIconIndex 0 GetTempName 20 GetWidth 24 Get_Online_Contact 0 GotoFirstPosition 0 IlluminationOff 8 IlluminationOn 24 IsNoJavaRun 12 IsUrl 44 LastLOGQ 0 LoadMoreHistory 8 LoadOnKey 40 LoadTemplates 332 LongPressAction 4 LongPressActionOnChat 40 MoveDownOneCollumn 24 MoveDownTwoCollumn 4 MoveUpOneCollumn 24 MoveUpTwoCollumn 0 NewLOGQ 12 OneSecondTimer 8 OpenLogfile 16 ParseAnswer 36 ParseXStatusText 20 Play 240 PrintMess 68 PrintMessage 12 ProcessPacket 588 Quote 152 QuoteFocus 4 QuoteNotFocus 4 ReadDefSettings 152 RecountMenu 12 RedrawOnline 16 RefreshCL 0 Remind 8 Reminder_timer 4 RemoveLOGQ 4 ReqAddMsgToChat 16 RequestXText 8 SMART_REDRAW 8 SaveAnswer 12 SendAnswer 40 SendAuthGrant 32 SendAuthReq 32 SendMSGACK 8 SetVisibleScreen 28 UpTime 8 UpdateCSMname 4 WriteDefSettings 152 ZeroOnline 16 ask_my_info 0 atoi 4 away_timer 36 create_connect 204 do_ping 4 do_reconnect 4 ec_menu 80 ec_menu_onkey 0 ecmenu_ghook 4 ed_options_handler 112 edchat_ghook 72 edchat_locret 0 edchat_onkey 348 end_socket 8 free_ICONS 16 get_answer 7360 get_rev 96 lgpUpdateClHdr 12 main 60 maincsm_onclose 8 maincsm_oncreate 20 maincsm_onmessage 72 method0 12 method1 12 method2 16 method3 8 method4 0 method5 8 method8 0 method9 0 my_ed_redraw 16 process_active_timer 12 resend 4 scroll_timer_proc 4 set_my_status 4 set_my_xstatus 36 setup_ICONS 12 show_off_contact 68 show_on_contact 52 show_pp_sender 64 start_vibra 8 stop_vibra 4 to_develop 4 wstrstr 32 Segment part sizes: Function/Label Bytes -------------- ----- SMART_REDRAW 48 ClrOnOffBuffer 56 canvasdata 4 RefreshCL 20 PrintMessage 40 ClrPrintMess 84 setup_ICONS 68 free_ICONS 48 IlluminationOff 60 IlluminationOn 140 away_timer 380 Remind 84 Reminder_timer 44 UpTime 108 LongPressActionOnChat 892 LongPressAction 188 DrwImage 156 IsNoJavaRun 72 show_on_contact 404 show_off_contact 412 show_pp_sender 356 ReadDefSettings 400 WriteDefSettings 312 GetExtSnd 136 Play 308 start_vibra 124 stop_vibra 88 FreeTemplates 56 LoadTemplates 396 RXbuf 16392 TXbuf 16392 ElfKiller 28 contactlist_menu_id 4 clm_hdr_text 48 lgpUpdateClHdr 96 NewLOGQ 52 LastLOGQ 36 FreeLOGQ 48 RemoveLOGQ 52 AddLOGQ 44 GetLastXTextLOGQ 72 GetIconIndex 228 FindContactLOGQByAck 88 ClearContactT9Key 20 AddContactT9Key 44 BackSpaceContactT9 44 GetOnTotalContact 92 GetHost 192 atoi 84 GetPort 276 GetHostsCount 120 create_connect 780 ClearSendQ 52 end_socket 68 resend 24 get_rev 156 SendAnswer 468 do_ping 52 SendMSGACK 52 RequestXText 52 get_answer 1824 AddStringToLog 636 ParseXStatusText 152 AddMsgToChat 900 DrawAck 336 ask_my_info 4 set_my_status 72 set_my_xstatus 264 to_develop 80 ReqAddMsgToChat 120 GetStatusByIconIndex 144 FindSubWord 92 GetCLV 244 AutoAnswer 612 ProcessPacket 3080 process_active_timer 148 transparent 4 PNG_SOFTKEY 4 PNG_HEADER 4 Get_Online_Contact 92 DoScreen 116 RecountMenu 84 GetWidth 112 DrawWSStr 104 DrawStr 232 scroll_timer_proc 100 DrawScrollStr 140 GetLongPressText 288 DrawSoftKeys 804 GetPrivateIcon 84 DrawHeader 1388 DrawScrollBar 392 RedrawOnline 180 DrawOnlineContact 104 GetColor 232 DrawList 2580 GotoFirstPosition 32 SetVisibleScreen 324 MoveUpOneCollumn 276 MoveDownOneCollumn 192 MoveUpTwoCollumn 48 MoveDownTwoCollumn 112 PrintMess 380 DrawContactList 184 ZeroOnline 192 FindMessage 144 ClOnKey 1500 DrawLoadScreen 1052 method0 72 method1 164 method2 80 method3 24 method4 20 LoadOnKey 416 method5 56 method8 8 method9 8 OneSecondTimer 100 Canvas 720 S_OFFLINE 8 S_INVISIBLE 12 S_AWAY 8 S_NA 4 S_OCCUPIED 12 S_DND 4 S_ONLINE 8 S_FFC 4 percent_t 372 def_setting 20 menusoftkeys 12 menu_skt 8 _t 3 maincsm_oncreate 304 maincsm_onclose 256 do_reconnect 40 CheckDoubleRun 108 maincsm_onmessage 2272 minus11 4 maincsm_name_body 280 UpdateCSMname 36 main 268 edchat_locret 4 ExtractAnswer 280 ??FindNextActiveContact_0 64 FindPrevActiveContact 88 ed_options_handler 1152 wstrstr 124 IsUrl 424 ParseAnswer 548 SaveAnswer 36 GetTempName 172 DMonth 52 edchat_onkey 1480 my_ed_redraw 140 edchat_ghook 560 edchat_desc 84 CreateEditChat 1248 Focus_Quote 4 Quote 456 QuoteFocus 16 QuoteNotFocus 16 GetShortInfo 176 AddCurContact 52 SendAuthReq 188 SendAuthGrant 188 OpenLogfile 152 ClearLog 240 LoadMoreHistory 64 ecmenu_ghook 20 ecmenu_HNDLS 40 ec_menu_onkey 8 popup 7176 Is_SLI_On 4 SoftShot 8 HeaderShot 8 ecmenu_HDR 80 ec_menu 452 AskNickAndAddContact 8 AddSmile 24 ??DataTable7 4 ??DataTable9 4 ??DataTable13 4 ??DataTable15 4 ??DataTable16 4 ??DataTable18 4 ??DataTable19 4 ??DataTable20 4 ??DataTable21 4 ??DataTable22 4 ??DataTable23 4 ??DataTable24 4 ??DataTable25 4 ??DataTable26 4 ??DataTable27 4 ??DataTable28 4 ??DataTable29 4 ??DataTable30 4 ??DataTable31 4 ??DataTable32 4 ??DataTable33 4 ??DataTable34 4 ??DataTable38 4 ??DataTable41 4 ??DataTable42 4 ??DataTable43 4 ??DataTable47 4 ??DataTable48 4 ??DataTable54 4 ??DataTable59 4 ??DataTable60 4 ??DataTable62 4 ??DataTable63 4 ??DataTable65 4 ??DataTable66 4 ??DataTable70 4 ??DataTable72 4 ??DataTable73 4 ??DataTable74 4 ??DataTable75 4 ??DataTable76 4 ??DataTable80 4 ??DataTable82 4 ??DataTable83 4 ??DataTable84 4 ??DataTable92 4 ??DataTable93 4 ??DataTable95 4 ??DataTable96 4 ??DataTable97 4 ??DataTable98 4 ??DataTable99 4 ??DataTable100 4 ??DataTable101 4 ??DataTable102 4 ??DataTable103 4 ??DataTable108 4 ??DataTable110 4 ??DataTable111 4 ??DataTable112 4 ??DataTable113 4 ??DataTable115 4 ??DataTable116 4 ??DataTable117 4 ??DataTable118 4 ??DataTable120 4 ??DataTable121 4 ??DataTable122 4 ??DataTable123 4 ??DataTable124 4 ??DataTable125 4 ??DataTable126 4 ??DataTable127 4 ??DataTable129 4 ??DataTable130 4 ??DataTable137 4 ??DataTable138 4 ??DataTable139 4 ??DataTable140 4 ??DataTable141 4 ??DataTable142 4 ??DataTable143 4 ??DataTable144 4 ??DataTable145 4 ??DataTable146 4 ??DataTable147 4 ??DataTable148 4 ??DataTable149 4 ??DataTable150 4 ??DataTable154 4 ??DataTable155 4 ??DataTable156 4 ??DataTable157 4 ??DataTable159 4 ??DataTable161 4 ??DataTable167 4 ??DataTable168 4 ??DataTable169 4 ??DataTable171 4 ??DataTable172 4 ??DataTable174 4 ??DataTable175 4 ??DataTable179 4 ??DataTable182 4 ??DataTable185 4 ??DataTable187 4 ??DataTable188 4 ??DataTable190 4 ??DataTable191 4 ??DataTable194 4 ??DataTable199 4 ??DataTable200 4 ??DataTable204 4 ??DataTable209 4 ??DataTable210 4 ??DataTable212 4 ??DataTable220 4 ??DataTable221 4 ??DataTable222 4 ??DataTable226 4 ??DataTable227 4 ??DataTable229 4 ??DataTable230 4 ??DataTable233 4 ??DataTable234 4 ??DataTable235 4 ??DataTable236 4 ??DataTable237 4 ??DataTable240 4 ??DataTable241 4 ??DataTable242 4 ??DataTable244 4 ??DataTable245 4 ??DataTable247 4 ??DataTable250 4 ??DataTable254 4 ??DataTable255 4 ??DataTable259 4 ??DataTable260 4 ??DataTable261 4 ??DataTable262 4 ??DataTable263 4 ??DataTable264 4 ??DataTable265 4 ??DataTable266 4 ??DataTable267 4 ??DataTable268 4 ??DataTable269 4 ??DataTable270 4 ??DataTable271 4 ??DataTable272 4 ??DataTable274 4 ??DataTable277 4 ??DataTable286 4 ??DataTable287 4 ??DataTable288 4 ??DataTable289 4 ??DataTable290 4 ??DataTable291 4 ??DataTable292 4 ??DataTable293 4 ??DataTable294 4 ? 7176 ? 4 ? 8 ? 8 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 12 ? 12 ? 8 ? 1 ? 96 ? 8 ? 4 ? 4 ? 16 ? 124 ? 4 ?_1 44 ? 52 ? 264 ? 4 ?_1 72 ? 16 ? 4 ? 3 ? 8 ? 8 ? 8 ? 8 ? 8 ? 8 ? 8 ? 8 ? 4 ? 4 ? 4 ? 8 ? 8 ? 12 ? 4 ? 12 ? 12 ? 44 ? 164 ? 16 ? 16 ? 28 ?_1 3 ? 12 ? 16 ? 12 ? 8 ? 16 ? 8 ? 16 ? 12 ? 12 ? 12 ? 12 ? 8 ? 12 Others 1156 43 368 bytes in segment CODE 3 166 bytes in segment DATA_C 7 196 bytes in segment DATA_I 7 196 bytes in segment DATA_ID 33 136 bytes in segment DATA_Z 24 bytes in segment INITTAB 42 236 bytes of CODE memory (+ 1 156 bytes shared) 10 362 bytes of CONST memory 40 332 bytes of DATA memory Errors: none Warnings: 1