############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 08/Jul/2011 13:41:11 # # 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 # # NEWSGOLD -D ELKA -D GUI_INTERFACE -D ICONBAR -D # # kluchnik --preprocess D:\pasha\elf\_MY_PROJECT_\_NAT # # ICQ2\kluchnik\List\ -lC D:\pasha\elf\_MY_PROJECT_\_N # # ATICQ2\kluchnik\List\ -o D:\pasha\elf\_MY_PROJECT_\_ # # NATICQ2\kluchnik\Obj\ -s9 --no_unroll --cpu_mode # # arm --endian little --cpu ARM926EJ-S --stack_align # # 4 --interwork -e --fpu None --dlib_config # # "D:\pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\LIB\dl5tpainl8n.h" -I # # "D:\pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\INC\" --inline_threshold=2 # # List file = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\kluchnik\List\mai # # n.lst # # Object file = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\kluchnik\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 ;; HeaderShot + 860 \ 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 HeaderShot + 860 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,??DataTable41 ;; HeaderShot \ 00000004 00402DE9 PUSH {LR} \ 00000008 A81392E5 LDR R1,[R2, #+936] \ 0000000C 0000A0E3 MOV R0,#+0 \ 00000010 010051E3 CMP R1,#+1 \ 00000014 0080BDB8 POPLT {PC} 130 { 131 on_off_timer = 0; \ 00000018 A80382E5 STR R0,[R2, #+936] 132 zeromem(on_off_buf,sizeof(on_off_buf)); \ 0000001C 8010A0E3 MOV R1,#+128 \ 00000020 6400A0E3 MOV R0,#+100 \ 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 ;; HeaderShot + 952 \ 00000004 0110A0E3 MOV R1,#+1 \ 00000008 001080E5 STR R1,[R0, #+0] 149 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??RefreshCL_0: \ 00000010 ........ DC32 HeaderShot + 952 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,??DataTable41 ;; HeaderShot \ 00000008 0140A0E1 MOV R4,R1 \ 0000000C 0010A0E1 MOV R1,R0 \ 00000010 4400A0E3 MOV R0,#+68 \ 00000014 600E80E3 ORR R0,R0,#0x600 \ 00000018 050080E0 ADD R0,R0,R5 \ 0000001C 1A0000EF SWI +26 174 PrintTimer = sec; \ 00000020 C44385E5 STR R4,[R5, #+964] 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,??DataTable41 ;; HeaderShot \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C C40395E5 LDR R0,[R5, #+964] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 0C0000BA BLT ??ClrPrintMess_0 \ 00000018 4460A0E3 MOV R6,#+68 \ 0000001C 606E86E3 ORR R6,R6,#0x600 \ 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 C40385E5 STR R0,[R5, #+964] 194 LongPressTimer=0; \ 00000038 C00385E5 STR R0,[R5, #+960] 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,??DataTable41 ;; HeaderShot \ 0000000C 045180E0 ADD R5,R0,R4, LSL #+2 \ 00000010 440295E5 LDR R0,[R5, #+580] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0400001A BNE ??setup_ICONS_1 \ 0000001C 1C009FE5 LDR R0,??setup_ICONS_2 ;; ICON_PATH \ 00000020 CC2395E5 LDR R2,[R5, #+972] \ 00000024 5C10A0E3 MOV R1,#+92 \ 00000028 ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 0000002C 440285E5 STR R0,[R5, #+580] 251 i++; \ ??setup_ICONS_1: \ 00000030 014084E2 ADD R4,R4,#+1 252 } 253 while(i` \ 0000000C F400A0E3 MOV R0,#+244 \ 00000010 640D80E3 ORR R0,R0,#0x1900 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 400080E2 ADD R0,R0,#+64 \ 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 600494E5 LDR R0,[R4, #+1120] \ 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 540494E5 LDR R0,[R4, #+1108] \ 00000078 0190A0E3 MOV R9,#+1 \ 0000007C 649484E5 STR R9,[R4, #+1124] \ 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 680484E5 STR R0,[R4, #+1128] 487 CurrentStatus=2; \ 0000009C 0200A0E3 MOV R0,#+2 \ 000000A0 540484E5 STR R0,[R4, #+1108] 488 set_my_status(); \ 000000A4 ........ BL set_my_status 489 change_back_status=1; \ 000000A8 6C9484E5 STR R9,[R4, #+1132] 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 600494E5 LDR R0,[R4, #+1120] \ 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 540494E5 LDR R0,[R4, #+1108] \ 00000114 030050E3 CMP R0,#+3 \ 00000118 0200000A BEQ ??away_timer_2 499 { 500 CurrentStatus = 3; \ 0000011C 0300A0E3 MOV R0,#+3 \ 00000120 540484E5 STR R0,[R4, #+1108] 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 8C0494E5 LDR R0,[R4, #+1164] \ 0000013C 030050E3 CMP R0,#+3 \ 00000140 60049405 LDREQ R0,[R4, #+1120] \ 00000144 01008002 ADDEQ R0,R0,#+1 \ 00000148 60048405 STREQ R0,[R4, #+1120] 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 4400A0E3 MOV R0,#+68 \ 0000015C 680D80E3 ORR R0,R0,#0x1A00 \ 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,??DataTable41 ;; HeaderShot \ 00000008 0000A0E3 MOV R0,#+0 \ 0000000C 700484E5 STR R0,[R4, #+1136] 528 if(total_unread && Is_Double_Vibra_On) \ 00000010 900394E5 LDR R0,[R4, #+912] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 6C039415 LDRNE R0,[R4, #+876] \ 0000001C 00005013 CMPNE R0,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} 529 { 530 vibra_count = 2; \ 00000024 0200A0E3 MOV R0,#+2 \ 00000028 680384E5 STR R0,[R4, #+872] 531 double_on = 1; \ 0000002C 0100A0E3 MOV R0,#+1 \ 00000030 700484E5 STR R0,[R4, #+1136] 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 410F81E2 ADD R0,R1,#+260 \ 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,??DataTable41 ;; HeaderShot 540 GBS_StartTimerProc(&remind_tmr, 216*30, Remind); \ 00000004 ........ LDR R2,??DataTable13 ;; Remind \ 00000008 00402DE9 PUSH {LR} \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 701480E5 STR R1,[R0, #+1136] \ 00000014 5010A0E3 MOV R1,#+80 \ 00000018 641D81E3 ORR R1,R1,#0x1900 \ 0000001C 413F81E2 ADD R3,R1,#+260 \ 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,??DataTable41 ;; HeaderShot \ 00000004 30002DE9 PUSH {R4,R5} \ 00000008 8C4491E5 LDR R4,[R1, #+1164] \ 0000000C 3D00A0E3 MOV R0,#+61 \ 00000010 500E80E3 ORR R0,R0,#0x500 \ 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 0140C0E3 BIC R4,R0,#0x1 \ 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,??DataTable41 ;; HeaderShot \ 00000010 04D04DE2 SUB SP,SP,#+4 \ 00000014 C9BFA0E3 MOV R11,#+804 \ 00000018 428E8BE2 ADD R8,R11,#+1056 \ 0000001C 0160A0E3 MOV R6,#+1 \ 00000020 404FC8E3 BIC R4,R8,#0x100 \ 00000024 00A0A0E3 MOV R10,#+0 \ 00000028 011041E2 SUB R1,R1,#+1 \ 0000002C 0C0051E3 CMP R1,#+12 \ 00000030 CD00008A BHI ??LongPressActionOnChat_1 \ 00000034 012F8FE2 ADR R2,??LongPressActionOnChat_0 \ 00000038 0120D2E7 LDRB R2,[R2, R1] \ 0000003C 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??LongPressActionOnChat_0: \ 00000040 03111F32 DC8 +3,+17,+31,+50 \ 00000044 3D556A79 DC8 +61,+85,+106,+121 \ 00000048 899DB8C1 DC8 +137,+157,+184,+193 \ 0000004C C7000000 DC8 +199,+0,+0,+0 586 { 587 case 1: 588 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??LongPressActionOnChat_2: \ 00000050 740395E5 LDR R0,[R5, #+884] \ 00000054 000050E3 CMP R0,#+0 \ 00000058 0060A013 MOVNE R6,#+0 \ 0000005C 746385E5 STR R6,[R5, #+884] 589 PrintMessage(Is_Sounds_Enabled?"Sound 0n":"Sound Off",3); \ 00000060 000056E3 CMP R6,#+0 \ 00000064 14108912 ADDNE R1,R9,#+20 \ 00000068 20108902 ADDEQ R1,R9,#+32 \ 0000006C 050084E0 ADD R0,R4,R5 \ 00000070 1A0000EF SWI +26 \ 00000074 0300A0E3 MOV R0,#+3 \ 00000078 C40385E5 STR R0,[R5, #+964] 590 SUBPROC((void*)WriteDefSettings); \ 0000007C 0700A0E1 MOV R0,R7 \ 00000080 710100EF SWI +369 \ 00000084 1E0000EA B ??LongPressActionOnChat_3 591 break; 592 case 2: 593 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??LongPressActionOnChat_4: \ 00000088 700395E5 LDR R0,[R5, #+880] \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 0060A013 MOVNE R6,#+0 \ 00000094 706385E5 STR R6,[R5, #+880] 594 SUBPROC((void*)WriteDefSettings); \ 00000098 0700A0E1 MOV R0,R7 \ 0000009C 710100EF SWI +369 595 PrintMessage(Is_Vibra_Enabled?"Vibra On":"Vibra Off",3); \ 000000A0 700395E5 LDR R0,[R5, #+880] \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 2C108912 ADDNE R1,R9,#+44 \ 000000AC 38108902 ADDEQ R1,R9,#+56 \ ??LongPressActionOnChat_5: \ 000000B0 050084E0 ADD R0,R4,R5 \ 000000B4 1A0000EF SWI +26 \ 000000B8 0300A0E3 MOV R0,#+3 \ ??LongPressActionOnChat_6: \ 000000BC 0F0000EA B ??LongPressActionOnChat_7 596 break; 597 case 3: 598 if(CurrentPrivateStatus!=/*1*/2) \ ??LongPressActionOnChat_8: \ 000000C0 5C0495E5 LDR R0,[R5, #+1116] \ 000000C4 020050E3 CMP R0,#+2 \ 000000C8 0600000A BEQ ??LongPressActionOnChat_9 599 { 600 SetPrivateStatus(2/*1*/);//Инвиз \ 000000CC 0200A0E3 MOV R0,#+2 \ 000000D0 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 601 PrintMessage("Инвиз включен",2); \ 000000D4 441089E2 ADD R1,R9,#+68 \ 000000D8 050084E0 ADD R0,R4,R5 \ 000000DC 1A0000EF SWI +26 \ 000000E0 0200A0E3 MOV R0,#+2 \ 000000E4 050000EA B ??LongPressActionOnChat_7 602 } 603 else 604 { 605 SetPrivateStatus(3); \ ??LongPressActionOnChat_9: \ 000000E8 0300A0E3 MOV R0,#+3 \ 000000EC ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 606 PrintMessage("Инвиз выключен",2); \ 000000F0 541089E2 ADD R1,R9,#+84 \ ??LongPressActionOnChat_10: \ 000000F4 050084E0 ADD R0,R4,R5 \ 000000F8 1A0000EF SWI +26 \ 000000FC 0200A0E3 MOV R0,#+2 \ ??LongPressActionOnChat_7: \ 00000100 C40385E5 STR R0,[R5, #+964] \ ??LongPressActionOnChat_3: \ 00000104 0000A0E3 MOV R0,#+0 \ 00000108 F28FBDE8 POP {R1,R4-R11,PC} 607 } 608 break; 609 case 4: 610 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??LongPressActionOnChat_11: \ 0000010C 6C0395E5 LDR R0,[R5, #+876] \ 00000110 000050E3 CMP R0,#+0 \ 00000114 0060A013 MOVNE R6,#+0 \ 00000118 6C6385E5 STR R6,[R5, #+876] 611 SUBPROC((void*)WriteDefSettings); \ 0000011C 0700A0E1 MOV R0,R7 \ 00000120 710100EF SWI +369 612 PrintMessage(Is_Double_Vibra_On?"Vibra rem On":"Vibra rem Off",3); \ 00000124 6C0395E5 LDR R0,[R5, #+876] \ 00000128 000050E3 CMP R0,#+0 \ 0000012C 64108912 ADDNE R1,R9,#+100 \ 00000130 74108902 ADDEQ R1,R9,#+116 \ 00000134 DDFFFFEA B ??LongPressActionOnChat_5 613 break; 614 case 5: 615 { 616 CLIST *cl; 617 cl=(CLIST *)(&cltop); \ ??LongPressActionOnChat_12: \ 00000138 D56F85E2 ADD R6,R5,#+852 \ 0000013C 060000EA B ??LongPressActionOnChat_13 618 while(cl=(CLIST *)(cl->next)) 619 { 620 if(cl->log) \ ??LongPressActionOnChat_14: \ 00000140 680096E5 LDR R0,[R6, #+104] \ 00000144 000050E3 CMP R0,#+0 \ 00000148 0300000A BEQ ??LongPressActionOnChat_13 621 { 622 FreeLOGQ(&cl->log); \ 0000014C 680086E2 ADD R0,R6,#+104 \ 00000150 ........ BL FreeLOGQ 623 cl->msg_count=0; \ 00000154 78A086E5 STR R10,[R6, #+120] 624 cl->isactive=0; \ 00000158 74A086E5 STR R10,[R6, #+116] 625 } 626 } \ ??LongPressActionOnChat_13: \ 0000015C 006096E5 LDR R6,[R6, #+0] \ 00000160 000056E3 CMP R6,#+0 \ 00000164 F5FFFF1A BNE ??LongPressActionOnChat_14 627 if(strlen(ContactT9Key)) ClearContactT9Key(); \ 00000168 050088E0 ADD R0,R8,R5 \ 0000016C 1B0000EF SWI +27 \ 00000170 000050E3 CMP R0,#+0 \ 00000174 0200000A BEQ ??LongPressActionOnChat_15 \ 00000178 2010A0E3 MOV R1,#+32 \ 0000017C 050088E0 ADD R0,R8,R5 \ 00000180 1D0100EF SWI +285 628 RecountMenu(NULL,1); \ ??LongPressActionOnChat_15: \ 00000184 0110A0E3 MOV R1,#+1 \ 00000188 0000A0E3 MOV R0,#+0 \ 0000018C ........ BL RecountMenu 629 PrintMessage("All chat clear!",2); \ 00000190 841089E2 ADD R1,R9,#+132 \ 00000194 D6FFFFEA B ??LongPressActionOnChat_10 630 break; 631 } 632 case 6: 633 if(!away_m) \ ??LongPressActionOnChat_16: \ 00000198 640495E5 LDR R0,[R5, #+1124] \ 0000019C 000050E3 CMP R0,#+0 \ 000001A0 0700001A BNE ??LongPressActionOnChat_17 634 { 635 away_m=!away_m; \ 000001A4 646485E5 STR R6,[R5, #+1124] 636 GBS_StopTimer(&away_tmr); \ 000001A8 500D84E2 ADD R0,R4,#+5120 \ 000001AC 050080E0 ADD R0,R0,R5 \ 000001B0 440100EF SWI +324 637 msg_away_timer=AUTO_ENGADE; \ 000001B4 ........ LDR R0,??DataTable18 ;; AUTO_ENGADE \ 000001B8 000090E5 LDR R0,[R0, #+0] \ 000001BC 600485E5 STR R0,[R5, #+1120] \ 000001C0 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: \ 000001C4 6C0495E5 LDR R0,[R5, #+1132] \ 000001C8 60A485E5 STR R10,[R5, #+1120] \ 000001CC 64A485E5 STR R10,[R5, #+1124] \ 000001D0 000050E3 CMP R0,#+0 \ 000001D4 F28FBD08 POPEQ {R1,R4-R11,PC} 644 { 645 CurrentStatus=status_rem; \ 000001D8 680495E5 LDR R0,[R5, #+1128] \ 000001DC 540485E5 STR R0,[R5, #+1108] 646 set_my_status(); \ 000001E0 ........ BL set_my_status 647 change_back_status=0; \ 000001E4 6CA485E5 STR R10,[R5, #+1132] \ 000001E8 C5FFFFEA B ??LongPressActionOnChat_3 648 } 649 } 650 break; 651 case 7: 652 { 653 WSHDR *ws; 654 ws=AllocWS(150); \ ??LongPressActionOnChat_18: \ 000001EC 9600A0E3 MOV R0,#+150 \ 000001F0 250100EF SWI +293 \ 000001F4 0040A0E1 MOV R4,R0 655 str_2ws(ws,successed_config_filename,128); \ 000001F8 ........ LDR R0,??DataTable19 ;; successed_config_filename \ 000001FC 8020A0E3 MOV R2,#+128 \ 00000200 001090E5 LDR R1,[R0, #+0] \ 00000204 0400A0E1 MOV R0,R4 \ 00000208 6C0100EF SWI +364 656 ExecuteFile(ws,0,0); \ 0000020C 0020A0E3 MOV R2,#+0 \ 00000210 0210A0E1 MOV R1,R2 \ 00000214 0400A0E1 MOV R0,R4 \ 00000218 940000EF SWI +148 657 FreeWS(ws); \ 0000021C 0400A0E1 MOV R0,R4 \ 00000220 290100EF SWI +297 \ 00000224 B6FFFFEA B ??LongPressActionOnChat_3 658 } 659 break; 660 case 8://ping 661 { 662 TPKT *p; 663 p=malloc(sizeof(PKT)+sizeof(TTime)); \ ??LongPressActionOnChat_19: \ 00000228 1000A0E3 MOV R0,#+16 \ 0000022C 140000EF SWI +20 \ 00000230 0040A0E1 MOV R4,R0 664 GetDateTime(NULL,(TTime *)p->data); \ 00000234 081084E2 ADD R1,R4,#+8 \ 00000238 0000A0E3 MOV R0,#+0 \ 0000023C B40000EF SWI +180 665 p->pkt.uin=0; \ 00000240 00A084E5 STR R10,[R4, #+0] 666 p->pkt.type=T_ECHO; \ 00000244 1200A0E3 MOV R0,#+18 \ 00000248 B400C4E1 STRH R0,[R4, #+4] 667 p->pkt.data_len=sizeof(TTime); \ 0000024C 0800A0E3 MOV R0,#+8 \ 00000250 B600C4E1 STRH R0,[R4, #+6] 668 SUBPROC((void *)SendAnswer,0,p); \ 00000254 ........ LDR R0,??DataTable20 ;; SendAnswer \ 00000258 0420A0E1 MOV R2,R4 \ 0000025C 0A10A0E1 MOV R1,R10 \ 00000260 710100EF SWI +369 \ 00000264 A6FFFFEA B ??LongPressActionOnChat_3 669 } 670 break; 671 case 9://go to idle 672 { 673 ClearContactT9Key(); \ ??LongPressActionOnChat_20: \ 00000268 2010A0E3 MOV R1,#+32 \ 0000026C 050088E0 ADD R0,R8,R5 \ 00000270 1D0100EF SWI +285 674 RecountMenu(NULL,1); \ 00000274 0110A0E3 MOV R1,#+1 \ 00000278 0A00A0E1 MOV R0,R10 \ 0000027C ........ BL RecountMenu 675 silenthide=1; \ 00000280 4C6485E5 STR R6,[R5, #+1100] 676 gipc.name_to=ipc_xtask_name; \ 00000284 A30F89E2 ADD R0,R9,#+652 \ 00000288 05008BE7 STR R0,[R11, +R5] 677 gipc.name_from=ipc_my_name; \ 0000028C 9B0F89E2 ADD R0,R9,#+620 \ 00000290 280385E5 STR R0,[R5, #+808] 678 gipc.data=0; \ 00000294 2CA385E5 STR R10,[R5, #+812] 679 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 00000298 05308BE0 ADD R3,R11,R5 \ 0000029C 0620A0E1 MOV R2,R6 \ 000002A0 B010A0E3 MOV R1,#+176 \ 000002A4 DE1C81E3 ORR R1,R1,#0xDE00 \ 000002A8 0900A0E3 MOV R0,#+9 \ 000002AC 420C80E3 ORR R0,R0,#0x4200 \ 000002B0 000100EF SWI +256 \ 000002B4 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: \ 000002B8 ........ LDR R0,??DataTable21 ;; DEVELOP_IF 685 686 ClearContactT9Key(); \ 000002BC 2010A0E3 MOV R1,#+32 \ 000002C0 000090E5 LDR R0,[R0, #+0] \ 000002C4 030050E3 CMP R0,#+3 \ 000002C8 9C638505 STREQ R6,[R5, #+924] \ 000002CC 050088E0 ADD R0,R8,R5 \ 000002D0 1D0100EF SWI +285 687 RecountMenu(NULL,1); \ 000002D4 0110A0E3 MOV R1,#+1 \ 000002D8 0A00A0E1 MOV R0,R10 \ 000002DC ........ BL RecountMenu 688 gipc.name_to=ipc_xtask_name; \ 000002E0 A30F89E2 ADD R0,R9,#+652 \ 000002E4 05008BE7 STR R0,[R11, +R5] 689 gipc.name_from=ipc_my_name; \ 000002E8 9B0F89E2 ADD R0,R9,#+620 \ 000002EC 280385E5 STR R0,[R5, #+808] 690 gipc.data=0; \ 000002F0 2CA385E5 STR R10,[R5, #+812] 691 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 000002F4 05308BE0 ADD R3,R11,R5 \ 000002F8 0620A0E1 MOV R2,R6 \ 000002FC B010A0E3 MOV R1,#+176 \ 00000300 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000304 0900A0E3 MOV R0,#+9 \ 00000308 420C80E3 ORR R0,R0,#0x4200 \ 0000030C 000100EF SWI +256 692 if (IsUnlocked()) \ 00000310 430000EF SWI +67 \ 00000314 000050E3 CMP R0,#+0 \ 00000318 F28FBD08 POPEQ {R1,R4-R11,PC} 693 { 694 KbdLock(); \ 0000031C A90000EF SWI +169 \ 00000320 77FFFFEA B ??LongPressActionOnChat_3 695 } 696 } 697 break; 698 case 11: //offline contacts 699 { 700 extern void ChangeShowOfflineMode(void); 701 ChangeShowOfflineMode(); \ ??LongPressActionOnChat_22: \ 00000324 ........ _BLF ChangeShowOfflineMode,??ChangeShowOfflineMode??rA 702 PrintMessage(Is_Show_Offline?"Оффлайн контакты\nвключены":"Оффлайн контакты\nотключены",1); \ 00000328 780395E5 LDR R0,[R5, #+888] \ 0000032C 000050E3 CMP R0,#+0 \ 00000330 94108912 ADDNE R1,R9,#+148 \ 00000334 B0108902 ADDEQ R1,R9,#+176 \ ??LongPressActionOnChat_23: \ 00000338 050084E0 ADD R0,R4,R5 \ 0000033C 1A0000EF SWI +26 \ 00000340 C46385E5 STR R6,[R5, #+964] \ 00000344 6EFFFFEA B ??LongPressActionOnChat_3 703 } 704 break; 705 case 12: //group mode 706 { 707 extern void ChangeShowGroupsMode(void); 708 ChangeShowGroupsMode(); \ ??LongPressActionOnChat_24: \ 00000348 ........ _BLF ChangeShowGroupsMode,??ChangeShowGroupsMode??rA 709 PrintMessage(Is_Show_Groups?"Группы включены":"Группы отключены",1); \ 0000034C 7C0395E5 LDR R0,[R5, #+892] \ 00000350 000050E3 CMP R0,#+0 \ 00000354 DC108902 ADDEQ R1,R9,#+220 \ 00000358 CC108912 ADDNE R1,R9,#+204 \ 0000035C F5FFFFEA B ??LongPressActionOnChat_23 710 } 711 break; 712 case 13: // action by * 713 { 714 int FindMessage(CLIST* ); 715 LongPressTimer=0; \ ??LongPressActionOnChat_25: \ 00000360 C0A385E5 STR R10,[R5, #+960] 716 return FindMessage(t); \ 00000364 ........ BL FindMessage \ 00000368 F28FBDE8 POP {R1,R4-R11,PC} 717 } 718 //break; 719 default : LongPressTimer=0; break; \ ??LongPressActionOnChat_1: \ 0000036C C0A385E5 STR R10,[R5, #+960] 720 }//switch() 721 return 0; \ 00000370 0000A0E3 MOV R0,#+0 \ 00000374 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,??DataTable41 ;; HeaderShot \ 00000004 00402DE9 PUSH {LR} \ 00000008 0230A0E3 MOV R3,#+2 \ 0000000C C03382E5 STR R3,[R2, #+960] 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 C00382E5 STR R0,[R2, #+960] 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 B200D4E1 LDRH R0,[R4, #+2] \ 00000020 01002DE9 PUSH {R0} \ 00000024 B030D4E1 LDRH 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 B010D4E1 LDRH 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 B210D4E1 LDRH R1,[R4, #+2] \ 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 ;; HeaderShot \ 00000008 740494E5 LDR R0,[R4, #+1140] \ 0000000C 000050E3 CMP R0,#+0 840 { 841 popup[POPUP_ON].timer=0; \ 00000010 0000A013 MOVNE R0,#+0 \ 00000014 4C008415 STRNE R0,[R4, #+76] 842 return; \ 00000018 F087BD18 POPNE {R4-R10,PC} 843 } 844 845 if(popup[POPUP_ON].timer > 0) \ 0000001C 4C0094E5 LDR R0,[R4, #+76] \ 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 0C1084E2 ADD R1,R4,#+12 \ 00000048 ........ _BLF ascii2ws,??ascii2ws??rA \ 0000004C 4C0094E5 LDR R0,[R4, #+76] \ 00000050 0060A0E3 MOV R6,#+0 \ 00000054 010040E2 SUB R0,R0,#+1 \ 00000058 4C0084E5 STR R0,[R4, #+76] \ 0000005C 600094E5 LDR R0,[R4, #+96] \ 00000060 000050E3 CMP R0,#+0 \ 00000064 B060D011 LDRHNE R6,[R0, #+0] \ 00000068 640094E5 LDR R0,[R4, #+100] \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 68109415 LDRNE R1,[R4, #+104] \ 00000074 00005113 CMPNE R1,#+0 \ 00000078 B000D011 LDRHNE 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 600094E5 LDR R0,[R4, #+96] \ 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 680094E5 LDR R0,[R4, #+104] \ 000000F0 000050E3 CMP R0,#+0 \ 000000F4 0600000A BEQ ??show_on_contact_2 \ 000000F8 600094E5 LDR R0,[R4, #+96] \ 000000FC 0030A0E3 MOV R3,#+0 \ 00000100 B000D0E1 LDRH R0,[R0, #+0] \ 00000104 0320A0E3 MOV R2,#+3 \ 00000108 041080E2 ADD R1,R0,#+4 \ 0000010C 640094E5 LDR R0,[R4, #+100] \ 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 500084E2 ADD R0,R4,#+80 \ 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 ;; HeaderShot \ 00000018 740494E5 LDR R0,[R4, #+1140] \ 0000001C 000050E3 CMP R0,#+0 886 { 887 popup[POPUP_OFF].timer=0; \ 00000020 0000A013 MOVNE R0,#+0 \ 00000024 AC008415 STRNE R0,[R4, #+172] 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 AC0094E5 LDR R0,[R4, #+172] \ 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 6C1084E2 ADD R1,R4,#+108 \ 00000058 ........ _BLF ascii2ws,??ascii2ws??rA \ 0000005C AC0094E5 LDR R0,[R4, #+172] \ 00000060 010040E2 SUB R0,R0,#+1 \ 00000064 AC0084E5 STR R0,[R4, #+172] \ 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 C08094E5 LDR R8,[R4, #+192] \ 000000C4 B080D8E1 LDRH 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 C00094E5 LDR R0,[R4, #+192] \ 000000EC 011048E0 SUB R1,R8,R1 \ 000000F0 B080D0E1 LDRH 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 B00084E2 ADD R0,R4,#+176 \ 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 ;; HeaderShot \ 00000008 436FA0E3 MOV R6,#+268 \ 0000000C 740494E5 LDR R0,[R4, #+1140] \ 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 CC1084E2 ADD R1,R4,#+204 \ 0000004C ........ _BLF ascii2ws,??ascii2ws??rA \ 00000050 040096E7 LDR R0,[R6, +R4] \ 00000054 010040E2 SUB R0,R0,#+1 \ 00000058 040086E7 STR R0,[R6, +R4] \ 0000005C 486FA0E3 MOV R6,#+288 \ 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 B010D1E1 LDRH R1,[R1, #+0] \ 000000B0 000081E0 ADD R0,R1,R0 \ 000000B4 062080E2 ADD R2,R0,#+6 \ 000000B8 0010A0E3 MOV R1,#+0 \ 000000BC 0000A0E3 MOV R0,#+0 \ 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 B020D1E1 LDRH R2,[R1, #+0] \ 00000120 020080E0 ADD R0,R0,R2 \ 00000124 043080E2 ADD R3,R0,#+4 \ 00000128 B000D1E1 LDRH 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 440F84E2 ADD R0,R4,#+272 \ 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 ;; HeaderShot \ 00000010 8CD04DE2 SUB SP,SP,#+140 \ 00000014 000090E5 LDR R0,[R0, #+0] \ 00000018 7F10A0E3 MOV R1,#+127 \ 0000001C 01002DE9 PUSH {R0} \ 00000020 4400A0E3 MOV R0,#+68 \ 00000024 500E80E3 ORR R0,R0,#0x500 \ 00000028 043080E0 ADD R3,R0,R4 \ 0000002C 10008DE2 ADD R0,SP,#+16 \ 00000030 1B0100EF SWI +283 968 if(get_file_size(str) != sizeof(DEF_SETTINGS)) unlink(str,&err); \ 00000034 10008DE2 ADD R0,SP,#+16 \ 00000038 ........ _BLF get_file_size,??get_file_size??rA \ 0000003C 050050E3 CMP R0,#+5 \ 00000040 04D08DE2 ADD SP,SP,#+4 \ 00000044 0200000A BEQ ??ReadDefSettings_0 \ 00000048 08108DE2 ADD R1,SP,#+8 \ 0000004C 0C008DE2 ADD R0,SP,#+12 \ 00000050 6B0100EF SWI +363 969 if ((f=fopen(str,A_ReadOnly+A_BIN,P_READ,&err))!=-1) \ ??ReadDefSettings_0: \ 00000054 08308DE2 ADD R3,SP,#+8 \ 00000058 8020A0E3 MOV R2,#+128 \ 0000005C 801CA0E3 MOV R1,#+32768 \ 00000060 0C008DE2 ADD R0,SP,#+12 \ 00000064 0A0000EF SWI +10 \ 00000068 0050A0E1 MOV R5,R0 \ 0000006C 010075E3 CMN R5,#+1 \ 00000070 3100000A BEQ ??ReadDefSettings_1 970 { 971 fread(f,&def_set,sizeof(DEF_SETTINGS),&err); \ 00000074 08308DE2 ADD R3,SP,#+8 \ 00000078 0520A0E3 MOV R2,#+5 \ 0000007C 0D10A0E1 MOV R1,SP \ 00000080 0B0000EF SWI +11 972 fclose(f,&err); \ 00000084 08108DE2 ADD R1,SP,#+8 \ 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 700384E5 STR R0,[R4, #+880] 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 740384E5 STR R0,[R4, #+884] 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 780384E5 STR R0,[R4, #+888] 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 7C0384E5 STR R0,[R4, #+892] 977 CurrentStatus = def_set.def_status + 1; \ 000000CC 0100DDE5 LDRB R0,[SP, #+1] \ 000000D0 010080E2 ADD R0,R0,#+1 \ 000000D4 540484E5 STR R0,[R4, #+1108] 978 CurrentXStatus = def_set.def_xstatus; \ 000000D8 0200DDE5 LDRB R0,[SP, #+2] \ 000000DC 580484E5 STR R0,[R4, #+1112] 979 IsActiveUp = def_set.ActiveUp; \ 000000E0 0300DDE5 LDRB R0,[SP, #+3] \ 000000E4 011000E2 AND R1,R0,#0x1 \ 000000E8 641384E5 STR R1,[R4, #+868] 980 #ifdef ELKA 981 Is_SLI_On = def_set.sli_state; \ 000000EC 021000E2 AND R1,R0,#0x2 \ 000000F0 A110A0E1 LSR R1,R1,#+1 \ 000000F4 841384E5 STR R1,[R4, #+900] 982 #endif 983 Is_POPUP_On = def_set.popup_state; \ 000000F8 041000E2 AND R1,R0,#0x4 \ 000000FC 2111A0E1 LSR R1,R1,#+2 \ 00000100 801384E5 STR R1,[R4, #+896] 984 Is_Double_Vibra_On = def_set.remind_state; \ 00000104 081000E2 AND R1,R0,#0x8 \ 00000108 A111A0E1 LSR R1,R1,#+3 \ 0000010C 6C1384E5 STR R1,[R4, #+876] 985 Is_ILU_Mode = def_set.ilu_mode; 986 Is_ILU_By_Online = def_set.ilu_online; 987 Is_Extd_Sound = def_set.extsnd_mode; 988 ExtSndModeIndivd = def_set.extsnd_flag; 989 CurrentPrivateStatus = def_set.def_private_status; \ 00000110 0450DDE5 LDRB R5,[SP, #+4] \ 00000114 101000E2 AND R1,R0,#0x10 \ 00000118 2112A0E1 LSR R1,R1,#+4 \ 0000011C 202000E2 AND R2,R0,#0x20 \ 00000120 A222A0E1 LSR R2,R2,#+5 \ 00000124 403000E2 AND R3,R0,#0x40 \ 00000128 2333A0E1 LSR R3,R3,#+6 \ 0000012C A003A0E1 LSR R0,R0,#+7 \ 00000130 015005E2 AND R5,R5,#0x1 \ 00000134 5C5484E5 STR R5,[R4, #+1116] \ 00000138 120000EA B ??ReadDefSettings_2 990 } 991 else 992 { 993 Is_Vibra_Enabled = 1; \ ??ReadDefSettings_1: \ 0000013C 0100A0E3 MOV R0,#+1 \ 00000140 700384E5 STR R0,[R4, #+880] 994 Is_Sounds_Enabled = 0; \ 00000144 0010A0E3 MOV R1,#+0 \ 00000148 741384E5 STR R1,[R4, #+884] 995 Is_Show_Offline = 0; \ 0000014C 781384E5 STR R1,[R4, #+888] 996 Is_Show_Groups = 0; \ 00000150 7C1384E5 STR R1,[R4, #+892] 997 CurrentStatus = IS_ONLINE; \ 00000154 0B20A0E3 MOV R2,#+11 \ 00000158 542484E5 STR R2,[R4, #+1108] 998 CurrentXStatus = 0; \ 0000015C 581484E5 STR R1,[R4, #+1112] 999 CurrentPrivateStatus = PL_VISLIST_CAN_SEE; \ 00000160 0220A0E3 MOV R2,#+2 \ 00000164 5C2484E5 STR R2,[R4, #+1116] 1000 1001 IsActiveUp = 1; \ 00000168 640384E5 STR R0,[R4, #+868] 1002 1003 #ifdef ELKA 1004 Is_SLI_On = 1; \ 0000016C 840384E5 STR R0,[R4, #+900] 1005 #endif 1006 Is_POPUP_On = 1; \ 00000170 800384E5 STR R0,[R4, #+896] 1007 Is_Double_Vibra_On = 0; \ 00000174 6C1384E5 STR R1,[R4, #+876] 1008 Is_ILU_Mode = 1; \ 00000178 0110A0E3 MOV R1,#+1 1009 Is_ILU_By_Online = 1; \ 0000017C 0020A0E1 MOV R2,R0 1010 Is_Extd_Sound = 0; \ 00000180 0030A0E3 MOV R3,#+0 1011 ExtSndModeIndivd = 0; \ 00000184 0300A0E1 MOV R0,R3 \ ??ReadDefSettings_2: \ 00000188 780484E5 STR R0,[R4, #+1144] \ 0000018C 8C3384E5 STR R3,[R4, #+908] \ 00000190 882384E5 STR R2,[R4, #+904] \ 00000194 481484E5 STR R1,[R4, #+1096] 1012 1013 } 1014 } \ 00000198 8CD08DE2 ADD SP,SP,#+140 \ 0000019C 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 ;; HeaderShot \ 00000010 8CD04DE2 SUB SP,SP,#+140 \ 00000014 000090E5 LDR R0,[R0, #+0] \ 00000018 7F10A0E3 MOV R1,#+127 \ 0000001C 01002DE9 PUSH {R0} \ 00000020 4400A0E3 MOV R0,#+68 \ 00000024 500E80E3 ORR R0,R0,#0x500 \ 00000028 043080E0 ADD R3,R0,R4 \ 0000002C 10008DE2 ADD R0,SP,#+16 \ 00000030 1B0100EF SWI +283 1023 if ((f=fopen(str,A_WriteOnly+A_BIN+A_Create+A_Truncate,P_WRITE,&err))!=-1) \ 00000034 0C308DE2 ADD R3,SP,#+12 \ 00000038 402FA0E3 MOV R2,#+256 \ 0000003C 0110A0E3 MOV R1,#+1 \ 00000040 831C81E3 ORR R1,R1,#0x8300 \ 00000044 10008DE2 ADD R0,SP,#+16 \ 00000048 0A0000EF SWI +10 \ 0000004C 0050A0E1 MOV R5,R0 \ 00000050 010075E3 CMN R5,#+1 \ 00000054 04D08DE2 ADD SP,SP,#+4 \ 00000058 3A00000A 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 702394E5 LDR R2,[R4, #+880] \ 00000064 F01001E2 AND R1,R1,#0xF0 \ 00000068 012002E2 AND R2,R2,#0x1 \ 0000006C 011082E1 ORR R1,R2,R1 \ 00000070 742394E5 LDR R2,[R4, #+884] \ 00000074 0230A0E3 MOV R3,#+2 \ 00000078 822003E0 AND R2,R3,R2, LSL #+1 \ 0000007C 011082E1 ORR R1,R2,R1 \ 00000080 782394E5 LDR R2,[R4, #+888] \ 00000084 0430A0E3 MOV R3,#+4 \ 00000088 022103E0 AND R2,R3,R2, LSL #+2 \ 0000008C 011082E1 ORR R1,R2,R1 \ 00000090 7C2394E5 LDR R2,[R4, #+892] \ 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 541494E5 LDR R1,[R4, #+1108] 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 08308DE2 ADD R3,SP,#+8 \ 000000AC 011041E2 SUB R1,R1,#+1 \ 000000B0 0110CDE5 STRB R1,[SP, #+1] \ 000000B4 581494E5 LDR R1,[R4, #+1112] \ 000000B8 0210CDE5 STRB R1,[SP, #+2] \ 000000BC 641394E5 LDR R1,[R4, #+868] \ 000000C0 842394E5 LDR R2,[R4, #+900] \ 000000C4 FD1001E2 AND R1,R1,#0xFD \ 000000C8 821081E1 ORR R1,R1,R2, LSL #+1 \ 000000CC 802394E5 LDR R2,[R4, #+896] \ 000000D0 FB1001E2 AND R1,R1,#0xFB \ 000000D4 021181E1 ORR R1,R1,R2, LSL #+2 \ 000000D8 6C2394E5 LDR R2,[R4, #+876] \ 000000DC F71001E2 AND R1,R1,#0xF7 \ 000000E0 821181E1 ORR R1,R1,R2, LSL #+3 \ 000000E4 482494E5 LDR R2,[R4, #+1096] \ 000000E8 EF1001E2 AND R1,R1,#0xEF \ 000000EC 021281E1 ORR R1,R1,R2, LSL #+4 \ 000000F0 882394E5 LDR R2,[R4, #+904] \ 000000F4 DF1001E2 AND R1,R1,#0xDF \ 000000F8 821281E1 ORR R1,R1,R2, LSL #+5 \ 000000FC 8C2394E5 LDR R2,[R4, #+908] \ 00000100 BF1001E2 AND R1,R1,#0xBF \ 00000104 021381E1 ORR R1,R1,R2, LSL #+6 \ 00000108 782494E5 LDR R2,[R4, #+1144] \ 0000010C 7F1001E2 AND R1,R1,#0x7F \ 00000110 821381E1 ORR R1,R1,R2, LSL #+7 \ 00000114 0310CDE5 STRB R1,[SP, #+3] \ 00000118 0410DDE5 LDRB R1,[SP, #+4] \ 0000011C 5C2494E5 LDR R2,[R4, #+1116] \ 00000120 FE1001E2 AND R1,R1,#0xFE \ 00000124 012002E2 AND R2,R2,#0x1 \ 00000128 011082E1 ORR R1,R2,R1 \ 0000012C 0410CDE5 STRB R1,[SP, #+4] \ 00000130 0520A0E3 MOV R2,#+5 \ 00000134 0D10A0E1 MOV R1,SP \ 00000138 0C0000EF SWI +12 1043 fclose(f,&err); \ 0000013C 08108DE2 ADD R1,SP,#+8 \ 00000140 0500A0E1 MOV R0,R5 \ 00000144 0D0000EF SWI +13 1044 } 1045 } \ ??WriteDefSettings_0: \ 00000148 8CD08DE2 ADD SP,SP,#+140 ;; stack cleaning \ 0000014C 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 D0D04DE2 SUB SP,SP,#+208 \ 00000008 0040A0E1 MOV R4,R0 1085 if ((!IsCalling()) && ( Is_Sounds_Enabled || ExtSndMode_flag)) \ 0000000C 6E0000EF SWI +110 \ 00000010 000050E3 CMP R0,#+0 \ 00000014 4400001A BNE ??Play_0 \ 00000018 ........ LDR R0,??DataTable62 ;; HeaderShot \ 0000001C 741390E5 LDR R1,[R0, #+884] \ 00000020 000051E3 CMP R1,#+0 \ 00000024 7C149005 LDREQ R1,[R0, #+1148] \ 00000028 00005103 CMPEQ R1,#+0 \ 0000002C 3E00000A BEQ ??Play_0 1086 { 1087 ExtSndMode_flag = 0; \ 00000030 0050A0E3 MOV R5,#+0 \ 00000034 7C5480E5 STR R5,[R0, #+1148] 1088 FSTATS fstats; 1089 unsigned int err; 1090 if (GetFileStats(fname,&fstats,&err)!=-1) \ 00000038 0D20A0E1 MOV R2,SP \ 0000003C A8108DE2 ADD R1,SP,#+168 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 840000EF SWI +132 \ 00000048 010070E3 CMN R0,#+1 \ 0000004C 3600000A 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 28008DE2 ADD R0,SP,#+40 \ 00000098 160100EF SWI +278 1099 s[p-fname]='\0'; \ 0000009C 28008DE2 ADD R0,SP,#+40 \ 000000A0 0050C8E7 STRB R5,[R8, +R0] 1100 str_2ws(sndPath,s,128); \ 000000A4 8020A0E3 MOV R2,#+128 \ 000000A8 28108DE2 ADD R1,SP,#+40 \ 000000AC 0600A0E1 MOV R0,R6 \ 000000B0 6C0100EF SWI +364 1101 1102 zeromem(&_sfo1,sizeof(PLAYFILE_OPT)); \ 000000B4 2410A0E3 MOV R1,#+36 \ 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 6C209FE5 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] 1107 #ifdef NEWSGOLD 1108 _sfo1.unk6=1; 1109 _sfo1.unk7=1; 1110 _sfo1.unk9=2; \ 000000D8 0210A0E3 MOV R1,#+2 \ 000000DC 10208DE5 STR R2,[SP, #+16] \ 000000E0 18008DE5 STR R0,[SP, #+24] \ 000000E4 1C008DE5 STR R0,[SP, #+28] \ 000000E8 24108DE5 STR R1,[SP, #+36] 1111 PlayFile(0x10, sndPath, sndFName, GBS_GetCurCepid(), MSG_PLAYFILE_REPORT, &_sfo1); \ 000000EC 450100EF SWI +325 \ 000000F0 04108DE2 ADD R1,SP,#+4 \ 000000F4 02002DE9 PUSH {R1} \ 000000F8 0030A0E1 MOV R3,R0 \ 000000FC 0720A0E1 MOV R2,R7 \ 00000100 1000A0E3 MOV R0,#+16 \ 00000104 BC10A0E3 MOV R1,#+188 \ 00000108 701C81E3 ORR R1,R1,#0x7000 \ 0000010C 02002DE9 PUSH {R1} \ 00000110 0610A0E1 MOV R1,R6 \ 00000114 4A0000EF SWI +74 1112 #else 1113 #ifdef X75 1114 _sfo1.unk4=0x80000000; 1115 _sfo1.unk5=1; 1116 PlayFile(0xC, sndPath, sndFName, 0,GBS_GetCurCepid(), MSG_PLAYFILE_REPORT, &_sfo1); 1117 #else 1118 _sfo1.unk5=1; 1119 PlayFile(0xC, sndPath, sndFName, GBS_GetCurCepid(), MSG_PLAYFILE_REPORT, &_sfo1); 1120 #endif 1121 #endif 1122 FreeWS(sndPath); \ 00000118 0600A0E1 MOV R0,R6 \ 0000011C 290100EF SWI +297 1123 FreeWS(sndFName); \ 00000120 0700A0E1 MOV R0,R7 \ 00000124 290100EF SWI +297 \ 00000128 08D08DE2 ADD SP,SP,#+8 1124 } 1125 } 1126 } \ ??Play_0: \ 0000012C D0D08DE2 ADD SP,SP,#+208 ;; stack cleaning \ 00000130 F081BDE8 POP {R4-R8,PC} ;; return \ ??Play_1: \ 00000134 ........ 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 ;; HeaderShot \ 00000008 700394E5 LDR R0,[R4, #+880] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0400001A BNE ??start_vibra_0 \ 00000014 6C0394E5 LDR R0,[R4, #+876] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 70049415 LDRNE R0,[R4, #+1136] \ 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 6400A0E3 MOV R0,#+100 \ 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 ;; HeaderShot \ 00000010 681390E5 LDR R1,[R0, #+872] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 681380E5 STR R1,[R0, #+872] \ 0000001C 0080BD08 POPEQ {PC} 1150 { 1151 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000024 6410A0E3 MOV R1,#+100 \ 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 ;; HeaderShot \ 00000008 840494E5 LDR R0,[R4, #+1156] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0000000A BEQ ??FreeTemplates_0 \ 00000014 150000EF SWI +21 1182 if (templates_chars) mfree(templates_chars); \ ??FreeTemplates_0: \ 00000018 800494E5 LDR R0,[R4, #+1152] \ 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 840484E5 STR R0,[R4, #+1156] 1184 templates_chars=NULL; \ 00000030 800484E5 STR R0,[R4, #+1152] 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,??DataTable69 ;; TEMPLATES_PATH \ 00000018 2C008DE2 ADD R0,SP,#+44 \ 0000001C 1A0000EF SWI +26 \ 00000020 2C008DE2 ADD R0,SP,#+44 \ 00000024 1B0000EF SWI +27 \ 00000028 0070A0E1 MOV R7,R0 \ 0000002C 2C008DE2 ADD R0,SP,#+44 \ 00000030 005087E0 ADD R5,R7,R0 \ 00000034 0420A0E1 MOV R2,R4 \ 00000038 081086E2 ADD R1,R6,#+8 \ 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 0610A0E1 MOV R1,R6 \ 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 ;; HeaderShot \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 800484E5 STR R0,[R4, #+1152] \ 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 840494E5 LDR R0,[R4, #+1156] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 840484E5 STR R0,[R4, #+1156] \ 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 ;; HeaderShot \ 00000008 ........ LDR R5,??DataTable59 ;; lgpData \ 0000000C 9400A0E3 MOV R0,#+148 \ 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 B400A0E3 MOV R0,#+180 \ 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 E400A0E3 MOV R0,#+228 \ 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 0400A0E3 MOV R0,#+4 \ 00000050 6C0D80E3 ORR R0,R0,#0x1B00 \ 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 ;; HeaderShot + 1860 \ 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 ;; HeaderShot \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 4400A0E3 MOV R0,#+68 \ 00000010 700E80E3 ORR R0,R0,#0x700 \ 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 4447C035 STRBCC R4,[R0, #+1860] 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 ;; HeaderShot \ 00000008 4400A0E3 MOV R0,#+68 \ 0000000C 700E80E3 ORR R0,R0,#0x700 \ 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 4317C015 STRBNE R1,[R0, #+1859] 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 ;; HeaderShot + 852 \ 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,??DataTable73 ;; HeaderShot 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 8C4485E5 STR R4,[R5, #+1164] \ 0000001C 7400A0E3 MOV R0,#+116 \ 00000020 680D80E3 ORR R0,R0,#0x1A00 \ 00000024 056080E0 ADD R6,R0,R5 \ 00000028 0600A0E1 MOV R0,R6 \ 0000002C 8C0100EF SWI +396 \ 00000030 E400A0E3 MOV R0,#+228 \ 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 AC4485E5 STR R4,[R5, #+1196] 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 BC4485E5 STR R4,[R5, #+1212] \ 00000068 7C8100EF SWI +33148 \ 0000006C 004080E5 STR R4,[R0, #+0] \ 00000070 0900A0E1 MOV R0,R9 \ 00000074 ........ BL GetHostsCount \ 00000078 C41495E5 LDR R1,[R5, #+1220] \ 0000007C 010040E2 SUB R0,R0,#+1 \ 00000080 010050E1 CMP R0,R1 \ 00000084 C44485B5 STRLT R4,[R5, #+1220] \ 00000088 C40495E5 LDR R0,[R5, #+1220] \ 0000008C 18208DE2 ADD R2,SP,#+24 \ 00000090 0910A0E1 MOV R1,R9 \ 00000094 ........ BL GetHost \ 00000098 C40495E5 LDR R0,[R5, #+1220] \ 0000009C 0910A0E1 MOV R1,R9 \ 000000A0 ........ BL GetPort \ 000000A4 0090A0E1 MOV R9,R0 \ 000000A8 C40495E5 LDR R0,[R5, #+1220] \ 000000AC 2410A0E3 MOV R1,#+36 \ 000000B0 010080E2 ADD R0,R0,#+1 \ 000000B4 C40485E5 STR R0,[R5, #+1220] \ 000000B8 6C1D81E3 ORR R1,R1,#0x1B00 \ 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 BC00A0E3 MOV R0,#+188 \ 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 BC0495E5 LDR R0,[R5, #+1212] \ 00000148 000050E3 CMP R0,#+0 \ 0000014C 1000000A BEQ ??create_connect_5 1659 { 1660 host_counter--; \ 00000150 C40495E5 LDR R0,[R5, #+1220] \ 00000154 010040E2 SUB R0,R0,#+1 \ 00000158 C40485E5 STR R0,[R5, #+1220] 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 C04485E5 STR R4,[R5, #+1216] 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 900485E5 STR R0,[R5, #+1168] 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 900495E5 LDR R0,[R5, #+1168] \ 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 8C7485E5 STR R7,[R5, #+1164] 1693 TOTALRECEIVED=0; \ 00000268 944485E5 STR R4,[R5, #+1172] 1694 TOTALSENDED=0; \ 0000026C 984485E5 STR R4,[R5, #+1176] 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 900495E5 LDR R0,[R5, #+1168] \ 00000280 760100EF SWI +374 1700 sock=-1; \ 00000284 90B485E5 STR R11,[R5, #+1168] 1701 LockSched(); \ 00000288 460100EF SWI +326 1702 ShowMSG(1,(int)lgpData[LGP_MsgCantConn]); \ 0000028C 6C009FE5 LDR R0,??create_connect_0+0x8 ;; lgpData + 324 \ 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 + 328 \ 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 C00495E5 LDR R0,[R5, #+1216] \ 000002D0 010040E2 SUB R0,R0,#+1 \ 000002D4 C00485E5 STR R0,[R5, #+1216] 1720 LockSched(); \ 000002D8 460100EF SWI +326 1721 ShowMSG(1,(int)lgpData[LGP_MsgHostNFnd]); \ 000002DC 24009FE5 LDR R0,??create_connect_0+0x10 ;; lgpData + 332 \ 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 + 324 \ 00000304 ........ DC32 lgpData + 328 \ 00000308 ........ DC32 lgpData + 332 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,??DataTable73 ;; HeaderShot \ 00000008 A80494E5 LDR R0,[R4, #+1192] \ 0000000C 150000EF SWI +21 1733 sendq_p=NULL; \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 A80484E5 STR R0,[R4, #+1192] 1734 sendq_l=NULL; \ 00000018 A40484E5 STR R0,[R4, #+1188] 1735 #ifdef GUI_INTERFACE 1736 SMART_REDRAW(); \ 0000001C 1040BDE8 POP {R4,LR} ;; Pop \ 00000020 ........ B SMART_REDRAW ;; tailcall 1737 #endif 1738 #ifdef SEND_TIMER 1739 GBS_DelTimer(&send_tmr); 1740 #endif 1741 } 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,??DataTable73 ;; HeaderShot \ 00000008 900494E5 LDR R0,[R4, #+1168] \ 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 900494E5 LDR R0,[R4, #+1168] \ 00000020 760100EF SWI +374 1794 } 1795 1796 // if(!Is_Pleer_Run()) 1797 Play(sndLostConn); \ ??end_socket_0: \ 00000024 04009FE5 LDR R0,??end_socket_1 ;; sndLostConn \ 00000028 1040BDE8 POP {R4,LR} ;; Pop \ 0000002C ........ B Play ;; tailcall \ ??end_socket_1: \ 00000030 ........ DC32 sndLostConn 1798 #ifdef SEND_TIMER 1799 GBS_DelTimer(&send_tmr); 1800 #endif 1801 } 1802 1803 #ifdef SEND_TIMER 1804 static void resend(void) 1805 { 1806 void SendAnswer(int dummy, TPKT *p); 1807 SUBPROC((void*)SendAnswer,0,0); 1808 } 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,??DataTable69 ;; 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 9C419FE5 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,??DataTable73 ;; HeaderShot \ 0000003C 8C0496E5 LDR R0,[R6, #+1164] \ 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 2600000A 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 980496E5 LDR R0,[R6, #+1176] \ 00000068 000087E0 ADD R0,R7,R0 \ 0000006C 980486E5 STR R0,[R6, #+1176] 1884 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000070 A00496E5 LDR R0,[R6, #+1184] \ 00000074 000087E0 ADD R0,R7,R0 \ 00000078 A00486E5 STR R0,[R6, #+1184] 1885 //Проверяем, не надо ли добавить в очередь 1886 if (sendq_p) \ 0000007C A80496E5 LDR R0,[R6, #+1192] \ 00000080 000050E3 CMP R0,#+0 \ 00000084 0F00000A BEQ ??SendAnswer_4 1887 { 1888 //Есть очередь, добавляем в нее 1889 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 00000088 A41496E5 LDR R1,[R6, #+1188] \ 0000008C 011087E0 ADD R1,R7,R1 \ 00000090 BA0000EF SWI +186 \ 00000094 A80486E5 STR R0,[R6, #+1192] 1890 memcpy((char *)sendq_p+sendq_l,p,j); \ 00000098 A40496E5 LDR R0,[R6, #+1188] \ 0000009C A83496E5 LDR R3,[R6, #+1192] \ 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 A40496E5 LDR R0,[R6, #+1188] \ 000000BC 000087E0 ADD R0,R7,R0 \ 000000C0 A40486E5 STR R0,[R6, #+1188] 1893 return; \ 000000C4 F783BDE8 POP {R0-R2,R4-R9,PC} 1894 } 1895 sendq_p=p; \ ??SendAnswer_4: \ 000000C8 A85486E5 STR R5,[R6, #+1192] 1896 sendq_l=j; \ 000000CC A47486E5 STR R7,[R6, #+1188] \ 000000D0 080000EA 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); //Удалили переданное \ ??SendAnswer_5: \ 000000D4 A40496E5 LDR R0,[R6, #+1188] \ 000000D8 072040E0 SUB R2,R0,R7 \ 000000DC A42486E5 STR R2,[R6, #+1188] \ 000000E0 A80496E5 LDR R0,[R6, #+1192] \ 000000E4 001087E0 ADD R1,R7,R0 \ 000000E8 1E0100EF SWI +286 1925 if (j` 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,??DataTable71 ;; 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,??DataTable72 ;; 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,??DataTable73 ;; HeaderShot \ 00000008 98D04DE2 SUB SP,SP,#+152 \ 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 8C0495E5 LDR R0,[R5, #+1164] \ 00000014 889495E5 LDR R9,[R5, #+1160] \ 00000018 18108DE2 ADD R1,SP,#+24 \ 0000001C 04108DE5 STR R1,[SP, #+4] \ 00000020 020050E3 CMP R0,#+2 \ 00000024 BC0100BA BLT ??get_answer_1 \ 00000028 0A0079E3 CMN R9,#+10 \ 0000002C BA01000A BEQ ??get_answer_1 1994 if (i==EOP) return; 1995 j=recv(sock,rb,sizeof(rb),0); \ 00000030 900495E5 LDR R0,[R5, #+1168] \ 00000034 F0669FE5 LDR R6,??get_answer_2+0x4 ;; RXbuf \ 00000038 0030A0E3 MOV R3,#+0 \ 0000003C 702DA0E3 MOV R2,#+7168 \ 00000040 780100EF SWI +376 \ 00000044 00008DE5 STR R0,[SP, #+0] \ 00000048 AEA0A0E3 MOV R10,#+174 \ 0000004C DEAC8AE3 ORR R10,R10,#0xDE00 \ 00000050 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: \ 00000054 0400A0E1 MOV R0,R4 \ 00000058 140000EF SWI +20 \ 0000005C 00B0A0E1 MOV R11,R0 2211 memcpy(p,&RXbuf,n); \ 00000060 0420A0E1 MOV R2,R4 \ 00000064 0610A0E1 MOV R1,R6 \ 00000068 1E0100EF SWI +286 2212 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 0000006C 900495E5 LDR R0,[R5, #+1168] \ 00000070 0B30A0E1 MOV R3,R11 \ 00000074 01002DE9 PUSH {R0} \ 00000078 0020A0E3 MOV R2,#+0 \ 0000007C 0A10A0E1 MOV R1,R10 \ 00000080 0900A0E1 MOV R0,R9 \ 00000084 000100EF SWI +256 2213 2214 snprintf(logmsg,255,"T_LASTPRIVACY %d %s",n,RXbuf.data); \ 00000088 080086E2 ADD R0,R6,#+8 \ 0000008C 01002DE9 PUSH {R0} \ 00000090 0430A0E1 MOV R3,R4 \ 00000094 F42087E2 ADD R2,R7,#+244 \ ??get_answer_5: \ 00000098 FF10A0E3 MOV R1,#+255 \ 0000009C 0800A0E1 MOV R0,R8 \ 000000A0 1B0100EF SWI +283 \ ??get_answer_6: \ 000000A4 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: \ 000000A8 0600A0E1 MOV R0,R6 \ 000000AC ........ _BLF ad,??ad??rA 2232 i=-(int)sizeof(PKT); //А может еще есть данные \ 000000B0 0790E0E3 MVN R9,#+7 \ ??get_answer_3: \ 000000B4 00009DE5 LDR R0,[SP, #+0] \ 000000B8 010050E3 CMP R0,#+1 \ 000000BC 950100BA BLT ??get_answer_8 \ 000000C0 000059E3 CMP R9,#+0 \ 000000C4 0E00005A BPL ??get_answer_9 \ 000000C8 04109DE5 LDR R1,[SP, #+4] \ 000000CC 004069E2 RSB R4,R9,#+0 \ 000000D0 040050E1 CMP R0,R4 \ 000000D4 0040A0B1 MOVLT R4,R0 \ 000000D8 0420A0E1 MOV R2,R4 \ 000000DC 060089E0 ADD R0,R9,R6 \ 000000E0 080080E2 ADD R0,R0,#+8 \ 000000E4 1E0100EF SWI +286 \ 000000E8 00109DE5 LDR R1,[SP, #+0] \ 000000EC 099084E0 ADD R9,R4,R9 \ 000000F0 041041E0 SUB R1,R1,R4 \ 000000F4 00108DE5 STR R1,[SP, #+0] \ 000000F8 04109DE5 LDR R1,[SP, #+4] \ 000000FC 011084E0 ADD R1,R4,R1 \ 00000100 04108DE5 STR R1,[SP, #+4] \ ??get_answer_9: \ 00000104 000059E3 CMP R9,#+0 \ 00000108 E9FFFF4A BMI ??get_answer_3 \ 0000010C B640D6E1 LDRH R4,[R6, #+6] \ 00000110 18769FE5 LDR R7,??get_answer_2+0x8 ;; `?` \ 00000114 E400A0E3 MOV R0,#+228 \ 00000118 5C0D80E3 ORR R0,R0,#0x1700 \ 0000011C 058080E0 ADD R8,R0,R5 \ 00000120 400C54E3 CMP R4,#+16384 \ 00000124 080000BA BLT ??get_answer_10 \ 00000128 0710A0E1 MOV R1,R7 \ 0000012C 0800A0E1 MOV R0,R8 \ 00000130 1A0000EF SWI +26 \ 00000134 ........ BL end_socket \ 00000138 0900E0E3 MVN R0,#+9 \ 0000013C 880485E5 STR R0,[R5, #+1160] \ 00000140 98D08DE2 ADD SP,SP,#+152 \ 00000144 70DD8DE2 ADD SP,SP,#+7168 \ 00000148 F08FBDE8 POP {R4-R11,PC} \ ??get_answer_10: \ 0000014C 094044E0 SUB R4,R4,R9 \ 00000150 010054E3 CMP R4,#+1 \ 00000154 0E0000BA BLT ??get_answer_11 \ 00000158 00009DE5 LDR R0,[SP, #+0] \ 0000015C 04109DE5 LDR R1,[SP, #+4] \ 00000160 040050E1 CMP R0,R4 \ 00000164 0040A0B1 MOVLT R4,R0 \ 00000168 0420A0E1 MOV R2,R4 \ 0000016C 060089E0 ADD R0,R9,R6 \ 00000170 080080E2 ADD R0,R0,#+8 \ 00000174 1E0100EF SWI +286 \ 00000178 00109DE5 LDR R1,[SP, #+0] \ 0000017C 099084E0 ADD R9,R4,R9 \ 00000180 041041E0 SUB R1,R1,R4 \ 00000184 00108DE5 STR R1,[SP, #+0] \ 00000188 04109DE5 LDR R1,[SP, #+4] \ 0000018C 011084E0 ADD R1,R4,R1 \ 00000190 04108DE5 STR R1,[SP, #+4] \ ??get_answer_11: \ 00000194 B600D6E1 LDRH R0,[R6, #+6] \ 00000198 090050E1 CMP R0,R9 \ 0000019C C4FFFF1A BNE ??get_answer_3 \ 000001A0 940495E5 LDR R0,[R5, #+1172] \ 000001A4 084089E2 ADD R4,R9,#+8 \ 000001A8 000084E0 ADD R0,R4,R0 \ 000001AC 940485E5 STR R0,[R5, #+1172] \ 000001B0 9C0495E5 LDR R0,[R5, #+1180] \ 000001B4 0010A0E3 MOV R1,#+0 \ 000001B8 000084E0 ADD R0,R4,R0 \ 000001BC 9C0485E5 STR R0,[R5, #+1180] \ 000001C0 060089E0 ADD R0,R9,R6 \ 000001C4 0810C0E5 STRB R1,[R0, #+8] \ 000001C8 0600A0E1 MOV R0,R6 \ 000001CC ........ _BLF aa,??aa??rA \ 000001D0 B410D6E1 LDRH R1,[R6, #+4] \ 000001D4 090089E2 ADD R0,R9,#+9 \ 000001D8 0990A0E3 MOV R9,#+9 \ 000001DC 429C89E3 ORR R9,R9,#0x4200 \ 000001E0 01B0A0E3 MOV R11,#+1 \ 000001E4 031041E2 SUB R1,R1,#+3 \ 000001E8 220051E3 CMP R1,#+34 \ 000001EC ADFFFF8A BHI ??get_answer_7 \ 000001F0 022F8FE2 ADR R2,??get_answer_0 \ 000001F4 8110A0E1 MOV R1,R1, LSL #+1 \ 000001F8 F12092E1 LDRSH R2,[R2, R1] \ 000001FC 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??get_answer_0: \ 00000200 9F001100A9FF DC16 +159,+17,+65449,+135 \ 8700 \ 00000208 2D00A9FF7200 DC16 +45,+65449,+114,+65449 \ A9FF \ 00000210 A9FFA9FFF400 DC16 +65449,+65449,+244,+65449 \ A9FF \ 00000218 A9FFFA000201 DC16 +65449,+250,+258,+65449 \ A9FF \ 00000220 14012D002D00 DC16 +276,+45,+45,+65449 \ A9FF \ 00000228 A9FFA9FF2D00 DC16 +65449,+65449,+45,+65449 \ A9FF \ 00000230 A9FFA9FFA9FF DC16 +65449,+65449,+65449,+65449 \ A9FF \ 00000238 94FFA9FFA9FF DC16 +65428,+65449,+65449,+65449 \ A9FF \ 00000240 A9FFA9FF7200 DC16 +65449,+65449,+114,+0 \ 0000 \ ??get_answer_12: \ 00000248 0040A0E1 MOV R4,R0 \ 0000024C 140000EF SWI +20 \ 00000250 00B0A0E1 MOV R11,R0 \ 00000254 0420A0E1 MOV R2,R4 \ 00000258 0610A0E1 MOV R1,R6 \ 0000025C 1E0100EF SWI +286 \ 00000260 900495E5 LDR R0,[R5, #+1168] \ 00000264 0B30A0E1 MOV R3,R11 \ 00000268 01002DE9 PUSH {R0} \ 0000026C 0020A0E3 MOV R2,#+0 \ 00000270 0A10A0E1 MOV R1,R10 \ 00000274 0900A0E1 MOV R0,R9 \ 00000278 000100EF SWI +256 \ 0000027C B0049FE5 LDR R0,??get_answer_2+0xC ;; sndStartup \ 00000280 ........ BL Play \ 00000284 083086E2 ADD R3,R6,#+8 \ 00000288 0C2087E2 ADD R2,R7,#+12 \ 0000028C FF10A0E3 MOV R1,#+255 \ 00000290 0800A0E1 MOV R0,R8 \ 00000294 1B0100EF SWI +283 \ 00000298 0300A0E3 MOV R0,#+3 \ 0000029C 8C0485E5 STR R0,[R5, #+1164] \ 000002A0 C40495E5 LDR R0,[R5, #+1220] \ 000002A4 010040E2 SUB R0,R0,#+1 \ 000002A8 C40485E5 STR R0,[R5, #+1220] \ 000002AC ........ BL SMART_REDRAW \ ??get_answer_13: \ 000002B0 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning \ 000002B4 7BFFFFEA B ??get_answer_7 \ ??get_answer_14: \ 000002B8 0040A0E1 MOV R4,R0 \ 000002BC 140000EF SWI +20 \ 000002C0 00B0A0E1 MOV R11,R0 \ 000002C4 0420A0E1 MOV R2,R4 \ 000002C8 0610A0E1 MOV R1,R6 \ 000002CC 1E0100EF SWI +286 \ 000002D0 900495E5 LDR R0,[R5, #+1168] \ 000002D4 0B30A0E1 MOV R3,R11 \ 000002D8 01002DE9 PUSH {R0} \ 000002DC 0020A0E3 MOV R2,#+0 \ 000002E0 0A10A0E1 MOV R1,R10 \ 000002E4 0900A0E1 MOV R0,R9 \ 000002E8 000100EF SWI +256 \ 000002EC B400D6E1 LDRH R0,[R6, #+4] \ 000002F0 04D08DE2 ADD SP,SP,#+4 \ 000002F4 190050E3 CMP R0,#+25 \ 000002F8 0700001A BNE ??get_answer_15 \ 000002FC 080086E2 ADD R0,R6,#+8 \ 00000300 01002DE9 PUSH {R0} \ 00000304 0430A0E1 MOV R3,R4 \ 00000308 182087E2 ADD R2,R7,#+24 \ 0000030C FF10A0E3 MOV R1,#+255 \ 00000310 0800A0E1 MOV R0,R8 \ 00000314 1B0100EF SWI +283 \ 00000318 04D08DE2 ADD SP,SP,#+4 \ ??get_answer_15: \ 0000031C B400D6E1 LDRH R0,[R6, #+4] \ 00000320 140050E3 CMP R0,#+20 \ 00000324 0700001A BNE ??get_answer_16 \ 00000328 080086E2 ADD R0,R6,#+8 \ 0000032C 01002DE9 PUSH {R0} \ 00000330 0430A0E1 MOV R3,R4 \ 00000334 2C2087E2 ADD R2,R7,#+44 \ 00000338 FF10A0E3 MOV R1,#+255 \ 0000033C 0800A0E1 MOV R0,R8 \ 00000340 1B0100EF SWI +283 \ 00000344 04D08DE2 ADD SP,SP,#+4 \ ??get_answer_16: \ 00000348 B400D6E1 LDRH R0,[R6, #+4] \ 0000034C 150050E3 CMP R0,#+21 \ 00000350 0700001A BNE ??get_answer_17 \ 00000354 080086E2 ADD R0,R6,#+8 \ 00000358 01002DE9 PUSH {R0} \ 0000035C 0430A0E1 MOV R3,R4 \ 00000360 3C2087E2 ADD R2,R7,#+60 \ 00000364 FF10A0E3 MOV R1,#+255 \ 00000368 0800A0E1 MOV R0,R8 \ 0000036C 1B0100EF SWI +283 \ 00000370 04D08DE2 ADD SP,SP,#+4 \ ??get_answer_17: \ 00000374 B400D6E1 LDRH R0,[R6, #+4] \ 00000378 070050E3 CMP R0,#+7 \ 0000037C 0700001A BNE ??get_answer_18 \ 00000380 080086E2 ADD R0,R6,#+8 \ 00000384 01002DE9 PUSH {R0} \ 00000388 0430A0E1 MOV R3,R4 \ 0000038C 502087E2 ADD R2,R7,#+80 \ 00000390 FF10A0E3 MOV R1,#+255 \ 00000394 0800A0E1 MOV R0,R8 \ 00000398 1B0100EF SWI +283 \ 0000039C 04D08DE2 ADD SP,SP,#+4 \ ??get_answer_18: \ 000003A0 B400D6E1 LDRH R0,[R6, #+4] \ 000003A4 240050E3 CMP R0,#+36 \ 000003A8 3EFFFF1A BNE ??get_answer_7 \ 000003AC 080086E2 ADD R0,R6,#+8 \ 000003B0 01002DE9 PUSH {R0} \ 000003B4 0430A0E1 MOV R3,R4 \ 000003B8 602087E2 ADD R2,R7,#+96 \ 000003BC FF10A0E3 MOV R1,#+255 \ 000003C0 0800A0E1 MOV R0,R8 \ 000003C4 1B0100EF SWI +283 \ 000003C8 B8FFFFEA B ??get_answer_13 \ ??get_answer_19: \ 000003CC 0400A0E1 MOV R0,R4 \ 000003D0 140000EF SWI +20 \ 000003D4 00B0A0E1 MOV R11,R0 \ 000003D8 0420A0E1 MOV R2,R4 \ 000003DC 0610A0E1 MOV R1,R6 \ 000003E0 1E0100EF SWI +286 \ 000003E4 B800D6E1 LDRH R0,[R6, #+8] \ 000003E8 742087E2 ADD R2,R7,#+116 \ 000003EC FF10A0E3 MOV R1,#+255 \ 000003F0 01002DE9 PUSH {R0} \ 000003F4 003096E5 LDR R3,[R6, #+0] \ 000003F8 0800A0E1 MOV R0,R8 \ 000003FC 1B0100EF SWI +283 \ 00000400 900495E5 LDR R0,[R5, #+1168] \ 00000404 0B30A0E1 MOV R3,R11 \ 00000408 01002DE9 PUSH {R0} \ 0000040C 0020A0E3 MOV R2,#+0 \ 00000410 0A10A0E1 MOV R1,R10 \ 00000414 0900A0E1 MOV R0,R9 \ 00000418 000100EF SWI +256 \ 0000041C 20FFFFEA B ??get_answer_6 \ ??get_answer_20: \ 00000420 A81087E2 ADD R1,R7,#+168 \ 00000424 080086E2 ADD R0,R6,#+8 \ 00000428 180100EF SWI +280 \ 0000042C 000050E3 CMP R0,#+0 \ 00000430 0400001A BNE ??get_answer_21 \ 00000434 BB1F8FE2 ADR R1,??get_answer_2 ;; "110" \ 00000438 080086E2 ADD R0,R6,#+8 \ 0000043C 180100EF SWI +280 \ 00000440 000050E3 CMP R0,#+0 \ 00000444 0600000A BEQ ??get_answer_22 \ ??get_answer_21: \ 00000448 883087E2 ADD R3,R7,#+136 \ 0000044C 802087E2 ADD R2,R7,#+128 \ 00000450 FF10A0E3 MOV R1,#+255 \ 00000454 0800A0E1 MOV R0,R8 \ 00000458 1B0100EF SWI +283 \ 0000045C 50B485E5 STR R11,[R5, #+1104] \ 00000460 040000EA B ??get_answer_23 \ ??get_answer_22: \ 00000464 083086E2 ADD R3,R6,#+8 \ 00000468 802087E2 ADD R2,R7,#+128 \ 0000046C FF10A0E3 MOV R1,#+255 \ 00000470 0800A0E1 MOV R0,R8 \ 00000474 1B0100EF SWI +283 \ ??get_answer_23: \ 00000478 ........ BL SMART_REDRAW \ 0000047C 09FFFFEA B ??get_answer_7 \ ??get_answer_24: \ 00000480 0040A0E1 MOV R4,R0 \ 00000484 140000EF SWI +20 \ 00000488 00B0A0E1 MOV R11,R0 \ 0000048C 0420A0E1 MOV R2,R4 \ 00000490 0610A0E1 MOV R1,R6 \ 00000494 1E0100EF SWI +286 \ 00000498 08008BE2 ADD R0,R11,#+8 \ 0000049C 030000EA B ??get_answer_25 \ ??get_answer_26: \ 000004A0 030051E3 CMP R1,#+3 \ 000004A4 2010A0B3 MOVLT R1,#+32 \ 000004A8 0010C0B5 STRBLT R1,[R0, #+0] \ 000004AC 010080E2 ADD R0,R0,#+1 \ ??get_answer_25: \ 000004B0 0010D0E5 LDRB R1,[R0, #+0] \ 000004B4 000051E3 CMP R1,#+0 \ 000004B8 F8FFFF1A BNE ??get_answer_26 \ 000004BC ........ LDR R4,??DataTable74 ;; sndMsg \ 000004C0 080086E2 ADD R0,R6,#+8 \ 000004C4 01002DE9 PUSH {R0} \ 000004C8 003096E5 LDR R3,[R6, #+0] \ 000004CC B82087E2 ADD R2,R7,#+184 \ 000004D0 FF10A0E3 MOV R1,#+255 \ 000004D4 0800A0E1 MOV R0,R8 \ 000004D8 1B0100EF SWI +283 \ 000004DC 940495E5 LDR R0,[R5, #+1172] \ 000004E0 ........ BL SendMSGACK \ 000004E4 900495E5 LDR R0,[R5, #+1168] \ 000004E8 0B30A0E1 MOV R3,R11 \ 000004EC 01002DE9 PUSH {R0} \ 000004F0 0020A0E3 MOV R2,#+0 \ 000004F4 0A10A0E1 MOV R1,R10 \ 000004F8 0900A0E1 MOV R0,R9 \ 000004FC 000100EF SWI +256 \ 00000500 ........ BL GotoFirstPosition \ 00000504 ........ BL SMART_REDRAW \ 00000508 8C0395E5 LDR R0,[R5, #+908] \ 0000050C 08D08DE2 ADD SP,SP,#+8 \ 00000510 000050E3 CMP R0,#+0 \ 00000514 2B00000A BEQ ??get_answer_27 \ 00000518 8010A0E3 MOV R1,#+128 \ 0000051C 18008DE2 ADD R0,SP,#+24 \ 00000520 700D80E2 ADD R0,R0,#+7168 \ 00000524 1D0100EF SWI +285 \ 00000528 0410A0E1 MOV R1,R4 \ 0000052C 18008DE2 ADD R0,SP,#+24 \ 00000530 700D80E2 ADD R0,R0,#+7168 \ 00000534 1A0000EF SWI +26 \ 00000538 18008DE2 ADD R0,SP,#+24 \ 0000053C 700D80E2 ADD R0,R0,#+7168 \ 00000540 1B0000EF SWI +27 \ 00000544 18108DE2 ADD R1,SP,#+24 \ 00000548 701D81E2 ADD R1,R1,#+7168 \ 0000054C 0110D0E7 LDRB R1,[R0, +R1] \ 00000550 5C0051E3 CMP R1,#+92 \ 00000554 0900000A BEQ ??get_answer_28 \ ??get_answer_29: \ 00000558 18108DE2 ADD R1,SP,#+24 \ 0000055C 701D81E2 ADD R1,R1,#+7168 \ 00000560 0020A0E3 MOV R2,#+0 \ 00000564 0120C0E7 STRB R2,[R0, +R1] \ 00000568 010040E2 SUB R0,R0,#+1 \ 0000056C 18108DE2 ADD R1,SP,#+24 \ 00000570 701D81E2 ADD R1,R1,#+7168 \ 00000574 0110D0E7 LDRB R1,[R0, +R1] \ 00000578 5C0051E3 CMP R1,#+92 \ 0000057C F5FFFF1A BNE ??get_answer_29 \ ??get_answer_28: \ 00000580 18008DE2 ADD R0,SP,#+24 \ 00000584 700D80E2 ADD R0,R0,#+7168 \ 00000588 1B0000EF SWI +27 \ 0000058C 002096E5 LDR R2,[R6, #+0] \ 00000590 C41087E2 ADD R1,R7,#+196 \ 00000594 18308DE2 ADD R3,SP,#+24 \ 00000598 703D83E2 ADD R3,R3,#+7168 \ 0000059C 030080E0 ADD R0,R0,R3 \ 000005A0 160000EF SWI +22 \ 000005A4 18008DE2 ADD R0,SP,#+24 \ 000005A8 700D80E2 ADD R0,R0,#+7168 \ 000005AC ........ BL GetExtSnd \ 000005B0 0070B0E1 MOVS R7,R0 \ 000005B4 0300000A BEQ ??get_answer_27 \ 000005B8 ........ BL Play \ 000005BC 0700A0E1 MOV R0,R7 \ 000005C0 150000EF SWI +21 \ 000005C4 B7FEFFEA B ??get_answer_7 \ ??get_answer_27: \ 000005C8 0400A0E1 MOV R0,R4 \ ??get_answer_30: \ 000005CC ........ BL Play \ 000005D0 B4FEFFEA B ??get_answer_7 \ ??get_answer_31: \ 000005D4 460100EF SWI +326 \ 000005D8 081086E2 ADD R1,R6,#+8 \ 000005DC 0100A0E3 MOV R0,#+1 \ 000005E0 480100EF SWI +328 \ 000005E4 470100EF SWI +327 \ 000005E8 AEFEFFEA B ??get_answer_7 \ ??get_answer_32: \ 000005EC 0600A0E1 MOV R0,R6 \ 000005F0 ........ BL FindContactLOGQByAck \ 000005F4 000050E3 CMP R0,#+0 \ 000005F8 0300000A BEQ ??get_answer_33 \ 000005FC B8B385E5 STR R11,[R5, #+952] \ 00000600 ........ BL SMART_REDRAW \ 00000604 2C019FE5 LDR R0,??get_answer_2+0x10 ;; sndMsgSent \ 00000608 ........ BL Play \ ??get_answer_33: \ 0000060C 0A00A0E3 MOV R0,#+10 \ 00000610 140000EF SWI +20 \ 00000614 00B0A0E1 MOV R11,R0 \ 00000618 0A20A0E3 MOV R2,#+10 \ 0000061C 0610A0E1 MOV R1,R6 \ 00000620 1E0100EF SWI +286 \ 00000624 900495E5 LDR R0,[R5, #+1168] \ 00000628 0B30A0E1 MOV R3,R11 \ 0000062C 01002DE9 PUSH {R0} \ 00000630 0020A0E3 MOV R2,#+0 \ 00000634 0A10A0E1 MOV R1,R10 \ 00000638 0900A0E1 MOV R0,R9 \ 0000063C 000100EF SWI +256 \ 00000640 080086E2 ADD R0,R6,#+8 \ 00000644 01002DE9 PUSH {R0} \ 00000648 0A30A0E3 MOV R3,#+10 \ 0000064C CC2087E2 ADD R2,R7,#+204 \ 00000650 90FEFFEA B ??get_answer_5 \ ??get_answer_34: \ 00000654 08108DE2 ADD R1,SP,#+8 \ 00000658 10008DE2 ADD R0,SP,#+16 \ 0000065C B40000EF SWI +180 \ 00000660 0800DDE5 LDRB R0,[SP, #+8] \ 00000664 0920DDE5 LDRB R2,[SP, #+9] \ 00000668 E11EA0E3 MOV R1,#+3600 \ 0000066C 3C30A0E3 MOV R3,#+60 \ 00000670 930202E0 MUL R2,R3,R2 \ 00000674 912020E0 MLA R0,R1,R0,R2 \ 00000678 0A10DDE5 LDRB R1,[SP, #+10] \ 0000067C E12EA0E3 MOV R2,#+3600 \ 00000680 000081E0 ADD R0,R1,R0 \ 00000684 0810D6E5 LDRB R1,[R6, #+8] \ 00000688 920101E0 MUL R1,R2,R1 \ 0000068C E02087E2 ADD R2,R7,#+224 \ 00000690 010040E0 SUB R0,R0,R1 \ 00000694 0910D6E5 LDRB R1,[R6, #+9] \ 00000698 930101E0 MUL R1,R3,R1 \ 0000069C 010040E0 SUB R0,R0,R1 \ 000006A0 0A10D6E5 LDRB R1,[R6, #+10] \ 000006A4 013050E0 SUBS R3,R0,R1 \ 000006A8 500BA043 MOVMI R0,#+81920 \ 000006AC 460D8043 ORRMI R0,R0,#0x1180 \ 000006B0 03308040 ADDMI R3,R0,R3 \ 000006B4 010083E2 ADD R0,R3,#+1 \ 000006B8 01002DE9 PUSH {R0} \ 000006BC FF10A0E3 MOV R1,#+255 \ 000006C0 0800A0E1 MOV R0,R8 \ 000006C4 1B0100EF SWI +283 \ 000006C8 5C0395E5 LDR R0,[R5, #+860] \ 000006CC 350100EF SWI +309 \ 000006D0 000050E3 CMP R0,#+0 \ 000006D4 04D08DE2 ADD SP,SP,#+4 \ 000006D8 0700000A BEQ ??get_answer_35 \ 000006DC 0810A0E1 MOV R1,R8 \ 000006E0 4400A0E3 MOV R0,#+68 \ 000006E4 600E80E3 ORR R0,R0,#0x600 \ 000006E8 050080E0 ADD R0,R0,R5 \ 000006EC 1A0000EF SWI +26 \ 000006F0 0500A0E3 MOV R0,#+5 \ 000006F4 C40385E5 STR R0,[R5, #+964] \ 000006F8 040000EA B ??get_answer_36 \ ??get_answer_35: \ 000006FC 460100EF SWI +326 \ 00000700 0810A0E1 MOV R1,R8 \ 00000704 0100A0E3 MOV R0,#+1 \ 00000708 480100EF SWI +328 \ 0000070C 470100EF SWI +327 \ ??get_answer_36: \ 00000710 24009FE5 LDR R0,??get_answer_2+0x14 ;; pingsnd \ 00000714 ACFFFFEA B ??get_answer_30 2233 } 2234 } 2235 } 2236 RXstate=i; \ ??get_answer_8: \ 00000718 889485E5 STR R9,[R5, #+1160] 2237 // GBS_StartTimerProc(&tmr_dorecv,3000,dorecv); 2238 // SMART_REDRAW(); 2239 } \ ??get_answer_1: \ 0000071C 98D08DE2 ADD SP,SP,#+152 \ 00000720 70DD8DE2 ADD SP,SP,#+7168 \ 00000724 F08FBDE8 POP {R4-R11,PC} ;; return \ ??get_answer_2: \ 00000728 31313000 DC8 "110" \ 0000072C ........ DC32 RXbuf \ 00000730 ........ DC32 `?` \ 00000734 ........ DC32 sndStartup \ 00000738 ........ DC32 sndMsgSent \ 0000073C ........ 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,??DataTable116 ;; 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,??DataTable112 ;; HeaderShot \ 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 B40496E5 LDR R0,[R6, #+1204] \ 000001E4 000050E3 CMP R0,#+0 \ 000001E8 1C00000A BEQ ??AddStringToLog_9 2285 { 2286 void *data=FindGUIbyId(edchat_id,NULL); \ 000001EC B40496E5 LDR R0,[R6, #+1204] \ 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 90039605 LDREQ R0,[R6, #+912] \ 00000224 01008002 ADDEQ R0,R0,#+1 \ 00000228 90038605 STREQ R0,[R6, #+912] 2304 2305 if(NEW_MSG==1) \ 0000022C C80496E5 LDR R0,[R6, #+1224] \ 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 940396E5 LDR R0,[R6, #+916] \ 00000248 010080E2 ADD R0,R0,#+1 \ 0000024C 940386E5 STR R0,[R6, #+916] 2309 NEW_MSG=0; \ 00000250 0000A0E3 MOV R0,#+0 \ 00000254 C80486E5 STR R0,[R6, #+1224] 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,??DataTable112 ;; HeaderShot \ 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,??DataTable79 ;; ED_X_FONT_SIZE \ 00000040 ........ LDR R0,??DataTable101 ;; ED_H_FONT_SIZE \ 00000044 002092E5 LDR R2,[R2, #+0] \ 00000048 ........ LDR R1,??DataTable81 ;; 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,??DataTable82 ;; O_ED_X_FONT_SIZE \ 00000060 030010E2 ANDS R0,R0,#0x3 \ 00000064 009091E5 LDR R9,[R1, #+0] \ 00000068 ........ LDR R1,??DataTable83 ;; O_X_COLOR \ 0000006C 005091E5 LDR R5,[R1, #+0] \ 00000070 ........ LDR R1,??DataTable98 ;; 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,??DataTable94 ;; 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,??DataTable96 ;; O_I_COLOR \ ??AddMsgToChat_9: \ 000000B4 00B090E5 LDR R11,[R0, #+0] \ ??AddMsgToChat_10: \ 000000B8 ........ LDR R0,??DataTable100 ;; 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,??DataTable95 ;; 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,??DataTable97 ;; TO_COLOR \ 00000120 000000EA B ??AddMsgToChat_5 2388 } 2389 } 2390 else 2391 color=UNACK_COLOR; //Серый \ ??AddMsgToChat_6: \ 00000124 ........ LDR R0,??DataTable99 ;; 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 C80398E5 LDR R0,[R8, #+968] \ 00000150 101087E2 ADD R1,R7,#+16 \ 00000154 ........ _BLF ascii2ws,??ascii2ws??rA 2397 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000158 C83398E5 LDR R3,[R8, #+968] \ 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 C83398E5 LDR R3,[R8, #+968] \ 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 C80398E5 LDR R0,[R8, #+968] \ 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 C80398E5 LDR R0,[R8, #+968] \ 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 C83398E5 LDR R3,[R8, #+968] \ 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,??DataTable91 ;; O_ED_FONT_SIZE \ 0000027C ........ LDREQ R0,??DataTable92 ;; 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 B40498E5 LDR R0,[R8, #+1204] \ 00000334 350100EF SWI +309 \ 00000338 000050E3 CMP R0,#+0 \ 0000033C 0300000A BEQ ??AddMsgToChat_20 2449 total_unread--; \ 00000340 900398E5 LDR R0,[R8, #+912] \ 00000344 010040E2 SUB R0,R0,#+1 \ 00000348 900388E5 STR R0,[R8, #+912] \ 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 941398E5 LDR R1,[R8, #+916] \ 00000368 882090E5 LDR R2,[R0, #+136] \ 0000036C 021041E0 SUB R1,R1,R2 \ 00000370 941388E5 STR R1,[R8, #+916] 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,??DataTable98 ;; I_COLOR 2489 color=ACK_COLOR; //Зеленый \ 00000080 ........ LDREQ R0,??DataTable94 ;; 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,??DataTable95 ;; O_TO_COLOR \ 000000AC ........ LDREQ R0,??DataTable96 ;; O_I_COLOR \ 000000B0 040000EA B ??DrawAck_5 \ ??DrawAck_7: \ 000000B4 010050E3 CMP R0,#+1 \ 000000B8 ........ LDRNE R0,??DataTable97 ;; TO_COLOR \ 000000BC ........ LDREQ R0,??DataTable98 ;; I_COLOR \ 000000C0 000000EA B ??DrawAck_5 2497 else 2498 color=UNACK_COLOR; //Серый \ ??DrawAck_6: \ 000000C4 ........ LDR R0,??DataTable99 ;; 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,??DataTable100 ;; O_ED_H_FONT_SIZE \ 000000E4 ........ LDREQ R0,??DataTable101 ;; 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,??DataTable102 ;; HeaderShot + 1204 \ 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 ;; HeaderShot + 1108 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,??DataTable117 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 2535 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 HeaderShot + 1108 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,??DataTable112 ;; HeaderShot 2549 SUBPROC((void *)SendAnswer,0,p); \ 00000008 ........ LDR R6,??DataTable117 ;; 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 580498E5 LDR R0,[R8, #+1112] \ 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 580498E5 LDR R0,[R8, #+1112] \ 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 580498E5 LDR R0,[R8, #+1112] \ 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,??DataTable112 ;; HeaderShot \ 00000004 00402DE9 PUSH {LR} \ 00000008 4C1490E5 LDR R1,[R0, #+1100] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 2566 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R2,??DataTable107 ;; Canvas \ 00000018 C91FA0E3 MOV R1,#+804 \ 0000001C A33F82E2 ADD R3,R2,#+652 2567 gipc.name_from=ipc_my_name; \ 00000020 9B2F82E2 ADD R2,R2,#+620 \ 00000024 282380E5 STR R2,[R0, #+808] 2568 gipc.data=(void *)maincsm_id; \ 00000028 582390E5 LDR R2,[R0, #+856] \ 0000002C 003081E7 STR R3,[R1, +R0] \ 00000030 2C2380E5 STR R2,[R0, #+812] 2569 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 00000034 003081E0 ADD R3,R1,R0 \ 00000038 0220A0E3 MOV R2,#+2 \ 0000003C B010A0E3 MOV R1,#+176 \ 00000040 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000044 0900A0E3 MOV R0,#+9 \ 00000048 420C80E3 ORR R0,R0,#0x4200 \ 0000004C 000100EF SWI +256 2570 } \ 00000050 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,??DataTable112 ;; HeaderShot \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C B40495E5 LDR R0,[R5, #+1204] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 2575 { 2576 void *data=FindGUIbyId(edchat_id,NULL); \ 00000018 B40495E5 LDR R0,[R5, #+1204] \ 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 CC0485E5 STR R0,[R5, #+1228] \ 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 B40495E5 LDR R0,[R5, #+1204] \ 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,??DataTable109 ;; 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 E40091E5 LDR R0,[R1, #+228] \ 0000002C 1EFF2FE1 BX LR 2635 case IS_OFFLINE : return lgpData[LGP_StOffline]; \ ??GetStatusByIconIndex_1: \ 00000030 E00091E5 LDR R0,[R1, #+224] \ 00000034 1EFF2FE1 BX LR 2636 case IS_INVISIBLE : return lgpData[LGP_StInvis]; \ ??GetStatusByIconIndex_3: \ 00000038 FC0091E5 LDR R0,[R1, #+252] \ 0000003C 1EFF2FE1 BX LR 2637 case IS_AWAY : return lgpData[LGP_StAway]; \ ??GetStatusByIconIndex_4: \ 00000040 E80091E5 LDR R0,[R1, #+232] \ 00000044 1EFF2FE1 BX LR 2638 case IS_NA : return lgpData[LGP_StNa]; \ ??GetStatusByIconIndex_5: \ 00000048 EC0091E5 LDR R0,[R1, #+236] \ 0000004C 1EFF2FE1 BX LR 2639 case IS_OCCUPIED: return lgpData[LGP_StOccup]; \ ??GetStatusByIconIndex_6: \ 00000050 F40091E5 LDR R0,[R1, #+244] \ 00000054 1EFF2FE1 BX LR 2640 case IS_DND : return lgpData[LGP_StDnd]; \ ??GetStatusByIconIndex_7: \ 00000058 F00091E5 LDR R0,[R1, #+240] \ 0000005C 1EFF2FE1 BX LR 2641 case IS_DEPRESSION : return lgpData[LGP_StDepression]; \ ??GetStatusByIconIndex_8: \ 00000060 000191E5 LDR R0,[R1, #+256] \ 00000064 1EFF2FE1 BX LR 2642 case IS_EVIL : return lgpData[LGP_StEvil]; \ ??GetStatusByIconIndex_9: \ 00000068 040191E5 LDR R0,[R1, #+260] \ 0000006C 1EFF2FE1 BX LR 2643 case IS_HOME : return lgpData[LGP_StHome]; \ ??GetStatusByIconIndex_10: \ 00000070 080191E5 LDR R0,[R1, #+264] \ 00000074 1EFF2FE1 BX LR 2644 case IS_LUNCH : return lgpData[LGP_StLunch]; \ ??GetStatusByIconIndex_11: \ 00000078 0C0191E5 LDR R0,[R1, #+268] \ 0000007C 1EFF2FE1 BX LR 2645 case IS_WORK : return lgpData[LGP_StWork]; \ ??GetStatusByIconIndex_12: \ 00000080 100191E5 LDR R0,[R1, #+272] \ 00000084 1EFF2FE1 BX LR 2646 case IS_FFC : return lgpData[LGP_StFfc]; \ ??GetStatusByIconIndex_13: \ 00000088 F80091E5 LDR R0,[R1, #+248] \ 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,??DataTable110 ;; TEMPLATES_PATH \ 00000004 F0432DE9 PUSH {R4-R9,LR} \ 00000008 E0509FE5 LDR R5,??GetCLV_0 ;; `?` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ LDR R0,??DataTable111 ;; 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,??DataTable112 ;; HeaderShot \ 00000008 0050A0E1 MOV R5,R0 \ 0000000C D00496E5 LDR R0,[R6, #+1232] \ 00000010 0070A0E3 MOV R7,#+0 \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0000A013 MOVNE R0,#+0 \ 0000001C D0048615 STRNE R0,[R6, #+1232] \ 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 640496E5 LDR R0,[R6, #+1124] \ 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 5C0496E5 LDR R0,[R6, #+1116] \ 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 5C0496E5 LDR R0,[R6, #+1116] \ 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 600496E5 LDR R0,[R6, #+1120] \ 00000088 ........ LDR R1,??DataTable115 ;; 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,??DataTable114 ;; `?` \ 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 143089B2 ADDLT R3,R9,#+20 \ 000000FC 1C3089A2 ADDGE R3,R9,#+28 \ ??AutoAnswer_4: \ 00000100 0420A0E1 MOV R2,R4 \ 00000104 0C1089E2 ADD R1,R9,#+12 \ 00000108 160000EF SWI +22 \ 0000010C 010000EA B ??AutoAnswer_5 2748 else strcpy(hour_text, empty_str); \ ??AutoAnswer_3: \ 00000110 0B1089E2 ADD R1,R9,#+11 \ 00000114 1A0000EF SWI +26 2749 2750 char *min_text = (m == 1 ? "минуту" :( (m > 1 && m < 5) ? "минуты" : "минут")); \ ??AutoAnswer_5: \ 00000118 01005AE3 CMP R10,#+1 \ 0000011C 24008902 ADDEQ R0,R9,#+36 \ 00000120 0500000A BEQ ??AutoAnswer_6 \ 00000124 02005AE3 CMP R10,#+2 \ 00000128 020000BA BLT ??AutoAnswer_7 \ 0000012C 05005AE3 CMP R10,#+5 \ 00000130 2C0089B2 ADDLT R0,R9,#+44 \ 00000134 000000BA BLT ??AutoAnswer_6 \ ??AutoAnswer_7: \ 00000138 340089E2 ADD R0,R9,#+52 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 F410A0E3 MOV R1,#+244 \ 00000140 601D81E3 ORR R1,R1,#0x1800 \ 00000144 064081E0 ADD R4,R1,R6 \ 00000148 7C1089E2 ADD R1,R9,#+124 \ 0000014C 02002DE9 PUSH {R1} \ 00000150 00082DE9 PUSH {R11} \ 00000154 01002DE9 PUSH {R0} \ 00000158 ........ LDR R0,??DataTable115 ;; 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 3C1089E2 ADD R1,R9,#+60 \ 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 F400A0E3 MOV R0,#+244 \ 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 600396E5 LDR R0,[R6, #+864] \ 000001F0 ........ LDR R3,??DataTable116 ;; I_str \ 000001F4 010080E2 ADD R0,R0,#+1 \ 000001F8 600386E5 STR R0,[R6, #+864] \ 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 842089A2 ADDGE R2,R9,#+132 \ 00000224 0500A0E1 MOV R0,R5 \ 00000228 ........ BL AddStringToLog 2761 2762 SUBPROC((void *)SendAnswer,0,p); \ 0000022C ........ LDR R0,??DataTable117 ;; 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,??DataTable135 ;; HeaderShot \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 B410D4E1 LDRH R1,[R4, #+4] \ 00000018 000094E5 LDR R0,[R4, #+0] \ 0000001C 44A0A0E3 MOV R10,#+68 \ 00000020 60AE8AE3 ORR R10,R10,#0x600 \ 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 B00497E5 LDR R0,[R7, #+1200] \ 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 B02497E5 LDR R2,[R7, #+1200] \ 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,??DataTable120 ;; 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 686387E5 STR R6,[R7, #+872] 2804 start_vibra(); \ 0000011C ........ BL start_vibra 2805 } 2806 FIRST_START = 1; \ ??ProcessPacket_9: \ 00000120 746487E5 STR R6,[R7, #+1140] 2807 GROUP_CACHE=0; \ 00000124 B08487E5 STR R8,[R7, #+1200] 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 A00397E5 LDR R0,[R7, #+928] \ 0000012C 000050E3 CMP R0,#+0 \ 00000130 0300001A BNE ??ProcessPacket_10 \ 00000134 5C0397E5 LDR R0,[R7, #+860] \ 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 A08387E5 STR R8,[R7, #+928] 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 B00487E5 STR R0,[R7, #+1200] \ 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 B00487E5 STR R0,[R7, #+1200] \ 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 B40497E5 LDR R0,[R7, #+1204] \ 00000208 000050E3 CMP R0,#+0 \ 0000020C 0F00000A BEQ ??ProcessPacket_19 2863 { 2864 void *data=FindGUIbyId(edchat_id,NULL); \ 00000210 B40497E5 LDR R0,[R7, #+1204] \ 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 A00397E5 LDR R0,[R7, #+928] \ 00000254 000050E3 CMP R0,#+0 \ 00000258 0300001A BNE ??ProcessPacket_22 2886 oldt=FindContactByN(clistm->curpos); \ 0000025C A40397E5 LDR R0,[R7, #+932] \ 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 6400A0E3 MOV R0,#+100 \ 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 ........ LDR R1,??DataTable121 ;; 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 780497E5 LDR R0,[R7, #+1144] \ 000003CC 000050E3 CMP R0,#+0 2928 { 2929 ExtSndMode_flag = 1;//то ставил флаг, чтоб играть независимо включен звук или нет... \ 000003D0 7C648715 STRNE R6,[R7, #+1148] 2930 goto p_extsnd; \ 000003D4 0400001A BNE ??ProcessPacket_26 2931 } 2932 if(/*ExtSndModeIndivd ||*/ (Is_Extd_Sound && Is_Sounds_Enabled))//расширенные звуки для каждого контакта \ ??ProcessPacket_25: \ 000003D8 8C0397E5 LDR R0,[R7, #+908] \ 000003DC 000050E3 CMP R0,#+0 \ 000003E0 74039715 LDRNE R0,[R7, #+884] \ 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 800397E5 LDR R0,[R7, #+896] \ 00000470 000050E3 CMP R0,#+0 \ 00000474 1300000A BEQ ??ProcessPacket_31 \ 00000478 54079FE5 LDR R0,??ProcessPacket_21+0x14 ;; 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 4C0087E5 STR R0,[R7, #+76] 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 600087E5 STR R0,[R7, #+96] \ 000004A4 B605D9E1 LDRH R0,[R9, #+86] \ 000004A8 680087E5 STR R0,[R7, #+104] 2959 popup[POPUP_ON].xiconf = t->xstate; 2960 popup[POPUP_ON].xicon = GetXIconByItem(t->xstate); \ 000004AC ........ _BLF GetXIconByItem,??GetXIconByItem??rA \ 000004B0 640087E5 STR R0,[R7, #+100] 2961 #endif 2962 sprintf(popup[POPUP_ON].name,PopupOnlineString,t->name); \ 000004B4 142089E2 ADD R2,R9,#+20 \ 000004B8 0B10A0E1 MOV R1,R11 \ 000004BC 0C0087E2 ADD R0,R7,#+12 \ 000004C0 160000EF SWI +22 2963 show_on_contact(); \ 000004C4 ........ BL show_on_contact 2964 } 2965 2966 if(Is_ILU_By_Online) \ ??ProcessPacket_31: \ 000004C8 880397E5 LDR R0,[R7, #+904] \ 000004CC 000050E3 CMP R0,#+0 \ 000004D0 0700000A BEQ ??ProcessPacket_32 2967 IlluminationOn(IllByONCantact,0,ILL_SEND_TMR,ILL_RECV_FADE); \ 000004D4 FC069FE5 LDR R0,??ProcessPacket_21+0x18 ;; ILL_RECV_FADE \ 000004D8 0010A0E3 MOV R1,#+0 \ 000004DC 003090E5 LDR R3,[R0, #+0] \ 000004E0 F4069FE5 LDR R0,??ProcessPacket_21+0x1C ;; ILL_SEND_TMR \ 000004E4 002090E5 LDR R2,[R0, #+0] \ 000004E8 F0069FE5 LDR R0,??ProcessPacket_21+0x20 ;; 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 E0069FE5 LDR R0,??ProcessPacket_21+0x24 ;; ON_OFF_TIME \ 00000500 B46387E5 STR R6,[R7, #+948] \ 00000504 000090E5 LDR R0,[R0, #+0] \ 00000508 A80387E5 STR R0,[R7, #+936] 2972 #ifndef DEBUG 2973 if(ShowLoadScreen == 0) \ 0000050C A00397E5 LDR R0,[R7, #+928] \ 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 AC069FE5 LDR R0,??ProcessPacket_21+0x24 ;; ON_OFF_TIME \ 00000534 000090E5 LDR R0,[R0, #+0] \ 00000538 A80387E5 STR R0,[R7, #+936] 2983 #endif 2984 if(Is_POPUP_On && isPopupOff) \ 0000053C 800397E5 LDR R0,[R7, #+896] \ 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 C00087E5 STR R0,[R7, #+192] 2988 #endif 2989 popup[POPUP_OFF].timer = POPUP_N; \ 00000564 1400A0E3 MOV R0,#+20 \ 00000568 AC0087E5 STR R0,[R7, #+172] 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 6C0087E2 ADD R0,R7,#+108 \ 00000578 160000EF SWI +22 2994 show_off_contact(); \ 0000057C ........ BL show_off_contact 2995 } 2996 Play(sndSrvMsg); \ ??ProcessPacket_33: \ 00000580 60069FE5 LDR R0,??ProcessPacket_21+0x28 ;; sndSrvMsg \ 00000584 ........ BL Play 2997 } 2998 } 2999 3000 if (edchat_id) \ ??ProcessPacket_18: \ 00000588 B40497E5 LDR R0,[R7, #+1204] \ 0000058C 000050E3 CMP R0,#+0 \ 00000590 0A00000A BEQ ??ProcessPacket_34 3001 { 3002 void *data=FindGUIbyId(edchat_id,NULL); \ 00000594 B40497E5 LDR R0,[R7, #+1204] \ 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 B40497E5 LDR R0,[R7, #+1204] \ 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 A00397E5 LDR R0,[R7, #+928] \ 000005C8 000050E3 CMP R0,#+0 \ 000005CC 7701001A BNE ??ProcessPacket_1 \ ??ProcessPacket_35: \ 000005D0 B86387E5 STR R6,[R7, #+952] \ 000005D4 750100EA B ??ProcessPacket_1 3018 #endif 3019 break; 3020 case T_RECVMSG: 3021 NEW_MSG=1; \ ??ProcessPacket_36: \ 000005D8 C86487E5 STR R6,[R7, #+1224] 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 BC0397E5 LDR R0,[R7, #+956] 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 BC0387E5 STR R0,[R7, #+956] \ 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 C40387E5 STR R0,[R7, #+964] 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 B02497E5 LDR R2,[R7, #+1200] \ 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 CF0FA0E3 MOV R0,#+828 \ 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 68038715 STRNE R0,[R7, #+872] 3061 else 3062 vibra_count=1; \ 00000738 68638705 STREQ R6,[R7, #+872] 3063 start_vibra(); \ 0000073C ........ BL start_vibra 3064 if(Is_Double_Vibra_On) Reminder_timer(); \ 00000740 6C0397E5 LDR R0,[R7, #+876] \ 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 80049FE5 LDR R0,??ProcessPacket_21+0x18 ;; ILL_RECV_FADE \ 00000754 003090E5 LDR R3,[R0, #+0] \ 00000758 8C049FE5 LDR R0,??ProcessPacket_21+0x2C ;; ILL_RECV_TMR \ 0000075C 002090E5 LDR R2,[R0, #+0] \ 00000760 88049FE5 LDR R0,??ProcessPacket_21+0x30 ;; ILL_KEYS_RECV \ 00000764 001090E5 LDR R1,[R0, #+0] \ 00000768 84049FE5 LDR R0,??ProcessPacket_21+0x34 ;; 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 800397E5 LDR R0,[R7, #+896] \ 00000810 08D08DE2 ADD SP,SP,#+8 \ 00000814 000050E3 CMP R0,#+0 \ 00000818 0B00000A BEQ ??ProcessPacket_42 \ 0000081C B0039FE5 LDR R0,??ProcessPacket_21+0x14 ;; 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 C0139FE5 LDR R1,??ProcessPacket_21+0x38 ;; PopupMsgString \ 00000834 142089E2 ADD R2,R9,#+20 \ 00000838 CC0087E2 ADD R0,R7,#+204 \ 0000083C 160000EF SWI +22 3092 popup[POPUP_MSG].timer = POPUP_N; \ 00000840 1400A0E3 MOV R0,#+20 \ 00000844 0C0187E5 STR R0,[R7, #+268] 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 581397E5 LDR R1,[R7, #+856] \ 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 581397E5 LDR R1,[R7, #+856] \ 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 B40497E5 LDR R0,[R7, #+1204] \ 00000914 000050E3 CMP R0,#+0 \ 00000918 2200000A BEQ ??ProcessPacket_47 3145 { 3146 void *data=FindGUIbyId(edchat_id,NULL); \ 0000091C B40497E5 LDR R0,[R7, #+1204] \ 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 CC0487E5 STR R0,[R7, #+1228] \ 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 54029FE5 LDR R0,??ProcessPacket_21+0x18 ;; ILL_RECV_FADE \ 00000980 003090E5 LDR R3,[R0, #+0] \ 00000984 50029FE5 LDR R0,??ProcessPacket_21+0x1C ;; ILL_SEND_TMR \ 00000988 002090E5 LDR R2,[R0, #+0] \ 0000098C 68029FE5 LDR R0,??ProcessPacket_21+0x3C ;; ILL_KEYS_SEND \ 00000990 001090E5 LDR R1,[R0, #+0] \ 00000994 64029FE5 LDR R0,??ProcessPacket_21+0x40 ;; ILL_DISP_SEND \ 00000998 000090E5 LDR R0,[R0, #+0] \ 0000099C ........ BL IlluminationOn 3165 #ifdef GUI_INTERFACE 3166 RefreshCL(); \ ??ProcessPacket_49: \ 000009A0 B86387E5 STR R6,[R7, #+952] 3167 SMART_REDRAW(); \ 000009A4 ........ BL SMART_REDRAW 3168 #endif 3169 } 3170 } 3171 } 3172 } 3173 } 3174 } 3175 #ifdef GUI_INTERFACE 3176 RefreshCL(); \ ??ProcessPacket_47: \ 000009A8 B86387E5 STR R6,[R7, #+952] 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 5C0397E5 LDR R0,[R7, #+860] \ 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 C40387E5 STR R0,[R7, #+964] \ 00000AB4 090000EA B ??ProcessPacket_53 3210 else 3211 #endif 3212 if(!edchat_id && strlen(p->data)) \ ??ProcessPacket_52: \ 00000AB8 B40497E5 LDR R0,[R7, #+1204] \ 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 5C0487E5 STR R0,[R7, #+1116] 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 PopupShow \ 00000BD8 ........ DC32 ILL_RECV_FADE \ 00000BDC ........ DC32 ILL_SEND_TMR \ 00000BE0 ........ DC32 IllByONCantact \ 00000BE4 ........ DC32 ON_OFF_TIME \ 00000BE8 ........ DC32 sndSrvMsg \ 00000BEC ........ DC32 ILL_RECV_TMR \ 00000BF0 ........ DC32 ILL_KEYS_RECV \ 00000BF4 ........ DC32 ILL_DISP_RECV \ 00000BF8 ........ DC32 PopupMsgString \ 00000BFC ........ DC32 ILL_KEYS_SEND \ 00000C00 ........ 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,??DataTable135 ;; HeaderShot \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C 8C0495E5 LDR R0,[R5, #+1164] \ 00000010 030050E3 CMP R0,#+3 \ 00000014 070000BA BLT ??process_active_timer_0 3250 { 3251 if (++tenseconds_to_ping>12) \ 00000018 B80495E5 LDR R0,[R5, #+1208] \ 0000001C 010080E2 ADD R0,R0,#+1 \ 00000020 B80485E5 STR R0,[R5, #+1208] \ 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 B84485E5 STR R4,[R5, #+1208] \ 00000034 710100EF SWI +369 3255 } 3256 } 3257 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_0: \ 00000038 ........ LDR R2,??DataTable129 ;; Canvas \ 0000003C CC0FA0E3 MOV R0,#+816 \ 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 341385E5 STR R1,[R5, #+820] 3259 tmr_gipc.data=NULL; \ 00000054 384385E5 STR R4,[R5, #+824] 3260 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_TENSECONDS,&tmr_gipc); \ 00000058 053080E0 ADD R3,R0,R5 \ 0000005C 0420A0E3 MOV R2,#+4 \ 00000060 B010A0E3 MOV R1,#+176 \ 00000064 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000068 0900A0E3 MOV R0,#+9 \ 0000006C 420C80E3 ORR R0,R0,#0x4200 \ 00000070 000100EF SWI +256 3261 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000074 ........ LDR R2,??DataTable130 ;; process_active_timer \ 00000078 871EA0E3 MOV R1,#+2160 \ 0000007C 8400A0E3 MOV R0,#+132 \ 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 \ In segment CODE, align 4, keep-with-next 3282 void SLI_On() 3283 { \ SLI_On: \ 00000000 00402DE9 PUSH {LR} 3284 void SLI_Off(); 3285 SLI_SetState(1); \ 00000004 0100A0E3 MOV R0,#+1 \ 00000008 360000EF SWI +54 3286 GBS_StartTimerProc(&sli_tmr,TMR_SECOND>>2, SLI_Off); \ 0000000C 0C209FE5 LDR R2,??SLI_On_0 ;; SLI_Off \ 00000010 ........ LDR R0,??DataTable132 ;; HeaderShot + 7076 \ 00000014 3610A0E3 MOV R1,#+54 \ 00000018 4D0000EF SWI +77 3287 } \ 0000001C 0080BDE8 POP {PC} ;; return \ ??SLI_On_0: \ 00000020 ........ DC32 SLI_Off 3288 \ In segment CODE, align 4, keep-with-next 3289 void SLI_Off() 3290 { \ SLI_Off: \ 00000000 00402DE9 PUSH {LR} 3291 SLI_SetState(2); \ 00000004 0200A0E3 MOV R0,#+2 \ 00000008 360000EF SWI +54 3292 GBS_StartTimerProc(&sli_tmr, TMR_SECOND>>2, SLI_On); \ 0000000C 0C209FE5 LDR R2,??SLI_Off_0 ;; SLI_On \ 00000010 ........ LDR R0,??DataTable132 ;; HeaderShot + 7076 \ 00000014 3610A0E3 MOV R1,#+54 \ 00000018 4D0000EF SWI +77 3293 } \ 0000001C 0080BDE8 POP {PC} ;; return \ ??SLI_Off_0: \ 00000020 ........ DC32 SLI_On 3294 3295 /* 3296 * Функция: SLI_check 3297 * Описание: Если есть неотвеченные сообщения, то запускает функцию мигания SLI 3298 * Параметры: Никаких 3299 * Возвращаемое значение: Ничего не возвращает 3300 */ \ In segment CODE, align 4, keep-with-next 3301 void SLI_check() 3302 { \ SLI_check: \ 00000000 10402DE9 PUSH {R4,LR} 3303 if(!Is_SLI_On) return; \ 00000004 ........ LDR R4,??DataTable135 ;; HeaderShot \ 00000008 840394E5 LDR R0,[R4, #+900] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 3304 GBS_DelTimer(&sli_tmr); \ 00000014 A400A0E3 MOV R0,#+164 \ 00000018 6C0D80E3 ORR R0,R0,#0x1B00 \ 0000001C 040080E0 ADD R0,R0,R4 \ 00000020 8C0100EF SWI +396 3305 if(total_unread) SLI_On(); \ 00000024 900394E5 LDR R0,[R4, #+912] \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 0100000A BEQ ??SLI_check_0 \ 00000030 1040BDE8 POP {R4,LR} ;; Pop \ 00000034 ........ B SLI_On ;; tailcall 3306 else SLI_SetState(0); \ ??SLI_check_0: \ 00000038 360000EF SWI +54 \ 0000003C 1080BDE8 POP {R4,PC} ;; return 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,??DataTable135 ;; HeaderShot \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 AC1380E5 STR R1,[R0, #+940] 3357 total_contact=0; \ 0000000C B01380E5 STR R1,[R0, #+944] 3358 t=(CLIST *)(&cltop); \ 00000010 D51F80E2 ADD R1,R0,#+852 \ 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 B02390E5 LDR R2,[R0, #+944] \ 00000030 012082E2 ADD R2,R2,#+1 \ 00000034 B02380E5 STR R2,[R0, #+944] 3364 if (t->state!=0xFFFF) online_contact++; \ 00000038 B425D1E1 LDRH R2,[R1, #+84] \ 0000003C 030052E1 CMP R2,R3 \ 00000040 AC239015 LDRNE R2,[R0, #+940] \ 00000044 01208212 ADDNE R2,R2,#+1 \ 00000048 AC238015 STRNE R2,[R0, #+940] 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 0160A0E1 MOV R6,R1 3382 IMGHDR screen = {0,0,8,""}; \ 00000008 60109FE5 LDR R1,??DoScreen_0 ;; `?` \ 0000000C 0CD04DE2 SUB SP,SP,#+12 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0250A0E1 MOV R5,R2 \ 00000018 8C0091E8 LDM R1,{R2,R3,R7} \ 0000001C 0D00A0E1 MOV R0,SP \ 00000020 8C0080E8 STM R0,{R2,R3,R7} 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 960800E0 MUL R0,R6,R8 \ 00000038 B080CDE1 STRH R8,[SP, #+0] \ 0000003C B260CDE1 STRH R6,[SP, #+2] \ 00000040 8060A0E1 LSL R6,R0,#+1 \ 00000044 0600A0E1 MOV R0,R6 \ 00000048 140000EF SWI +20 \ 0000004C 08008DE5 STR R0,[SP, #+8] 3388 ms += (ShiftY*2); 3389 memcpy(screen.bitmap, ms, ScrW*ScrH*2); \ 00000050 0620A0E1 MOV R2,R6 \ 00000054 851087E0 ADD R1,R7,R5, LSL #+1 \ 00000058 1E0100EF SWI +286 3390 return screen; \ 0000005C 0D00A0E1 MOV R0,SP \ 00000060 0E0090E8 LDM R0,{R1-R3} \ 00000064 0400A0E1 MOV R0,R4 \ 00000068 0E0084E8 STM R4,{R1-R3} \ 0000006C FE81BDE8 POP {R1-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,??DataTable135 ;; HeaderShot \ 00000010 5C1394E5 LDR R1,[R4, #+860] \ 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 A40394E5 LDR R0,[R4, #+932] \ 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,??DataTable140 ;; _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,??DataTable140 ;; _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,??DataTable165 ;; HeaderShot \ 00000004 00402DE9 PUSH {LR} \ 00000008 DC3491E5 LDR R3,[R1, #+1244] 3551 if (i) \ 0000000C 000053E3 CMP R3,#+0 \ 00000010 0080BD08 POPEQ {PC} 3552 { 3553 if (scroll_disp>=i) \ 00000014 D8C491E5 LDR R12,[R1, #+1240] \ 00000018 ........ LDR R2,??DataTable161 ;; scroll_timer_proc \ 0000001C C800A0E3 MOV R0,#+200 \ 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 D83481E5 STR R3,[R1, #+1240] 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 D8C491E5 LDR R12,[R1, #+1240] \ 00000044 03C08CE2 ADD R12,R12,#+3 \ 00000048 D8C481E5 STR R12,[R1, #+1240] 3561 GBS_StartTimerProc(&tmr_scroll,scroll_disp0;i-=2) \ 000000B8 0B00A0E1 MOV R0,R11 \ 000000BC C50100EF SWI +453 \ 000000C0 0040A0E1 MOV R4,R0 \ 000000C4 010054E3 CMP R4,#+1 \ 000000C8 14D08DE2 ADD SP,SP,#+20 \ 000000CC 120000BA BLT ??DrawSoftKeys_2 \ 000000D0 085047E0 SUB R5,R7,R8 \ 000000D4 027045E2 SUB R7,R5,#+2 3676 DrawRoundedFrame(0,scr_h-FntH-2,scr_w,scr_h-FntH+i+2,0,0,0,SoftBackgrClr,SoftBackgrClr); \ ??DrawSoftKeys_3: \ 000000D8 0900A0E1 MOV R0,R9 \ 000000DC 01002DE9 PUSH {R0} \ 000000E0 01002DE9 PUSH {R0} \ 000000E4 0620A0E1 MOV R2,R6 \ 000000E8 0710A0E1 MOV R1,R7 \ 000000EC 0000A0E3 MOV R0,#+0 \ 000000F0 01002DE9 PUSH {R0} \ 000000F4 01002DE9 PUSH {R0} \ 000000F8 01002DE9 PUSH {R0} \ 000000FC 050084E0 ADD R0,R4,R5 \ 00000100 023080E2 ADD R3,R0,#+2 \ 00000104 024044E2 SUB R4,R4,#+2 \ 00000108 0000A0E3 MOV R0,#+0 \ 0000010C 500100EF SWI +336 \ 00000110 010054E3 CMP R4,#+1 \ 00000114 14D08DE2 ADD SP,SP,#+20 \ 00000118 EEFFFFAA BGE ??DrawSoftKeys_3 3677 } 3678 #ifdef ELKA 3679 int ScrH = FntH+2; 3680 int HSIZE = (ScreenH()-FntH)*ScreenW(); \ ??DrawSoftKeys_2: \ 0000011C 898100EF SWI +33161 \ 00000120 084040E0 SUB R4,R0,R8 \ 00000124 888100EF SWI +33160 \ 00000128 900402E0 MUL R2,R0,R4 3681 SoftShot = DoScreen(ScrH, HSIZE); \ 0000012C 1C029FE5 LDR R0,??DrawSoftKeys_0+0x4 ;; SoftShot \ 00000130 021088E2 ADD R1,R8,#+2 \ 00000134 ........ BL DoScreen 3682 shot_soft++; \ 00000138 E0049AE5 LDR R0,[R10, #+1248] \ 0000013C 010080E2 ADD R0,R0,#+1 \ 00000140 E0048AE5 STR R0,[R10, #+1248] 3683 SMART_REDRAW(); \ 00000144 ........ BL SMART_REDRAW 3684 return; \ 00000148 FF8FBDE8 POP {R0-R11,PC} 3685 } 3686 else 3687 if(SoftBackgrClr[3]!=0) \ ??DrawSoftKeys_1: \ 0000014C 000050E3 CMP R0,#+0 \ 00000150 0400000A BEQ ??DrawSoftKeys_4 3688 DrwImage(&SoftShot,0,scr_h-FntH,0); \ 00000154 F4019FE5 LDR R0,??DrawSoftKeys_0+0x4 ;; SoftShot \ 00000158 0030A0E3 MOV R3,#+0 \ 0000015C 082047E0 SUB R2,R7,R8 \ 00000160 0010A0E3 MOV R1,#+0 \ 00000164 ........ BL DrwImage 3689 #endif 3690 3691 // return; 3692 3693 if(sendq_l)//Если есть не отправленные данные в буфере, то выведем вместо текста на правой клавише. \ ??DrawSoftKeys_4: \ 00000168 E4919FE5 LDR R9,??DrawSoftKeys_0+0x8 ;; SoftFontClr \ 0000016C 010047E2 SUB R0,R7,#+1 \ 00000170 088040E0 SUB R8,R0,R8 \ 00000174 A4049AE5 LDR R0,[R10, #+1188] \ 00000178 000050E3 CMP R0,#+0 \ 0000017C 1500000A BEQ ??DrawSoftKeys_5 3694 { 3695 sprintf(s,"Q: %d b",sendq_l); \ 00000180 A4249AE5 LDR R2,[R10, #+1188] \ 00000184 CC119FE5 LDR R1,??DrawSoftKeys_0+0xC ;; `?` + 76 \ 00000188 0400A0E1 MOV R0,R4 \ 0000018C 160000EF SWI +22 3696 DrawStr(s, scr_w - GetWidth(s,ClFont), scr_h-1-FntH, scr_w,scr_h,0,HeadFont,(char*)SoftFontClr,0); \ 00000190 0B10A0E1 MOV R1,R11 \ 00000194 0400A0E1 MOV R0,R4 \ 00000198 ........ BL GetWidth \ 0000019C 0010A0E3 MOV R1,#+0 \ 000001A0 02002DE9 PUSH {R1} \ 000001A4 0630A0E1 MOV R3,R6 \ 000001A8 0820A0E1 MOV R2,R8 \ 000001AC 0910A0E1 MOV R1,R9 \ 000001B0 02002DE9 PUSH {R1} \ 000001B4 0510A0E1 MOV R1,R5 \ 000001B8 02002DE9 PUSH {R1} \ 000001BC 0010A0E3 MOV R1,#+0 \ 000001C0 02002DE9 PUSH {R1} \ 000001C4 0710A0E1 MOV R1,R7 \ 000001C8 02002DE9 PUSH {R1} \ 000001CC 001046E0 SUB R1,R6,R0 \ 000001D0 0400A0E1 MOV R0,R4 \ 000001D4 100000EA B ??DrawSoftKeys_6 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_5: \ 000001D8 0C009DE5 LDR R0,[SP, #+12] \ 000001DC 0B10A0E1 MOV R1,R11 \ 000001E0 ........ BL GetWidth \ 000001E4 0010A0E3 MOV R1,#+0 \ 000001E8 02002DE9 PUSH {R1} \ 000001EC 0630A0E1 MOV R3,R6 \ 000001F0 0820A0E1 MOV R2,R8 \ 000001F4 0910A0E1 MOV R1,R9 \ 000001F8 02002DE9 PUSH {R1} \ 000001FC 0510A0E1 MOV R1,R5 \ 00000200 02002DE9 PUSH {R1} \ 00000204 0010A0E3 MOV R1,#+0 \ 00000208 02002DE9 PUSH {R1} \ 0000020C 0710A0E1 MOV R1,R7 \ 00000210 02002DE9 PUSH {R1} \ 00000214 001046E0 SUB R1,R6,R0 \ 00000218 20009DE5 LDR R0,[SP, #+32] 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_6: \ 0000021C 44B0A0E3 MOV R11,#+68 \ 00000220 ........ BL DrawStr \ 00000224 14D08DE2 ADD SP,SP,#+20 \ 00000228 0D10A0E1 MOV R1,SP \ 0000022C 0000A0E3 MOV R0,#+0 \ 00000230 B40000EF SWI +180 \ 00000234 0130DDE5 LDRB R3,[SP, #+1] \ 00000238 0020DDE5 LDRB R2,[SP, #+0] \ 0000023C ........ LDR R1,??DataTable157 ;; `?` \ 00000240 0400A0E1 MOV R0,R4 \ 00000244 160000EF SWI +22 \ 00000248 0000A0E3 MOV R0,#+0 \ 0000024C 01002DE9 PUSH {R0} \ 00000250 0630A0E1 MOV R3,R6 \ 00000254 0820A0E1 MOV R2,R8 \ 00000258 0010A0E3 MOV R1,#+0 \ 0000025C 0900A0E1 MOV R0,R9 \ 00000260 01002DE9 PUSH {R0} \ 00000264 70BE8BE3 ORR R11,R11,#0x700 \ 00000268 0500A0E1 MOV R0,R5 \ 0000026C 01002DE9 PUSH {R0} \ 00000270 0200A0E3 MOV R0,#+2 \ 00000274 01002DE9 PUSH {R0} \ 00000278 0700A0E1 MOV R0,R7 \ 0000027C 01002DE9 PUSH {R0} \ 00000280 0400A0E1 MOV R0,R4 \ 00000284 ........ BL DrawStr \ 00000288 0A008BE0 ADD R0,R11,R10 \ 0000028C 1B0000EF SWI +27 \ 00000290 000050E3 CMP R0,#+0 \ 00000294 14D08DE2 ADD SP,SP,#+20 \ 00000298 0800001A BNE ??DrawSoftKeys_7 3707 DrawStr(left,2,scr_h-1-FntH,scr_w,scr_h,0,HeadFont,(char*)SoftFontClr,0); \ 0000029C 0000A0E3 MOV R0,#+0 \ 000002A0 01002DE9 PUSH {R0} \ 000002A4 00022DE9 PUSH {R9} \ 000002A8 20002DE9 PUSH {R5} \ 000002AC 01002DE9 PUSH {R0} \ 000002B0 80002DE9 PUSH {R7} \ 000002B4 0630A0E1 MOV R3,R6 \ 000002B8 1C009DE5 LDR R0,[SP, #+28] \ 000002BC 1B0000EA B ??DrawSoftKeys_8 3708 else 3709 if(strlen(ContactT9Key)==1)//если есть нажатая кнопка,то выводим текст для лонг пресса на левом софте \ ??DrawSoftKeys_7: \ 000002C0 0A008BE0 ADD R0,R11,R10 \ 000002C4 1B0000EF SWI +27 \ 000002C8 010050E3 CMP R0,#+1 \ 000002CC 0F00001A BNE ??DrawSoftKeys_9 3710 DrawStr(GetLongPressText(),2,scr_h-1-FntH,(scr_w/2)-(GetWidth(s,HeadFont)/2),scr_h,0,HeadFont,(char*)SoftFontClr,0); \ 000002D0 0510A0E1 MOV R1,R5 \ 000002D4 0400A0E1 MOV R0,R4 \ 000002D8 ........ BL GetWidth \ 000002DC 00A0A0E1 MOV R10,R0 \ 000002E0 ........ BL GetLongPressText \ 000002E4 0010A0E3 MOV R1,#+0 \ 000002E8 02002DE9 PUSH {R1} \ 000002EC 00022DE9 PUSH {R9} \ 000002F0 20002DE9 PUSH {R5} \ 000002F4 02002DE9 PUSH {R1} \ 000002F8 80002DE9 PUSH {R7} \ 000002FC AA2F8AE0 ADD R2,R10,R10, LSR #+31 \ 00000300 A61F86E0 ADD R1,R6,R6, LSR #+31 \ 00000304 C110A0E1 ASR R1,R1,#+1 \ 00000308 C23041E0 SUB R3,R1,R2, ASR #+1 \ 0000030C 070000EA B ??DrawSoftKeys_8 3711 else//очистить т9 буффер 3712 DrawStr("Очистить Т9",2,scr_h-1-FntH,scr_w,scr_h,0,HeadFont,(char*)SoftFontClr,0); \ ??DrawSoftKeys_9: \ 00000310 0000A0E3 MOV R0,#+0 \ 00000314 01002DE9 PUSH {R0} \ 00000318 00022DE9 PUSH {R9} \ 0000031C 20002DE9 PUSH {R5} \ 00000320 01002DE9 PUSH {R0} \ 00000324 30009FE5 LDR R0,??DrawSoftKeys_0+0x10 ;; `?` + 84 \ 00000328 80002DE9 PUSH {R7} \ 0000032C 0630A0E1 MOV R3,R6 \ ??DrawSoftKeys_8: \ 00000330 0820A0E1 MOV R2,R8 \ 00000334 0210A0E3 MOV R1,#+2 \ 00000338 ........ BL DrawStr \ 0000033C 14D08DE2 ADD SP,SP,#+20 3713 3714 3715 mfree(s); \ 00000340 0400A0E1 MOV R0,R4 \ 00000344 150000EF SWI +21 3716 } \ 00000348 FF8FBDE8 POP {R0-R11,PC} ;; return \ ??DrawSoftKeys_0: \ 0000034C ........ DC32 SoftBackgrClr \ 00000350 ........ DC32 SoftShot \ 00000354 ........ DC32 SoftFontClr \ 00000358 ........ DC32 `?` + 76 \ 0000035C ........ 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 ;; HeaderShot + 1116 \ 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 HeaderShot + 1116 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 A0759FE5 LDR R7,??DrawHeader_0+0x8 ;; HeaderShot 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)//два раза,чтобы экран обновился \ 00000008 A0859FE5 LDR R8,??DrawHeader_0+0xC ;; 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,??DataTable158 ;; HeadFont \ 0000002C 006090E5 LDR R6,[R0, #+0] \ 00000030 0600A0E1 MOV R0,R6 \ 00000034 C50100EF SWI +453 \ 00000038 E41497E5 LDR R1,[R7, #+1252] \ 0000003C D40487E5 STR R0,[R7, #+1236] \ 00000040 A40397E5 LDR R0,[R7, #+932] \ 00000044 200090E5 LDR R0,[R0, #+32] \ 00000048 100050E3 CMP R0,#+16 \ 0000004C 1000A033 MOVCC R0,#+16 \ 00000050 180080E2 ADD R0,R0,#+24 \ 00000054 D40487E5 STR R0,[R7, #+1236] \ 00000058 020051E3 CMP R1,#+2 \ 0000005C 3400000A BEQ ??DrawHeader_1 3771 { 3772 #endif 3773 if(HeadBackgrClr[3]!=0)//если непрозрачный цвет \ 00000060 0310D8E5 LDRB R1,[R8, #+3] \ 00000064 000051E3 CMP R1,#+0 \ 00000068 2500000A BEQ ??DrawHeader_2 3774 { 3775 DrawRoundedFrame(0,YDISP,scr_w,HeaderY+2,0,0,0,clrBlack,clrBlack); \ 0000006C B410A0E3 MOV R1,#+180 \ 00000070 6C1D81E3 ORR R1,R1,#0x1B00 \ 00000074 071081E0 ADD R1,R1,R7 \ 00000078 0120A0E1 MOV R2,R1 \ 0000007C 04002DE9 PUSH {R2} \ 00000080 02002DE9 PUSH {R1} \ 00000084 023080E2 ADD R3,R0,#+2 \ 00000088 0520A0E1 MOV R2,R5 \ 0000008C 0000A0E3 MOV R0,#+0 \ 00000090 0010A0E3 MOV R1,#+0 \ 00000094 02002DE9 PUSH {R1} \ 00000098 02002DE9 PUSH {R1} \ 0000009C 02002DE9 PUSH {R1} \ 000000A0 1810A0E3 MOV R1,#+24 \ 000000A4 500100EF SWI +336 3776 for(int i = HeaderY-YDISP ; i > 0 ; i-=2) \ 000000A8 D40497E5 LDR R0,[R7, #+1236] \ 000000AC 14D08DE2 ADD SP,SP,#+20 \ 000000B0 184040E2 SUB R4,R0,#+24 \ 000000B4 010054E3 CMP R4,#+1 \ 000000B8 110000BA BLT ??DrawHeader_2 3777 DrawRoundedFrame(0,YDISP,scr_w,HeaderY-i+2,0,0,0,HeadBackgrClr,HeadBackgrClr); \ ??DrawHeader_3: \ 000000BC 0800A0E1 MOV R0,R8 \ 000000C0 01002DE9 PUSH {R0} \ 000000C4 01002DE9 PUSH {R0} \ 000000C8 0520A0E1 MOV R2,R5 \ 000000CC 1810A0E3 MOV R1,#+24 \ 000000D0 0000A0E3 MOV R0,#+0 \ 000000D4 01002DE9 PUSH {R0} \ 000000D8 01002DE9 PUSH {R0} \ 000000DC 01002DE9 PUSH {R0} \ 000000E0 D40497E5 LDR R0,[R7, #+1236] \ 000000E4 040040E0 SUB R0,R0,R4 \ 000000E8 023080E2 ADD R3,R0,#+2 \ 000000EC 0000A0E3 MOV R0,#+0 \ 000000F0 500100EF SWI +336 \ 000000F4 024044E2 SUB R4,R4,#+2 \ 000000F8 010054E3 CMP R4,#+1 \ 000000FC 14D08DE2 ADD SP,SP,#+20 \ 00000100 EDFFFFAA BGE ??DrawHeader_3 3778 } 3779 #ifdef ELKA 3780 int HSIZE = (HeaderY-YDISP+8)*ScreenW(); \ ??DrawHeader_2: \ 00000104 888100EF SWI +33160 \ 00000108 D41497E5 LDR R1,[R7, #+1236] \ 0000010C 102041E2 SUB R2,R1,#+16 \ 00000110 900202E0 MUL R2,R0,R2 3781 int ScrH = HeaderY-YDISP+2; 3782 HeaderShot = DoScreen(ScrH, HSIZE); \ 00000114 161041E2 SUB R1,R1,#+22 \ 00000118 0700A0E1 MOV R0,R7 \ 0000011C ........ BL DoScreen 3783 shot_header++; \ 00000120 E40497E5 LDR R0,[R7, #+1252] \ 00000124 010080E2 ADD R0,R0,#+1 \ 00000128 E40487E5 STR R0,[R7, #+1252] 3784 SMART_REDRAW(); \ 0000012C ........ BL SMART_REDRAW 3785 return; \ 00000130 F38FBDE8 POP {R0,R1,R4-R11,PC} 3786 } 3787 else 3788 if(HeadBackgrClr[3]!=0)//если цвет не полностью прозрачен \ ??DrawHeader_1: \ 00000134 0300D8E5 LDRB R0,[R8, #+3] \ 00000138 000050E3 CMP R0,#+0 \ 0000013C 0400000A BEQ ??DrawHeader_4 3789 DrwImage(&HeaderShot,0,YDISP,0); \ 00000140 0030A0E3 MOV R3,#+0 \ 00000144 1820A0E3 MOV R2,#+24 \ 00000148 0010A0E3 MOV R1,#+0 \ 0000014C 0700A0E1 MOV R0,R7 \ 00000150 ........ BL DrwImage 3790 #endif 3791 3792 // return; 3793 int x=1; 3794 if(HEAD_STATUS) //Показывать статус \ ??DrawHeader_4: \ 00000154 58049FE5 LDR R0,??DrawHeader_0+0x10 ;; HEAD_STATUS \ 00000158 0180A0E3 MOV R8,#+1 \ 0000015C 000090E5 LDR R0,[R0, #+0] \ 00000160 000050E3 CMP R0,#+0 \ 00000164 0F00000A BEQ ??DrawHeader_5 3795 { 3796 int icon; 3797 if(total_unread) icon = IS_MSG; \ 00000168 900397E5 LDR R0,[R7, #+912] \ 0000016C 000050E3 CMP R0,#+0 \ 00000170 0D00A013 MOVNE R0,#+13 \ 00000174 0500001A BNE ??DrawHeader_6 3798 else 3799 { 3800 switch(connect_state) \ 00000178 8C0497E5 LDR R0,[R7, #+1164] \ 0000017C 000050E3 CMP R0,#+0 \ 00000180 0200000A BEQ ??DrawHeader_6 \ 00000184 030050E2 SUBS R0,R0,#+3 3801 { 3802 case 0: icon=IS_OFFLINE; break; 3803 case 3: icon=CurrentStatus; break; \ 00000188 54049705 LDREQ R0,[R7, #+1108] 3804 default: icon=IS_UNKNOWN; break; \ 0000018C 0E00A013 MOVNE R0,#+14 3805 } 3806 } 3807 x += DrwImage(GetIconByItem(icon),x,YDISP,RET_X) + 2; \ ??DrawHeader_6: \ 00000190 ........ _BLF GetIconByItem,??GetIconByItem??rA \ 00000194 0130A0E3 MOV R3,#+1 \ 00000198 1820A0E3 MOV R2,#+24 \ 0000019C 0310A0E1 MOV R1,R3 \ 000001A0 ........ BL DrwImage \ 000001A4 038080E2 ADD R8,R0,#+3 3808 } 3809 3810 if(total_unread && isShowUnread)// есть не прочитанные, выводим кол-во не прочитаннх сообщений и кол-во контактов от которых пришли сообщения \ ??DrawHeader_5: \ 000001A8 902397E5 LDR R2,[R7, #+912] \ 000001AC 04949FE5 LDR R9,??DrawHeader_0+0x14 ;; HeadFontClr \ 000001B0 ........ LDR R11,??DataTable159 ;; `?` \ 000001B4 000052E3 CMP R2,#+0 \ 000001B8 2100000A BEQ ??DrawHeader_7 \ 000001BC F8039FE5 LDR R0,??DrawHeader_0+0x18 ;; isShowUnread \ 000001C0 000090E5 LDR R0,[R0, #+0] \ 000001C4 000050E3 CMP R0,#+0 \ 000001C8 1D00000A BEQ ??DrawHeader_7 3811 { 3812 sprintf(s,"%d/%d",total_unread,total_unread_all); \ 000001CC 943397E5 LDR R3,[R7, #+916] \ 000001D0 9C108BE2 ADD R1,R11,#+156 \ 000001D4 0400A0E1 MOV R0,R4 \ 000001D8 160000EF SWI +22 3813 DrawStr(s,x,YDISP+1,x+GetWidth(s,drawFont),YDISP+1+HeaderY,0,drawFont,(char*)HeadFontClr,0); \ 000001DC 0610A0E1 MOV R1,R6 \ 000001E0 0400A0E1 MOV R0,R4 \ 000001E4 ........ BL GetWidth \ 000001E8 0010A0E3 MOV R1,#+0 \ 000001EC 02002DE9 PUSH {R1} \ 000001F0 083080E0 ADD R3,R0,R8 \ 000001F4 1920A0E3 MOV R2,#+25 \ 000001F8 0400A0E1 MOV R0,R4 \ 000001FC 0910A0E1 MOV R1,R9 \ 00000200 02002DE9 PUSH {R1} \ 00000204 0610A0E1 MOV R1,R6 \ 00000208 02002DE9 PUSH {R1} \ 0000020C 0010A0E3 MOV R1,#+0 \ 00000210 02002DE9 PUSH {R1} \ 00000214 D41497E5 LDR R1,[R7, #+1236] \ 00000218 191081E2 ADD R1,R1,#+25 \ 0000021C 02002DE9 PUSH {R1} \ 00000220 0810A0E1 MOV R1,R8 \ 00000224 ........ BL DrawStr 3814 x += GetWidth(s,ClFont)+1; \ 00000228 ........ LDR R0,??DataTable163 ;; ClFont \ 0000022C 001090E5 LDR R1,[R0, #+0] \ 00000230 0400A0E1 MOV R0,R4 \ 00000234 ........ BL GetWidth \ 00000238 010080E2 ADD R0,R0,#+1 \ 0000023C 088080E0 ADD R8,R0,R8 \ 00000240 14D08DE2 ADD SP,SP,#+20 3815 } 3816 3817 if(CurrentXStatus!=0 && HEAD_XSTATUS)//если есть хстатус и показывать х-статус \ ??DrawHeader_7: \ 00000244 580497E5 LDR R0,[R7, #+1112] \ 00000248 000050E3 CMP R0,#+0 \ 0000024C 0E00000A BEQ ??DrawHeader_8 \ 00000250 68139FE5 LDR R1,??DrawHeader_0+0x1C ;; HEAD_XSTATUS \ 00000254 001091E5 LDR R1,[R1, #+0] \ 00000258 000051E3 CMP R1,#+0 \ 0000025C 0A00000A BEQ ??DrawHeader_8 3818 { 3819 if(GetXIconByItem(CurrentXStatus)) \ 00000260 ........ _BLF GetXIconByItem,??GetXIconByItem??rA \ 00000264 000050E3 CMP R0,#+0 \ 00000268 0700000A BEQ ??DrawHeader_8 3820 x += DrwImage(GetXIconByItem(CurrentXStatus),x,YDISP+1,RET_X) + 2; \ 0000026C 580497E5 LDR R0,[R7, #+1112] \ 00000270 ........ _BLF GetXIconByItem,??GetXIconByItem??rA \ 00000274 0130A0E3 MOV R3,#+1 \ 00000278 1920A0E3 MOV R2,#+25 \ 0000027C 0810A0E1 MOV R1,R8 \ 00000280 ........ BL DrwImage \ 00000284 020080E2 ADD R0,R0,#+2 \ 00000288 088080E0 ADD R8,R0,R8 3821 } 3822 3823 if(HEAD_PRIVATE)//выводить картинку своего приватного статуса \ ??DrawHeader_8: \ 0000028C 30039FE5 LDR R0,??DrawHeader_0+0x20 ;; HEAD_PRIVATE \ 00000290 000090E5 LDR R0,[R0, #+0] \ 00000294 000050E3 CMP R0,#+0 \ 00000298 0700000A BEQ ??DrawHeader_9 3824 { 3825 x += DrwImage(GetIconByItem(GetPrivateIcon()),x,YDISP,RET_X) + 2; \ 0000029C ........ BL GetPrivateIcon \ 000002A0 ........ _BLF GetIconByItem,??GetIconByItem??rA \ 000002A4 0130A0E3 MOV R3,#+1 \ 000002A8 1820A0E3 MOV R2,#+24 \ 000002AC 0810A0E1 MOV R1,R8 \ 000002B0 ........ BL DrwImage \ 000002B4 020080E2 ADD R0,R0,#+2 \ 000002B8 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_9: \ 000002BC D410A0E3 MOV R1,#+212 \ 000002C0 681D81E3 ORR R1,R1,#0x1A00 \ 000002C4 071081E0 ADD R1,R1,R7 \ 000002C8 00108DE5 STR R1,[SP, #+0] \ 000002CC 44A0A0E3 MOV R10,#+68 \ 000002D0 70AE8AE3 ORR R10,R10,#0x700 \ 000002D4 07008AE0 ADD R0,R10,R7 \ 000002D8 1B0000EF SWI +27 \ 000002DC 000050E3 CMP R0,#+0 \ 000002E0 1D00000A BEQ ??DrawHeader_10 3834 { 3835 sprintf(s,key_clm_hdr_text); \ 000002E4 B400A0E3 MOV R0,#+180 \ 000002E8 680D80E3 ORR R0,R0,#0x1A00 \ 000002EC 071080E0 ADD R1,R0,R7 \ 000002F0 0400A0E1 MOV R0,R4 \ 000002F4 160000EF SWI +22 3836 strcat(s,ContactT9Key); \ 000002F8 07108AE0 ADD R1,R10,R7 \ 000002FC 0400A0E1 MOV R0,R4 \ 00000300 170000EF SWI +23 3837 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 00000304 4F0D8AE2 ADD R0,R10,#+5056 \ 00000308 071080E0 ADD R1,R0,R7 \ 0000030C 00009DE5 LDR R0,[SP, #+0] \ 00000310 1A0000EF SWI +26 3838 DrawStr(s,scr_w - GetWidth(s,drawFont),y, scr_w,y+FontH(drawFont),TEXT_ALIGNRIGHT,drawFont,(char*)HeadFontClr,1); \ 00000314 0600A0E1 MOV R0,R6 \ 00000318 C50100EF SWI +453 \ 0000031C 0070A0E1 MOV R7,R0 \ 00000320 0610A0E1 MOV R1,R6 \ 00000324 0400A0E1 MOV R0,R4 \ 00000328 ........ BL GetWidth \ 0000032C 0110A0E3 MOV R1,#+1 \ 00000330 02002DE9 PUSH {R1} \ 00000334 00022DE9 PUSH {R9} \ 00000338 40002DE9 PUSH {R6} \ 0000033C 0410A0E3 MOV R1,#+4 \ 00000340 02002DE9 PUSH {R1} \ 00000344 0530A0E1 MOV R3,R5 \ 00000348 1720A0E3 MOV R2,#+23 \ 0000034C 171087E2 ADD R1,R7,#+23 \ 00000350 02002DE9 PUSH {R1} \ 00000354 001045E0 SUB R1,R5,R0 \ 00000358 8B0000EA B ??DrawHeader_11 3839 } 3840 else //если кто то подключился/отключился, выводим кто подключился 3841 if(on_off_timer > 0 && strlen(on_off_buf)!=0) \ ??DrawHeader_10: \ 0000035C E410A0E3 MOV R1,#+228 \ 00000360 681D81E3 ORR R1,R1,#0x1A00 \ 00000364 071081E0 ADD R1,R1,R7 \ 00000368 04108DE5 STR R1,[SP, #+4] \ 0000036C A80397E5 LDR R0,[R7, #+936] \ 00000370 010050E3 CMP R0,#+1 \ 00000374 440000BA BLT ??DrawHeader_12 \ 00000378 6400A0E3 MOV R0,#+100 \ 0000037C 5C0D80E3 ORR R0,R0,#0x1700 \ 00000380 07A080E0 ADD R10,R0,R7 \ 00000384 0A00A0E1 MOV R0,R10 \ 00000388 1B0000EF SWI +27 \ 0000038C 000050E3 CMP R0,#+0 \ 00000390 3D00000A BEQ ??DrawHeader_12 3842 { 3843 int i=GetWidth(on_off_buf, drawFont); \ 00000394 0610A0E1 MOV R1,R6 \ 00000398 0A00A0E1 MOV R0,R10 \ 0000039C ........ BL GetWidth \ 000003A0 00B0A0E1 MOV R11,R0 3844 if((i<0) || (i < scr_w-x-2))//не нада скролла \ 000003A4 C800A0E3 MOV R0,#+200 \ 000003A8 6C0D80E3 ORR R0,R0,#0x1B00 \ 000003AC 070080E0 ADD R0,R0,R7 \ 000003B0 00005BE3 CMP R11,#+0 \ 000003B4 0300004A BMI ??DrawHeader_13 \ 000003B8 081045E0 SUB R1,R5,R8 \ 000003BC 021041E2 SUB R1,R1,#+2 \ 000003C0 01005BE1 CMP R11,R1 \ 000003C4 150000AA BGE ??DrawHeader_14 3845 { 3846 int xx = scr_w-i-2; 3847 DisableScroll(); \ ??DrawHeader_13: \ 000003C8 8C0100EF SWI +396 \ 000003CC 0000A0E3 MOV R0,#+0 \ 000003D0 DC0487E5 STR R0,[R7, #+1244] \ 000003D4 D80487E5 STR R0,[R7, #+1240] 3848 DrawStr(on_off_buf,xx,y,scr_w,y+FontH(drawFont),TEXT_ALIGNRIGHT,drawFont,(char*)HeadFontClr,0); \ 000003D8 0600A0E1 MOV R0,R6 \ 000003DC C50100EF SWI +453 \ 000003E0 0010A0E3 MOV R1,#+0 \ 000003E4 02002DE9 PUSH {R1} \ 000003E8 00022DE9 PUSH {R9} \ 000003EC 40002DE9 PUSH {R6} \ 000003F0 0410A0E3 MOV R1,#+4 \ 000003F4 02002DE9 PUSH {R1} \ 000003F8 170080E2 ADD R0,R0,#+23 \ 000003FC 01002DE9 PUSH {R0} \ 00000400 0530A0E1 MOV R3,R5 \ 00000404 1720A0E3 MOV R2,#+23 \ 00000408 0B0045E0 SUB R0,R5,R11 \ 0000040C 021040E2 SUB R1,R0,#+2 \ 00000410 0A00A0E1 MOV R0,R10 \ 00000414 ........ BL DrawStr \ 00000418 14D08DE2 ADD SP,SP,#+20 \ 0000041C 140000EA B ??DrawHeader_15 3849 } 3850 else//иначе скроллим 3851 { 3852 if(!max_scroll_disp) \ ??DrawHeader_14: \ 00000420 DC1497E5 LDR R1,[R7, #+1244] \ 00000424 000051E3 CMP R1,#+0 \ 00000428 0200001A BNE ??DrawHeader_16 3853 GBS_StartTimerProc(&tmr_scroll,TMR_SECOND,scroll_timer_proc); \ 0000042C ........ LDR R2,??DataTable161 ;; scroll_timer_proc \ 00000430 D810A0E3 MOV R1,#+216 \ 00000434 4D0000EF SWI +77 3854 3855 max_scroll_disp = (x - (scr_w-i)) - 4; \ ??DrawHeader_16: \ 00000438 050048E0 SUB R0,R8,R5 \ 0000043C 00008BE0 ADD R0,R11,R0 \ 00000440 040040E2 SUB R0,R0,#+4 \ 00000444 DC0487E5 STR R0,[R7, #+1244] 3856 DrawScrollStr(on_off_buf,x,y,scr_w,y+HeaderY,drawFont,(char*)HeadFontClr); \ 00000448 00022DE9 PUSH {R9} \ 0000044C 40002DE9 PUSH {R6} \ 00000450 D40497E5 LDR R0,[R7, #+1236] \ 00000454 0530A0E1 MOV R3,R5 \ 00000458 170080E2 ADD R0,R0,#+23 \ 0000045C 01002DE9 PUSH {R0} \ 00000460 1720A0E3 MOV R2,#+23 \ 00000464 0810A0E1 MOV R1,R8 \ 00000468 0A00A0E1 MOV R0,R10 \ 0000046C ........ BL DrawScrollStr \ 00000470 0CD08DE2 ADD SP,SP,#+12 3857 } 3858 3859 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ ??DrawHeader_15: \ 00000474 04109DE5 LDR R1,[SP, #+4] \ 00000478 00009DE5 LDR R0,[SP, #+0] \ 0000047C 1A0000EF SWI +26 \ 00000480 0400A0E1 MOV R0,R4 \ 00000484 150000EF SWI +21 \ 00000488 F38FBDE8 POP {R0,R1,R4-R11,PC} 3860 } 3861 else//Штатный вывод 3862 { 3863 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ ??DrawHeader_12: \ 0000048C 04109DE5 LDR R1,[SP, #+4] \ 00000490 00009DE5 LDR R0,[SP, #+0] \ 00000494 1A0000EF SWI +26 3864 strcpy(s,empty_str); \ 00000498 0B108BE2 ADD R1,R11,#+11 \ 0000049C 0400A0E1 MOV R0,R4 \ 000004A0 1A0000EF SWI +26 3865 strcpy(clistm->s,empty_str); \ 000004A4 A40397E5 LDR R0,[R7, #+932] \ 000004A8 0B108BE2 ADD R1,R11,#+11 \ 000004AC 2C0080E2 ADD R0,R0,#+44 \ 000004B0 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]") ; \ 000004B4 700397E5 LDR R0,[R7, #+880] \ 000004B8 000050E3 CMP R0,#+0 \ 000004BC 0600000A BEQ ??DrawHeader_17 \ 000004C0 00019FE5 LDR R0,??DrawHeader_0+0x24 ;; isShowV \ 000004C4 000090E5 LDR R0,[R0, #+0] \ 000004C8 000050E3 CMP R0,#+0 \ 000004CC 0200000A BEQ ??DrawHeader_17 \ 000004D0 331F8FE2 ADR R1,??DrawHeader_0 ;; "[V]" \ 000004D4 0400A0E1 MOV R0,R4 \ 000004D8 170000EF SWI +23 3874 if(Is_Sounds_Enabled && isShowS) strcat(s,"[S]") ; \ ??DrawHeader_17: \ 000004DC 740397E5 LDR R0,[R7, #+884] \ 000004E0 000050E3 CMP R0,#+0 \ 000004E4 0600000A BEQ ??DrawHeader_18 \ 000004E8 DC009FE5 LDR R0,??DrawHeader_0+0x28 ;; isShowS \ 000004EC 000090E5 LDR R0,[R0, #+0] \ 000004F0 000050E3 CMP R0,#+0 \ 000004F4 0200000A BEQ ??DrawHeader_18 \ 000004F8 2A1F8FE2 ADR R1,??DrawHeader_0+0x4 ;; "[S]" \ 000004FC 0400A0E1 MOV R0,R4 \ 00000500 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_18: \ 00000504 A40397E5 LDR R0,[R7, #+932] \ 00000508 B03397E5 LDR R3,[R7, #+944] \ 0000050C AC2397E5 LDR R2,[R7, #+940] \ 00000510 A4108BE2 ADD R1,R11,#+164 \ 00000514 2C0080E2 ADD R0,R0,#+44 \ 00000518 160000EF SWI +22 3880 strcat(s,clistm->s); \ 0000051C A40397E5 LDR R0,[R7, #+932] \ 00000520 2C1080E2 ADD R1,R0,#+44 \ 00000524 0400A0E1 MOV R0,R4 \ 00000528 170000EF SWI +23 3881 } 3882 3883 // if(isShowBat) 3884 { 3885 sprintf(clistm->s,"[%d%%]",*RamCap()); \ 0000052C C88000EF SWI +32968 \ 00000530 B020D0E1 LDRH R2,[R0, #+0] \ 00000534 A40397E5 LDR R0,[R7, #+932] \ 00000538 AC108BE2 ADD R1,R11,#+172 \ 0000053C 2C0080E2 ADD R0,R0,#+44 \ 00000540 160000EF SWI +22 3886 strcat(s,clistm->s); \ 00000544 A40397E5 LDR R0,[R7, #+932] \ 00000548 2C1080E2 ADD R1,R0,#+44 \ 0000054C 0400A0E1 MOV R0,R4 \ 00000550 170000EF SWI +23 3887 } 3888 3889 DrawStr(s,(scr_w/2),y,scr_w,y+FontH(drawFont),TEXT_ALIGNRIGHT,drawFont,(char*)HeadFontClr,0); \ 00000554 0600A0E1 MOV R0,R6 \ 00000558 C50100EF SWI +453 \ 0000055C 0010A0E3 MOV R1,#+0 \ 00000560 02002DE9 PUSH {R1} \ 00000564 00022DE9 PUSH {R9} \ 00000568 40002DE9 PUSH {R6} \ 0000056C 0410A0E3 MOV R1,#+4 \ 00000570 02002DE9 PUSH {R1} \ 00000574 170080E2 ADD R0,R0,#+23 \ 00000578 01002DE9 PUSH {R0} \ 0000057C 0530A0E1 MOV R3,R5 \ 00000580 1720A0E3 MOV R2,#+23 \ 00000584 A50F85E0 ADD R0,R5,R5, LSR #+31 \ 00000588 C010A0E1 ASR R1,R0,#+1 \ ??DrawHeader_11: \ 0000058C 0400A0E1 MOV R0,R4 \ 00000590 ........ BL DrawStr \ 00000594 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); \ 00000598 0400A0E1 MOV R0,R4 \ 0000059C 150000EF SWI +21 3910 } \ 000005A0 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??DrawHeader_0: \ 000005A4 5B565D00 DC8 "[V]" \ 000005A8 5B535D00 DC8 "[S]" \ 000005AC ........ DC32 HeaderShot \ 000005B0 ........ DC32 HeadBackgrClr \ 000005B4 ........ DC32 HEAD_STATUS \ 000005B8 ........ DC32 HeadFontClr \ 000005BC ........ DC32 isShowUnread \ 000005C0 ........ DC32 HEAD_XSTATUS \ 000005C4 ........ DC32 HEAD_PRIVATE \ 000005C8 ........ DC32 isShowV \ 000005CC ........ 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,??DataTable165 ;; HeaderShot \ 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,??DataTable163 ;; ClFont \ 00000024 006090E5 LDR R6,[R0, #+0] \ 00000028 0600A0E1 MOV R0,R6 \ 0000002C C50100EF SWI +453 \ 00000030 A4139AE5 LDR R1,[R10, #+932] \ 00000034 000044E0 SUB R0,R4,R0 \ 00000038 201091E5 LDR R1,[R1, #+32] \ 0000003C 1C0040E2 SUB R0,R0,#+28 \ 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 B420A0E3 MOV R2,#+180 \ 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 1C1081E2 ADD R1,R1,#+28 \ 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,??DataTable165 ;; HeaderShot \ 00000008 0000A0E3 MOV R0,#+0 \ 0000000C 541394E5 LDR R1,[R4, #+852] \ 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 D820A0E3 MOV R2,#+216 \ 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 B43384E5 STR R3,[R4, #+948] 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 745484E5 STR R5,[R4, #+1140] 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 B45384E5 STR R5,[R4, #+948] 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,??DataTable165 ;; HeaderShot \ 0000000C 90209CE5 LDR R2,[R12, #+144] \ 00000010 000052E3 CMP R2,#+0 \ 00000014 6F1D8102 ADDEQ R1,R1,#+7104 \ 00000018 BC20A013 MOVNE R2,#+188 \ 0000001C 6C2D8213 ORRNE R2,R2,#0x1B00 \ 00000020 01108210 ADDNE R1,R2,R1 \ 00000024 0120A0E3 MOV R2,#+1 \ 00000028 04002DE9 PUSH {R2} \ 0000002C 02002DE9 PUSH {R1} \ 00000030 ........ LDR R1,??DataTable174 ;; 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,??DataTable173 ;; 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,??DataTable177 ;; HeaderShot \ 00000008 30D04DE2 SUB SP,SP,#+48 \ 0000000C 540395E5 LDR R0,[R5, #+852] \ 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 A40395E5 LDR R0,[R5, #+932] 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,??DataTable169 ;; SOFT_MODE \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 0300000A BEQ ??DrawList_1 \ 00000044 ........ LDR R0,??DataTable170 ;; 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,??DataTable171 ;; ClFont \ 00000060 007090E5 LDR R7,[R0, #+0] \ 00000064 0700A0E1 MOV R0,R7 \ 00000068 C50100EF SWI +453 \ 0000006C 000049E0 SUB R0,R9,R0 \ 00000070 1C0040E2 SUB R0,R0,#+28 \ 00000074 080040E0 SUB R0,R0,R8 \ 00000078 021040E2 SUB R1,R0,#+2 \ 0000007C 0600A0E1 MOV R0,R6 \ 00000080 B80000EF SWI +184 \ 00000084 A41395E5 LDR R1,[R5, #+932] \ 00000088 040081E5 STR R0,[R1, #+4] 4133 if(VIEW_MODE) clistm->itemFromDisp = (clistm->itemFromDisp*2)-2; //еси в 2 столбца \ 0000008C ........ LDR R0,??DataTable176 ;; 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 A40395E5 LDR R0,[R5, #+932] \ 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 A41395E5 LDR R1,[R5, #+932] \ 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 A40395E5 LDR R0,[R5, #+932] \ 00000114 041090E5 LDR R1,[R0, #+4] \ ??DrawList_6: \ 00000118 A42395E5 LDR R2,[R5, #+932] \ 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 A40395E5 LDR R0,[R5, #+932] \ 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 A40395E5 LDR R0,[R5, #+932] \ 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 A40395E5 LDR R0,[R5, #+932] \ 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 1C0080E2 ADD R0,R0,#+28 \ 0000020C 0BB080E0 ADD R11,R0,R11 \ 00000210 1CB08DE5 STR R11,[SP, #+28] \ 00000214 A40395E5 LDR R0,[R5, #+932] \ 00000218 181090E5 LDR R1,[R0, #+24] \ 0000021C 91B620E0 MLA R0,R1,R6,R11 \ 00000220 EC1495E5 LDR R1,[R5, #+1260] \ 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 EC2495E5 LDR R2,[R5, #+1260] \ 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 A40395E5 LDR R0,[R5, #+932] \ 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 A41395E5 LDR R1,[R5, #+932] \ 00000290 1E0080E2 ADD R0,R0,#+30 \ 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 EC1495E5 LDR R1,[R5, #+1260] \ 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 7C039515 LDRNE R0,[R5, #+892] \ 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 A40395E5 LDR R0,[R5, #+932] \ 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 A40395E5 LDR R0,[R5, #+932] \ 00000330 0710A0E1 MOV R1,R7 \ 00000334 2C0080E2 ADD R0,R0,#+44 \ 00000338 ........ BL GetWidth \ 0000033C EC1495E5 LDR R1,[R5, #+1260] \ 00000340 0120A0E3 MOV R2,#+1 \ 00000344 04002DE9 PUSH {R2} \ 00000348 ........ LDR R2,??DataTable173 ;; 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 A40395E5 LDR R0,[R5, #+932] \ 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 E81495E5 LDR R1,[R5, #+1256] \ 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 740495E5 LDR R0,[R5, #+1140] \ 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 A40395E5 LDR R0,[R5, #+932] \ 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 BC00A0E3 MOV R0,#+188 \ 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 A40395E5 LDR R0,[R5, #+932] \ 0000053C 2C0080E2 ADD R0,R0,#+44 \ 00000540 ........ BL DrawStr 4222 rc.x += GetWidth(clistm->s,ClFont)+2; \ 00000544 A40395E5 LDR R0,[R5, #+932] \ 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 A40395E5 LDR R0,[R5, #+932] \ 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 A40395E5 LDR R0,[R5, #+932] \ 0000061C 2C0080E2 ADD R0,R0,#+44 \ 00000620 ........ BL DrawStr 4234 rc.x += GetWidth(clistm->s,drawFont) + 2; \ 00000624 A40395E5 LDR R0,[R5, #+932] \ 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 A40395E5 LDR R0,[R5, #+932] \ 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 A40395E5 LDR R0,[R5, #+932] \ 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 A40395E5 LDR R0,[R5, #+932] \ 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 A40395E5 LDR R0,[R5, #+932] \ 00000780 2C0080E2 ADD R0,R0,#+44 \ 00000784 ........ BL DrawStr \ 00000788 14D08DE2 ADD SP,SP,#+20 4255 } 4256 if(clistm->totalItems > 1) \ ??DrawList_35: \ 0000078C A40395E5 LDR R0,[R5, #+932] \ 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,??DataTable174 ;; 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 A40395E5 LDR R0,[R5, #+932] \ 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 740495E5 LDR R0,[R5, #+1140] \ 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 A40395E5 LDR R0,[R5, #+932] \ 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 A40395E5 LDR R0,[R5, #+932] \ 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,??DataTable181 ;; HeaderShot + 932 \ 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,??DataTable176 ;; VIEW_MODE \ 00000004 F0432DE9 PUSH {R4-R9,LR} \ 00000008 ........ LDR R4,??DataTable177 ;; HeaderShot \ 0000000C 001091E5 LDR R1,[R1, #+0] \ 00000010 A48394E5 LDR R8,[R4, #+932] \ 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 B87384E5 STR R7,[R4, #+952] 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 B87384E5 STR R7,[R4, #+952] 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 B87384E5 STR R7,[R4, #+952] \ 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 B87384E5 STR R7,[R4, #+952] 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,??DataTable181 ;; HeaderShot + 932 \ 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,??DataTable181 ;; HeaderShot + 932 \ 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,??DataTable181 ;; HeaderShot + 932 \ 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,??DataTable181 ;; HeaderShot + 932 \ 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,??DataTable192 ;; HeaderShot \ 00000008 4440A0E3 MOV R4,#+68 \ 0000000C 604E84E3 ORR R4,R4,#0x600 \ 00000010 0510A0E3 MOV R1,#+5 \ 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 0500A0E3 MOV R0,#+5 \ 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 B810A0E3 MOV R1,#+184 \ 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 0500A0E3 MOV R0,#+5 \ 00000138 C50100EF SWI +453 \ 0000013C 0010A0E3 MOV R1,#+0 \ 00000140 02002DE9 PUSH {R1} \ 00000144 00012DE9 PUSH {R8} \ 00000148 053049E2 SUB R3,R9,#+5 \ 0000014C 0510A0E3 MOV R1,#+5 \ 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); \ 00000004 898100EF SWI +33161 \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 888100EF SWI +33160 \ 00000010 9C109FE5 LDR R1,??DrawContactList_0 ;; CLBackgrClr \ 00000014 013044E2 SUB R3,R4,#+1 4569 #else 4570 DrawRoundedFrame(0,0,ScreenW()-1,ScreenH()-1,0,0,0,CLBackgrClr,CLBackgrClr); 4571 #endif 4572 DrawImg(0,YDISP,S_ICONS[ICON_BG]); \ 00000018 ........ LDR R4,??DataTable192 ;; HeaderShot \ 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 1810A0E3 MOV R1,#+24 \ 00000044 500100EF SWI +336 \ 00000048 BC2294E5 LDR R2,[R4, #+700] \ 0000004C 1810A0E3 MOV R1,#+24 \ 00000050 0000A0E3 MOV R0,#+0 \ 00000054 230000EF SWI +35 4573 DrawHeader(); \ 00000058 ........ BL DrawHeader 4574 DrawList(); \ 0000005C ........ BL DrawList 4575 if(strlen(prmsg)!=0 && PrintTimer > 0) PrintMess(); \ 00000060 4400A0E3 MOV R0,#+68 \ 00000064 600E80E3 ORR R0,R0,#0x600 \ 00000068 040080E0 ADD R0,R0,R4 \ 0000006C 1B0000EF SWI +27 \ 00000070 000050E3 CMP R0,#+0 \ 00000074 14D08DE2 ADD SP,SP,#+20 \ 00000078 0300000A BEQ ??DrawContactList_1 \ 0000007C C40394E5 LDR R0,[R4, #+964] \ 00000080 010050E3 CMP R0,#+1 \ 00000084 000000BA BLT ??DrawContactList_1 \ 00000088 ........ BL PrintMess 4576 if(SOFT_MODE) DrawSoftKeys(LG_MENU,clmenu_sk_r); \ ??DrawContactList_1: \ 0000008C ........ LDR R0,??DataTable184 ;; SOFT_MODE \ 00000090 000090E5 LDR R0,[R0, #+0] \ 00000094 000050E3 CMP R0,#+0 \ 00000098 1080BD08 POPEQ {R4,PC} \ 0000009C D400A0E3 MOV R0,#+212 \ 000000A0 680D80E3 ORR R0,R0,#0x1A00 \ 000000A4 041080E0 ADD R1,R0,R4 \ 000000A8 08009FE5 LDR R0,??DrawContactList_0+0x4 ;; `?` \ 000000AC ........ BL DrawSoftKeys 4577 } \ 000000B0 1080BDE8 POP {R4,PC} ;; return \ ??DrawContactList_0: \ 000000B4 ........ DC32 CLBackgrClr \ 000000B8 ........ 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,??DataTable192 ;; HeaderShot \ 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,??DataTable193 ;; 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 B45384E5 STR R5,[R4, #+948] 4610 CLIST *tt; 4611 tt=(CLIST *)(&cltop); \ 00000068 D50F84E2 ADD R0,R4,#+852 \ 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 4450A0E3 MOV R5,#+68 \ 00000090 705E85E3 ORR R5,R5,#0x700 \ 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,??DataTable187 ;; HeaderShot + 852 \ 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,??DataTable192 ;; HeaderShot \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 041094E5 LDR R1,[R4, #+4] \ 00000014 ........ LDR R0,??DataTable189 ;; VIEW_MODE \ 00000018 087091E5 LDR R7,[R1, #+8] \ 0000001C 009090E5 LDR R9,[R0, #+0] \ 00000020 040091E5 LDR R0,[R1, #+4] \ 00000024 4450A0E3 MOV R5,#+68 \ 00000028 705E85E3 ORR R5,R5,#0x700 \ 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 A40396E5 LDR R0,[R6, #+932] \ 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 0D1057E2 SUBS R1,R7,#+13 \ 0000005C 3400000A BEQ ??ClOnKey_5 \ 00000060 2E1051E2 SUBS R1,R1,#+46 \ 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 C01396E5 LDR R1,[R6, #+960] \ 000000A8 000051E3 CMP R1,#+0 \ 000000AC 0300001A BNE ??ClOnKey_12 \ 000000B0 ........ _BLF FindContactByN,??FindContactByN??rA \ 000000B4 041094E5 LDR R1,[R4, #+4] \ 000000B8 081091E5 LDR R1,[R1, #+8] \ 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 040091E5 LDR R0,[R1, #+4] \ 0000016C 408F88E3 ORR R8,R8,#0x100 \ 00000170 080050E1 CMP R0,R8 \ 00000174 0701001A BNE ??ClOnKey_18 4726 { 4727 switch(msg->gbsmsg->submess) \ 00000178 A40396E5 LDR R0,[R6, #+932] \ 0000017C 082091E5 LDR R2,[R1, #+8] \ 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 A40396E5 LDR R0,[R6, #+932] \ 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 080091E5 LDR R0,[R1, #+8] \ 000002AC 0C0050E3 CMP R0,#+12 \ 000002B0 1800001A BNE ??ClOnKey_34 \ 000002B4 B40396E5 LDR R0,[R6, #+948] \ 000002B8 000050E3 CMP R0,#+0 \ 000002BC 0A00001A BNE ??ClOnKey_35 \ 000002C0 A80396E5 LDR R0,[R6, #+936] \ 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 C800A0E3 MOV R0,#+200 \ 000002D4 6C0D80E3 ORR R0,R0,#0x1B00 \ 000002D8 060080E0 ADD R0,R0,R6 \ 000002DC 8C0100EF SWI +396 \ 000002E0 DCA486E5 STR R10,[R6, #+1244] \ 000002E4 D8A486E5 STR R10,[R6, #+1240] \ 000002E8 940000EA B ??ClOnKey_19 4775 } \ ??ClOnKey_35: \ 000002EC B4A386E5 STR R10,[R6, #+948] \ 000002F0 D50F86E2 ADD R0,R6,#+852 \ ??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 A00386E5 STR R0,[R6, #+928] \ 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 4400A0E3 MOV R0,#+68 \ 00000528 600E80E3 ORR R0,R0,#0x600 \ 0000052C 060080E0 ADD R0,R0,R6 \ 00000530 1A0000EF SWI +26 \ 00000534 0A00A0E3 MOV R0,#+10 \ 00000538 C40386E5 STR R0,[R6, #+964] \ 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 A40396E5 LDR R0,[R6, #+932] \ 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 040090E5 LDR R0,[R0, #+4] \ 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 ........ LDR R7,??DataTable191 ;; `?` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 888100EF SWI +33160 \ 00000014 04008DE5 STR R0,[SP, #+4] \ 00000018 898100EF SWI +33161 \ 0000001C 0050A0E1 MOV R5,R0 \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 2E0100EF SWI +302 \ 00000028 0060A0E1 MOV R6,R0 \ 0000002C 0100A0E3 MOV R0,#+1 \ 00000030 2E0100EF SWI +302 \ 00000034 40002DE9 PUSH {R6} \ 00000038 ........ LDR R6,??DataTable192 ;; HeaderShot \ 0000003C 01002DE9 PUSH {R0} \ 00000040 013045E2 SUB R3,R5,#+1 \ 00000044 1810A0E3 MOV R1,#+24 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)); \ 00000048 048045E2 SUB R8,R5,#+4 \ 0000004C 0000A0E3 MOV R0,#+0 \ 00000050 01002DE9 PUSH {R0} \ 00000054 10009DE5 LDR R0,[SP, #+16] \ 00000058 012040E2 SUB R2,R0,#+1 \ 0000005C 0000A0E3 MOV R0,#+0 \ 00000060 B40100EF SWI +436 \ 00000064 942296E5 LDR R2,[R6, #+660] \ 00000068 0010A0E3 MOV R1,#+0 \ 0000006C 0000A0E3 MOV R0,#+0 \ 00000070 230000EF SWI +35 \ 00000074 9C0496E5 LDR R0,[R6, #+1180] \ 00000078 A01496E5 LDR R1,[R6, #+1184] \ 0000007C E420A0E3 MOV R2,#+228 \ 00000080 5C2D82E3 ORR R2,R2,#0x1700 \ 00000084 062082E0 ADD R2,R2,R6 \ 00000088 04002DE9 PUSH {R2} \ 0000008C 2420A0E3 MOV R2,#+36 \ 00000090 6C2D82E3 ORR R2,R2,#0x1B00 \ 00000094 062082E0 ADD R2,R2,R6 \ 00000098 04002DE9 PUSH {R2} \ 0000009C A42496E5 LDR R2,[R6, #+1188] \ 000000A0 04002DE9 PUSH {R2} \ 000000A4 02002DE9 PUSH {R1} \ 000000A8 01002DE9 PUSH {R0} \ 000000AC 883496E5 LDR R3,[R6, #+1160] \ 000000B0 8C2496E5 LDR R2,[R6, #+1164] \ 000000B4 340094E5 LDR R0,[R4, #+52] \ 000000B8 B41087E2 ADD R1,R7,#+180 \ 000000BC 240100EF SWI +292 \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 2E0100EF SWI +302 \ 000000C8 0090A0E1 MOV R9,R0 \ 000000CC 0000A0E3 MOV R0,#+0 \ 000000D0 2E0100EF SWI +302 \ 000000D4 00A0A0E1 MOV R10,R0 \ 000000D8 0500A0E3 MOV R0,#+5 \ 000000DC C50100EF SWI +453 \ 000000E0 24209DE5 LDR R2,[SP, #+36] \ 000000E4 2010A0E3 MOV R1,#+32 \ 000000E8 042042E2 SUB R2,R2,#+4 \ 000000EC 28208DE5 STR R2,[SP, #+40] \ 000000F0 00022DE9 PUSH {R9} \ 000000F4 00042DE9 PUSH {R10} \ 000000F8 02002DE9 PUSH {R1} \ 000000FC 000048E0 SUB R0,R8,R0 \ 00000100 0230A0E1 MOV R3,R2 \ 00000104 1B20A0E3 MOV R2,#+27 \ 00000108 0810A0E3 MOV R1,#+8 \ 0000010C 02002DE9 PUSH {R1} \ 00000110 01002DE9 PUSH {R0} \ 00000114 340094E5 LDR R0,[R4, #+52] \ 00000118 0310A0E3 MOV R1,#+3 \ 0000011C 4C0100EF SWI +332 4957 4958 4959 #ifdef ELKA 4960 int y=160; 4961 char A[]="[A: %s]"; 4962 char I[]="[I]\n"; \ 00000120 3C149FE5 LDR R1,??DrawLoadScreen_0 ;; `?` \ 00000124 34D08DE2 ADD SP,SP,#+52 \ 00000128 0C0097E8 LDM R7,{R2,R3} \ 0000012C 0C008DE2 ADD R0,SP,#+12 \ 00000130 0C0080E8 STM R0,{R2,R3} \ 00000134 0C0091E8 LDM R1,{R2,R3} 4963 char V[]="[V]\n"; \ 00000138 28149FE5 LDR R1,??DrawLoadScreen_0+0x4 ;; `?` \ 0000013C 14008DE2 ADD R0,SP,#+20 \ 00000140 0C0080E8 STM R0,{R2,R3} \ 00000144 0C0091E8 LDM R1,{R2,R3} 4964 char S[]="[S]\n"; \ 00000148 1C149FE5 LDR R1,??DrawLoadScreen_0+0x8 ;; `?` \ 0000014C 1C008DE2 ADD R0,SP,#+28 \ 00000150 0C0080E8 STM R0,{R2,R3} \ 00000154 0C0091E8 LDM R1,{R2,R3} \ 00000158 24008DE2 ADD R0,SP,#+36 \ 0000015C 0C0080E8 STM R0,{R2,R3} 4965 4966 wsprintf(data->ws2,empty_str); \ 00000160 380094E5 LDR R0,[R4, #+56] \ 00000164 0B1087E2 ADD R1,R7,#+11 \ 00000168 240100EF SWI +292 4967 if(CurrentPrivateStatus==1) wstrcatprintf(data->ws2,I); \ 0000016C 5C0496E5 LDR R0,[R6, #+1116] \ 00000170 010050E3 CMP R0,#+1 \ 00000174 0200001A BNE ??DrawLoadScreen_1 \ 00000178 380094E5 LDR R0,[R4, #+56] \ 0000017C 14108DE2 ADD R1,SP,#+20 \ 00000180 160200EF SWI +534 4968 if(Is_Vibra_Enabled) wstrcatprintf(data->ws2,V); \ ??DrawLoadScreen_1: \ 00000184 700396E5 LDR R0,[R6, #+880] \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 0200000A BEQ ??DrawLoadScreen_2 \ 00000190 380094E5 LDR R0,[R4, #+56] \ 00000194 1C108DE2 ADD R1,SP,#+28 \ 00000198 160200EF SWI +534 4969 if(Is_Sounds_Enabled) wstrcatprintf(data->ws2,S); \ ??DrawLoadScreen_2: \ 0000019C 740396E5 LDR R0,[R6, #+884] \ 000001A0 000050E3 CMP R0,#+0 \ 000001A4 0200000A BEQ ??DrawLoadScreen_3 \ 000001A8 380094E5 LDR R0,[R4, #+56] \ 000001AC 24108DE2 ADD R1,SP,#+36 \ 000001B0 160200EF SWI +534 4970 if(Is_Double_Vibra_On) wstrcatprintf(data->ws2,"[Vr]\n"); \ ??DrawLoadScreen_3: \ 000001B4 6C0396E5 LDR R0,[R6, #+876] \ 000001B8 000050E3 CMP R0,#+0 \ 000001BC 0200000A BEQ ??DrawLoadScreen_4 \ 000001C0 380094E5 LDR R0,[R4, #+56] \ 000001C4 EC1087E2 ADD R1,R7,#+236 \ 000001C8 160200EF SWI +534 4971 if(away_m) wsprintf(data->ws2,A,away_msg_time_dace); \ ??DrawLoadScreen_4: \ 000001CC 640496E5 LDR R0,[R6, #+1124] \ 000001D0 000050E3 CMP R0,#+0 \ 000001D4 0500000A BEQ ??DrawLoadScreen_5 \ 000001D8 3400A0E3 MOV R0,#+52 \ 000001DC 680D80E3 ORR R0,R0,#0x1A00 \ 000001E0 062080E0 ADD R2,R0,R6 \ 000001E4 380094E5 LDR R0,[R4, #+56] \ 000001E8 0C108DE2 ADD R1,SP,#+12 \ 000001EC 240100EF SWI +292 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)); \ ??DrawLoadScreen_5: \ 000001F0 0100A0E3 MOV R0,#+1 \ 000001F4 2E0100EF SWI +302 \ 000001F8 0090A0E1 MOV R9,R0 \ 000001FC 0200A0E3 MOV R0,#+2 \ 00000200 2E0100EF SWI +302 \ 00000204 00A0A0E1 MOV R10,R0 \ 00000208 0B00A0E3 MOV R0,#+11 \ 0000020C C50100EF SWI +453 \ 00000210 00B0A0E1 MOV R11,R0 \ 00000214 888100EF SWI +33160 \ 00000218 00022DE9 PUSH {R9} \ 0000021C 00042DE9 PUSH {R10} \ 00000220 2010A0E3 MOV R1,#+32 \ 00000224 02002DE9 PUSH {R1} \ 00000228 013040E2 SUB R3,R0,#+1 \ 0000022C A020A0E3 MOV R2,#+160 \ 00000230 0B10A0E3 MOV R1,#+11 \ 00000234 02002DE9 PUSH {R1} \ 00000238 0B118BE0 ADD R1,R11,R11, LSL #+2 \ 0000023C A01081E2 ADD R1,R1,#+160 \ 00000240 02002DE9 PUSH {R1} \ 00000244 380094E5 LDR R0,[R4, #+56] \ 00000248 0210A0E3 MOV R1,#+2 \ 0000024C 4C0100EF SWI +332 4974 #endif 4975 4976 wsprintf(data->ws2,"Uin: %d\nRecv: %d Send: %d Blocked: %d",UIN, CountMessage[0],CountMessage[1], blocked_spam); \ 00000250 BC0396E5 LDR R0,[R6, #+956] \ 00000254 F41087E2 ADD R1,R7,#+244 \ 00000258 01002DE9 PUSH {R0} \ 0000025C 400396E5 LDR R0,[R6, #+832] \ 00000260 01002DE9 PUSH {R0} \ 00000264 3C3396E5 LDR R3,[R6, #+828] \ 00000268 ........ LDR R0,??DataTable193 ;; UIN \ 0000026C 002090E5 LDR R2,[R0, #+0] \ 00000270 380094E5 LDR R0,[R4, #+56] \ 00000274 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)); \ 00000278 0100A0E3 MOV R0,#+1 \ 0000027C 2E0100EF SWI +302 \ 00000280 0090A0E1 MOV R9,R0 \ 00000284 0000A0E3 MOV R0,#+0 \ 00000288 2E0100EF SWI +302 \ 0000028C 00A0A0E1 MOV R10,R0 \ 00000290 0500A0E3 MOV R0,#+5 \ 00000294 C50100EF SWI +453 \ 00000298 1C008DE5 STR R0,[SP, #+28] \ 0000029C 888100EF SWI +33160 \ 000002A0 00B0A0E1 MOV R11,R0 \ 000002A4 0900A0E3 MOV R0,#+9 \ 000002A8 C50100EF SWI +453 \ 000002AC 00022DE9 PUSH {R9} \ 000002B0 00042DE9 PUSH {R10} \ 000002B4 2010A0E3 MOV R1,#+32 \ 000002B8 02002DE9 PUSH {R1} \ 000002BC 01304BE2 SUB R3,R11,#+1 \ 000002C0 000180E0 ADD R0,R0,R0, LSL #+2 \ 000002C4 0810A0E3 MOV R1,#+8 \ 000002C8 02002DE9 PUSH {R1} \ 000002CC 2C209DE5 LDR R2,[SP, #+44] \ 000002D0 0A1045E2 SUB R1,R5,#+10 \ 000002D4 021041E0 SUB R1,R1,R2 \ 000002D8 031041E2 SUB R1,R1,#+3 \ 000002DC 02002DE9 PUSH {R1} \ 000002E0 0A1045E2 SUB R1,R5,#+10 \ 000002E4 000041E0 SUB R0,R1,R0 \ 000002E8 012080E2 ADD R2,R0,#+1 \ 000002EC 380094E5 LDR R0,[R4, #+56] \ 000002F0 0110A0E3 MOV R1,#+1 \ 000002F4 4C0100EF SWI +332 \ 000002F8 30D08DE2 ADD SP,SP,#+48 4979 4980 4981 if(connect_state==3) \ 000002FC 8C2496E5 LDR R2,[R6, #+1164] \ 00000300 3C00A0E3 MOV R0,#+60 \ 00000304 500E80E3 ORR R0,R0,#0x500 \ 00000308 011080E3 ORR R1,R0,#0x1 \ 0000030C 029080E3 ORR R9,R0,#0x2 \ 00000310 030052E3 CMP R2,#+3 \ 00000314 2E00001A BNE ??DrawLoadScreen_6 \ 00000318 0630D1E7 LDRB R3,[R1, +R6] \ 0000031C 0610D9E7 LDRB R1,[R9, +R6] \ 00000320 ........ LDR R9,??DataTable194 ;; Auto_Status \ 00000324 0620D0E7 LDRB R2,[R0, +R6] \ 00000328 009099E5 LDR R9,[R9, #+0] \ 0000032C 380094E5 LDR R0,[R4, #+56] \ 00000330 000059E3 CMP R9,#+0 \ 00000334 2300000A BEQ ??DrawLoadScreen_7 4982 { 4983 if(Auto_Status) 4984 { 4985 int m = (msg_away_timer*5)/60; \ 00000338 609496E5 LDR R9,[R6, #+1120] \ 0000033C ........ LDR R10,??DataTable197 ;; 0xffffffff88888889 \ 00000340 099189E0 ADD R9,R9,R9, LSL #+2 \ 00000344 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); \ 00000348 ........ LDR R11,??DataTable197 ;; 0xffffffff88888889 \ 0000034C 09C08CE0 ADD R12,R12,R9 \ 00000350 CCC2A0E1 ASR R12,R12,#+5 \ 00000354 A9AF8CE0 ADD R10,R12,R9, LSR #+31 \ 00000358 99CBCEE0 SMULL R12,LR,R9,R11 \ 0000035C 3CC0A0E3 MOV R12,#+60 \ 00000360 09E08EE0 ADD LR,LR,R9 \ 00000364 CEE2A0E1 ASR LR,LR,#+5 \ 00000368 A9EF8EE0 ADD LR,LR,R9, LSR #+31 \ 0000036C 9C0E0EE0 MUL LR,R12,LR \ 00000370 0E9049E0 SUB R9,R9,LR \ 00000374 00022DE9 PUSH {R9} \ 00000378 0B90A0E1 MOV R9,R11 \ 0000037C 9AB9CCE0 SMULL R11,R12,R10,R9 \ 00000380 3CB0A0E3 MOV R11,#+60 \ 00000384 0AC08CE0 ADD R12,R12,R10 \ 00000388 CCC2A0E1 ASR R12,R12,#+5 \ 0000038C AACF8CE0 ADD R12,R12,R10, LSR #+31 \ 00000390 9B0C0CE0 MUL R12,R11,R12 \ 00000394 0C904AE0 SUB R9,R10,R12 \ 00000398 00022DE9 PUSH {R9} \ 0000039C ........ LDR R9,??DataTable197 ;; 0xffffffff88888889 \ 000003A0 99BACCE0 SMULL R11,R12,R9,R10 \ 000003A4 0AC08CE0 ADD R12,R12,R10 \ 000003A8 CCC2A0E1 ASR R12,R12,#+5 \ 000003AC AA9F8CE0 ADD R9,R12,R10, LSR #+31 \ 000003B0 00022DE9 PUSH {R9} \ 000003B4 02002DE9 PUSH {R1} \ 000003B8 471F87E2 ADD R1,R7,#+284 \ 000003BC 240100EF SWI +292 \ 000003C0 10D08DE2 ADD SP,SP,#+16 \ 000003C4 0A0000EA B ??DrawLoadScreen_8 4989 } 4990 else 4991 wsprintf(data->ws2,"Online: %02d:%02d:%02d",uptime.hour, uptime.min, uptime.sec); \ ??DrawLoadScreen_7: \ 000003C8 02002DE9 PUSH {R1} \ 000003CC 541F87E2 ADD R1,R7,#+336 \ 000003D0 050000EA B ??DrawLoadScreen_9 4992 } 4993 else 4994 wsprintf(data->ws2,"Offline [%02d:%02d:%02d]",uptime.hour, uptime.min, uptime.sec); \ ??DrawLoadScreen_6: \ 000003D4 0620D9E7 LDRB R2,[R9, +R6] \ 000003D8 04002DE9 PUSH {R2} \ 000003DC 0630D1E7 LDRB R3,[R1, +R6] \ 000003E0 0620D0E7 LDRB R2,[R0, +R6] \ 000003E4 380094E5 LDR R0,[R4, #+56] \ 000003E8 5A1F87E2 ADD R1,R7,#+360 \ ??DrawLoadScreen_9: \ 000003EC 240100EF SWI +292 \ 000003F0 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_8: \ 000003F4 0100A0E3 MOV R0,#+1 \ 000003F8 2E0100EF SWI +302 \ 000003FC 0090A0E1 MOV R9,R0 \ 00000400 0000A0E3 MOV R0,#+0 \ 00000404 2E0100EF SWI +302 \ 00000408 00A0A0E1 MOV R10,R0 \ 0000040C 0500A0E3 MOV R0,#+5 \ 00000410 C50100EF SWI +453 \ 00000414 00008DE5 STR R0,[SP, #+0] \ 00000418 888100EF SWI +33160 \ 0000041C 00B0A0E1 MOV R11,R0 \ 00000420 0900A0E3 MOV R0,#+9 \ 00000424 C50100EF SWI +453 \ 00000428 00022DE9 PUSH {R9} \ 0000042C 00042DE9 PUSH {R10} \ 00000430 2010A0E3 MOV R1,#+32 \ 00000434 02002DE9 PUSH {R1} \ 00000438 01304BE2 SUB R3,R11,#+1 \ 0000043C 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000440 0810A0E3 MOV R1,#+8 \ 00000444 02002DE9 PUSH {R1} \ 00000448 10209DE5 LDR R2,[SP, #+16] \ 0000044C 0A1045E2 SUB R1,R5,#+10 \ 00000450 021041E0 SUB R1,R1,R2 \ 00000454 031041E2 SUB R1,R1,#+3 \ 00000458 02002DE9 PUSH {R1} \ 0000045C 0A1045E2 SUB R1,R5,#+10 4998 4999 5000 wsprintf(data->ws2,percent_t,cltop ? lgpData[LGP_GrsKeyClist] : empty_str); \ 00000460 ........ LDR R5,??DataTable202 ;; lgpData \ 00000464 000041E0 SUB R0,R1,R0 \ 00000468 012080E2 ADD R2,R0,#+1 \ 0000046C 380094E5 LDR R0,[R4, #+56] \ 00000470 0110A0E3 MOV R1,#+1 \ 00000474 4C0100EF SWI +332 \ 00000478 540396E5 LDR R0,[R6, #+852] \ 0000047C 14D08DE2 ADD SP,SP,#+20 \ 00000480 000050E3 CMP R0,#+0 \ 00000484 380094E5 LDR R0,[R4, #+56] \ 00000488 6C219515 LDRNE R2,[R5, #+364] \ 0000048C 081087E2 ADD R1,R7,#+8 \ 00000490 0B208702 ADDEQ R2,R7,#+11 \ 00000494 240100EF SWI +292 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)); \ 00000498 0100A0E3 MOV R0,#+1 \ 0000049C 2E0100EF SWI +302 \ 000004A0 0090A0E1 MOV R9,R0 \ 000004A4 0000A0E3 MOV R0,#+0 \ 000004A8 2E0100EF SWI +302 \ 000004AC 00A0A0E1 MOV R10,R0 \ 000004B0 0500A0E3 MOV R0,#+5 \ 000004B4 C50100EF SWI +453 \ 000004B8 04109DE5 LDR R1,[SP, #+4] \ 000004BC 00022DE9 PUSH {R9} \ 000004C0 C160A0E1 ASR R6,R1,#+1 \ 000004C4 00042DE9 PUSH {R10} \ 000004C8 2410A0E3 MOV R1,#+36 \ 000004CC 02002DE9 PUSH {R1} \ 000004D0 002048E0 SUB R2,R8,R0 \ 000004D4 0510A0E3 MOV R1,#+5 \ 000004D8 02002DE9 PUSH {R1} \ 000004DC 0810A0E1 MOV R1,R8 \ 000004E0 02002DE9 PUSH {R1} \ 000004E4 1C309DE5 LDR R3,[SP, #+28] \ 000004E8 380094E5 LDR R0,[R4, #+56] \ 000004EC 0610A0E1 MOV R1,R6 \ 000004F0 4C0100EF SWI +332 5003 wsprintf(data->ws2,percent_t, lgpData[LGP_GrsKeyExit] ); \ 000004F4 380094E5 LDR R0,[R4, #+56] \ 000004F8 682195E5 LDR R2,[R5, #+360] \ 000004FC 081087E2 ADD R1,R7,#+8 \ 00000500 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)); \ 00000504 0100A0E3 MOV R0,#+1 \ 00000508 2E0100EF SWI +302 \ 0000050C 0050A0E1 MOV R5,R0 \ 00000510 0000A0E3 MOV R0,#+0 \ 00000514 2E0100EF SWI +302 \ 00000518 0070A0E1 MOV R7,R0 \ 0000051C 0500A0E3 MOV R0,#+5 \ 00000520 C50100EF SWI +453 \ 00000524 20002DE9 PUSH {R5} \ 00000528 80002DE9 PUSH {R7} \ 0000052C 2110A0E3 MOV R1,#+33 \ 00000530 02002DE9 PUSH {R1} \ 00000534 0630A0E1 MOV R3,R6 \ 00000538 002048E0 SUB R2,R8,R0 \ 0000053C 0510A0E3 MOV R1,#+5 \ 00000540 02002DE9 PUSH {R1} \ 00000544 0810A0E1 MOV R1,R8 \ 00000548 02002DE9 PUSH {R1} \ 0000054C 380094E5 LDR R0,[R4, #+56] \ 00000550 0310A0E3 MOV R1,#+3 \ 00000554 4C0100EF SWI +332 \ 00000558 28D08DE2 ADD SP,SP,#+40 5006 } \ 0000055C 2CD08DE2 ADD SP,SP,#+44 \ 00000560 F08FBDE8 POP {R4-R11,PC} ;; return \ ??DrawLoadScreen_0: \ 00000564 ........ DC32 `?` \ 00000568 ........ DC32 `?` \ 0000056C ........ DC32 `?` 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,??DataTable221 ;; HeaderShot \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C B40495E5 LDR R0,[R5, #+1204] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 3080BD18 POPNE {R4,R5,PC} 5013 if(IsGuiOnTop(maingui_id)) \ 00000018 5C0395E5 LDR R0,[R5, #+860] \ 0000001C 350100EF SWI +309 \ 00000020 000050E3 CMP R0,#+0 \ 00000024 3080BD08 POPEQ {R4,R5,PC} 5014 { 5015 if(ShowLoadScreen) \ 00000028 A00395E5 LDR R0,[R5, #+928] \ 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); \ ??method0_0: \ 00000040 3B0200EF SWI +571 5027 #else 5028 DisableIconBar(1); 5029 #endif 5030 #endif 5031 DrawContactList(); \ 00000044 3040BDE8 POP {R4,R5,LR} ;; Pop \ 00000048 ........ 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,??DataTable221 ;; HeaderShot \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 400FA0E3 MOV R0,#+256 \ 00000010 250100EF SWI +293 \ 00000014 340084E5 STR R0,[R4, #+52] \ 00000018 400FA0E3 MOV R0,#+256 \ 0000001C 250100EF SWI +293 \ 00000020 380084E5 STR R0,[R4, #+56] \ 00000024 888100EF SWI +33160 \ 00000028 010040E2 SUB R0,R0,#+1 \ 0000002C EC0485E5 STR R0,[R5, #+1260] 5048 scr_h = ScreenH()-1; \ 00000030 898100EF SWI +33161 \ 00000034 010040E2 SUB R0,R0,#+1 \ 00000038 F00485E5 STR R0,[R5, #+1264] 5049 clistm = malloc(sizeof(GUIMENU)); \ 0000003C 7800A0E3 MOV R0,#+120 \ 00000040 140000EF SWI +20 \ 00000044 A40385E5 STR R0,[R5, #+932] 5050 5051 clistm->font = ClFont; \ 00000048 ........ LDR R0,??DataTable201 ;; ClFont \ 0000004C A41395E5 LDR R1,[R5, #+932] \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 1C0081E5 STR R0,[R1, #+28] 5052 clistm->FontH = FontH(ClFont); \ 00000058 C50100EF SWI +453 \ 0000005C A41395E5 LDR R1,[R5, #+932] \ 00000060 200081E5 STR R0,[R1, #+32] 5053 5054 menu_sk[0].lgp_id=(int)lgpData[LGP_Select]; \ 00000064 ........ LDR R0,??DataTable202 ;; lgpData \ 00000068 301090E5 LDR R1,[R0, #+48] 5055 menu_sk[1].lgp_id=(int)lgpData[LGP_Close]; \ 0000006C 200090E5 LDR R0,[R0, #+32] \ 00000070 101385E5 STR R1,[R5, #+784] \ 00000074 180385E5 STR R0,[R5, #+792] 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 E80485E5 STR R0,[R5, #+1256] 5061 clistm->totalItems = 0;//CountContacts(); //общее кол-во контактов \ 00000084 A40395E5 LDR R0,[R5, #+932] \ 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 F0402DE9 PUSH {R4-R7,LR} 5071 5072 FreeWS(data->ws1); 5073 FreeWS(data->ws2); 5074 #ifdef GUI_INTERFACE 5075 if(clistm) mfree(clistm); \ 00000004 ........ LDR R5,??DataTable221 ;; HeaderShot \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 340094E5 LDR R0,[R4, #+52] \ 00000010 290100EF SWI +297 \ 00000014 380094E5 LDR R0,[R4, #+56] \ 00000018 290100EF SWI +297 \ 0000001C A40395E5 LDR R0,[R5, #+932] \ 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 E80495E5 LDR R0,[R5, #+1256] \ 00000030 0060A0E3 MOV R6,#+0 \ 00000034 A46385E5 STR R6,[R5, #+932] \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 0000000A BEQ ??method2_1 \ 00000040 150000EF SWI +21 5078 myack = NULL; 5079 #ifdef ELKA 5080 if(strlen(SoftShot.bitmap)) mfree(SoftShot.bitmap); \ ??method2_1: \ 00000044 38709FE5 LDR R7,??method2_2 ;; SoftShot \ 00000048 E86485E5 STR R6,[R5, #+1256] \ 0000004C 080097E5 LDR R0,[R7, #+8] \ 00000050 1B0000EF SWI +27 \ 00000054 000050E3 CMP R0,#+0 \ 00000058 0100000A BEQ ??method2_3 \ 0000005C 080097E5 LDR R0,[R7, #+8] \ 00000060 150000EF SWI +21 5081 if(strlen(HeaderShot.bitmap)) mfree(HeaderShot.bitmap); \ ??method2_3: \ 00000064 080095E5 LDR R0,[R5, #+8] \ 00000068 1B0000EF SWI +27 \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 0100000A BEQ ??method2_4 \ 00000074 080095E5 LDR R0,[R5, #+8] \ 00000078 150000EF SWI +21 5082 #endif 5083 #endif 5084 data->gui.state=0; \ ??method2_4: \ 0000007C 0C60C4E5 STRB R6,[R4, #+12] 5085 } \ 00000080 F080BDE8 POP {R4-R7,PC} ;; return \ ??method2_2: \ 00000084 ........ DC32 SoftShot 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 04009EE5 LDR R0,[LR, #+4] \ 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 ;; HeaderShot \ 0000002C 08E09EE5 LDR LR,[LR, #+8] \ 00000030 A08394E5 LDR R8,[R4, #+928] \ 00000034 ........ LDR R5,??DataTable232 ;; create_connect \ 00000038 ........ LDR R1,??DataTable237 ;; end_socket \ 0000003C 7400A0E3 MOV R0,#+116 \ 00000040 680D80E3 ORR R0,R0,#0x1A00 \ 00000044 046080E0 ADD R6,R0,R4 \ 00000048 ........ LDR R0,??DataTable207 ;; 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 A0C384E5 STR R12,[R4, #+928] \ 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 540394E5 LDR R0,[R4, #+852] \ 000000C8 000050E3 CMP R0,#+0 \ 000000CC 0200001A BNE ??LoadOnKey_5 \ 000000D0 900494E5 LDR R0,[R4, #+1168] \ 000000D4 020050E1 CMP R0,R2 \ 000000D8 2D00001A BNE ??LoadOnKey_1 \ ??LoadOnKey_5: \ 000000DC A03384E5 STR R3,[R4, #+928] \ 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 503484E5 STR R3,[R4, #+1104] 5126 if ((connect_state==0)&&(sock==-1)) \ 000000E8 8C0494E5 LDR R0,[R4, #+1164] \ 000000EC 000050E3 CMP R0,#+0 \ 000000F0 90049405 LDREQ R0,[R4, #+1168] \ 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 C07484E5 STR R7,[R4, #+1216] 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 503484E5 STR R3,[R4, #+1104] 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 741394E5 LDR R1,[R4, #+884] \ 00000124 000051E3 CMP R1,#+0 \ 00000128 00C0A013 MOVNE R12,#+0 \ 0000012C 74C384E5 STR R12,[R4, #+884] 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 701394E5 LDR R1,[R4, #+880] \ 00000140 000051E3 CMP R1,#+0 \ 00000144 00C0A013 MOVNE R12,#+0 \ 00000148 70C384E5 STR R12,[R4, #+880] 5146 SUBPROC((void*)WriteDefSettings); \ 0000014C F7FFFFEA B ??LoadOnKey_9 5147 break; 5148 case '3': 5149 if(CurrentPrivateStatus!=1) \ ??LoadOnKey_13: \ 00000150 5C0494E5 LDR R0,[R4, #+1116] \ 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 6C1394E5 LDR R1,[R4, #+876] \ 0000016C 000051E3 CMP R1,#+0 \ 00000170 00C0A013 MOVNE R12,#+0 \ 00000174 6CC384E5 STR R12,[R4, #+876] 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 50C484E5 STR R12,[R4, #+1104] 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 ;; HeaderShot + 928 \ 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 HeaderShot + 928 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,??DataTable225 ;; Canvas \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 ........ LDR R4,??DataTable221 ;; HeaderShot \ 0000000C CC0FA0E3 MOV R0,#+816 \ 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 341384E5 STR R1,[R4, #+820] 5212 tmr_gipc.data=NULL; \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 381384E5 STR R1,[R4, #+824] 5213 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_ONESECOND,&tmr_gipc); \ 0000002C 043080E0 ADD R3,R0,R4 \ 00000030 0820A0E3 MOV R2,#+8 \ 00000034 B010A0E3 MOV R1,#+176 \ 00000038 DE1C81E3 ORR R1,R1,#0xDE00 \ 0000003C 0900A0E3 MOV R0,#+9 \ 00000040 420C80E3 ORR R0,R0,#0x4200 \ 00000044 000100EF SWI +256 5214 GBS_StartTimerProc(&OneSecTmr,TMR_SECOND,OneSecondTimer); \ 00000048 ........ LDR R2,??DataTable212 ;; OneSecondTimer \ 0000004C D810A0E3 MOV R1,#+216 \ 00000050 E800A0E3 MOV R0,#+232 \ 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 \ `?`: \ 00000000 5B413A202573 DC8 "[A: %s]" \ 5D00 \ percent_t: \ 00000008 257400 DC8 "%t" \ empty_str: \ 0000000B 00 DC8 "" \ 0000000C 253032642025 DC8 "%02d %s" \ 7300 \ 00000014 F7E0F1E000 DC8 "\367\340\361\340" \ 00000019 000000 DC8 0, 0, 0 \ 0000001C F7E0F1EEE200 DC8 "\367\340\361\356\342" \ 00000022 0000 DC8 0, 0 \ 00000024 ECE8EDF3F2F3 DC8 "\354\350\355\363\362\363" \ 00 \ 0000002B 00 DC8 0 \ 0000002C ECE8EDF3F2FB DC8 "\354\350\355\363\362\373" \ 00 \ 00000033 00 DC8 0 \ 00000034 ECE8EDF3F200 DC8 "\354\350\355\363\362" \ 0000003A 0000 DC8 0, 0 \ 0000003C C0E2F2EEEEF2 DC8 0C0H, 0E2H, 0F2H, 0EEH, 0EEH, 0F2H, 0E2H, 0E5H \ E2E5 \ 00000044 F2F7E8EA3A20 DC8 0F2H, 0F7H, 0E8H, 0EAH, 3AH, 20H, 25H, 73H \ 2573 \ 0000004C 202573212025 DC8 20H, 25H, 73H, 21H, 20H, 25H, 73H, 20H \ 7320 \ 00000054 28202573205B DC8 28H, 20H, 25H, 73H, 20H, 5BH, 0E1H, 0E5H \ E1E5 \ 0000005C E7E4E5F1F2E2 DC8 0E7H, 0E4H, 0E5H, 0F1H, 0F2H, 0E2H, 0F3H, 0FEH \ F3FE \ 00000064 202573202530 DC8 20H, 25H, 73H, 20H, 25H, 30H, 32H, 64H \ 3264 \ 0000006C 202573202530 DC8 20H, 25H, 73H, 20H, 25H, 30H, 32H, 64H \ 3264 \ 00000074 2025735D2029 DC8 20H, 25H, 73H, 5DH, 20H, 29H, 0 \ 00 \ 0000007B 00 DC8 0 \ 0000007C F1E5EAF3EDE4 DC8 "\361\345\352\363\355\344" \ 00 \ 00000083 00 DC8 0 \ 00000084 53656E642061 DC8 "Send autoaway text..." \ 75746F617761 \ 792074657874 \ 2E2E2E00 \ 0000009A 0000 DC8 0, 0 \ 0000009C 25642F256400 DC8 "%d/%d" \ 000000A2 0000 DC8 0, 0 \ 000000A4 5B25642F2564 DC8 "[%d/%d]" \ 5D00 \ 000000AC 5B256425255D DC8 "[%d%%]" \ 00 \ 000000B3 00 DC8 0 \ 000000B4 53746174653A DC8 53H, 74H, 61H, 74H, 65H, 3AH, 20H, 25H \ 2025 \ 000000BC 642C20525873 DC8 64H, 2CH, 20H, 52H, 58H, 73H, 74H, 61H \ 7461 \ 000000C4 74653A202564 DC8 74H, 65H, 3AH, 20H, 25H, 64H, 0AH, 52H \ 0A52 \ 000000CC 783A2564622C DC8 78H, 3AH, 25H, 64H, 62H, 2CH, 54H, 78H \ 5478 \ 000000D4 3A2564620A51 DC8 3AH, 25H, 64H, 62H, 0AH, 51H, 75H, 65H \ 7565 \ 000000DC 75653A202564 DC8 75H, 65H, 3AH, 20H, 25H, 64H, 62H, 0AH \ 620A \ 000000E4 25730A257400 DC8 25H, 73H, 0AH, 25H, 74H, 0 \ 000000EA 0000 DC8 0, 0 \ 000000EC 5B56725D0A00 DC8 "[Vr]\012" \ 000000F2 0000 DC8 0, 0 \ 000000F4 55696E3A2025 DC8 "Uin: %d\012Recv: %d Send: %d Blocked: %d" \ 640A52656376 \ 3A2025642053 \ 656E643A2025 \ 6420426C6F63 \ 6B65643A2025 \ 6400 \ 0000011A 0000 DC8 0, 0 \ 0000011C 4F6E6C696E65 DC8 4FH, 6EH, 6CH, 69H, 6EH, 65H, 3AH, 20H \ 3A20 \ 00000124 253032643A25 DC8 25H, 30H, 32H, 64H, 3AH, 25H, 30H, 32H \ 3032 \ 0000012C 643A25303264 DC8 64H, 3AH, 25H, 30H, 32H, 64H, 20H, 20H \ 2020 \ 00000134 206E6F742061 DC8 20H, 6EH, 6FH, 74H, 20H, 61H, 63H, 74H \ 6374 \ 0000013C 696F6E202530 DC8 69H, 6FH, 6EH, 20H, 25H, 30H, 32H, 64H \ 3264 \ 00000144 3A253032643A DC8 3AH, 25H, 30H, 32H, 64H, 3AH, 25H, 30H \ 2530 \ 0000014C 326400 DC8 32H, 64H, 0 \ 0000014F 00 DC8 0 \ 00000150 4F6E6C696E65 DC8 "Online: %02d:%02d:%02d" \ 3A2025303264 \ 3A253032643A \ 2530326400 \ 00000167 00 DC8 0 \ 00000168 4F66666C696E DC8 "Offline [%02d:%02d:%02d]" \ 65205B253032 \ 643A25303264 \ 3A253032645D \ 00 \ 00000181 000000 DC8 0, 0, 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 4000A0E3 MOV R0,#+64 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 4010A0E3 MOV R1,#+64 \ 0000001C 1D0100EF SWI +285 \ 00000020 898100EF SWI +33161 \ 00000024 0040A0E1 MOV R4,R0 \ 00000028 888100EF SWI +33160 \ 0000002C 011044E2 SUB R1,R4,#+1 \ 00000030 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 200087E5 STR R0,[R7, #+32] 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 ;; HeaderShot \ 00000070 5C0385E5 STR R0,[R5, #+860] 5232 5233 ews=AllocWS(16384); \ 00000074 400CA0E3 MOV R0,#+16384 \ 00000078 250100EF SWI +293 \ 0000007C C80385E5 STR R0,[R5, #+968] 5234 wsBuffer=AllocWS(4096); \ 00000080 400DA0E3 MOV R0,#+4096 \ 00000084 250100EF SWI +293 \ 00000088 980385E5 STR R0,[R5, #+920] 5235 // MutexCreate(&contactlist_mtx); 5236 //#ifndef START_OFFLINE 5237 DNR_TRIES = 3; \ 0000008C 0300A0E3 MOV R0,#+3 \ 00000090 C00485E5 STR R0,[R5, #+1216] 5238 //#endif 5239 // SUBPROC((void *)InitSmiles); 5240 // SUBPROC((void *)create_connect); 5241 CountMessage[0] = 0; \ 00000094 3C6385E5 STR R6,[R5, #+828] 5242 CountMessage[1] = 0; \ 00000098 406385E5 STR R6,[R5, #+832] 5243 5244 FreeAllList(); \ 0000009C ........ _BLF FreeAllList,??FreeAllList??rA 5245 5246 #ifdef GUI_INTERFACE 5247 GBS_StartTimerProc(&OneSecTmr,TMR_SECOND*10,OneSecondTimer); \ 000000A0 ........ LDR R2,??DataTable212 ;; OneSecondTimer \ 000000A4 871EA0E3 MOV R1,#+2160 \ 000000A8 E800A0E3 MOV R0,#+232 \ 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,??DataTable213 ;; process_active_timer \ 000000BC 871EA0E3 MOV R1,#+2160 \ 000000C0 8400A0E3 MOV R0,#+132 \ 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,??DataTable245 ;; 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 C90FA0E3 MOV R0,#+804 \ 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 281385E5 STR R1,[R5, #+808] 5253 gipc.data=(void *)-1; \ 00000104 0610E0E1 MVN R1,R6 \ 00000108 2C1385E5 STR R1,[R5, #+812] 5254 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 0000010C 053080E0 ADD R3,R0,R5 \ 00000110 0120A0E3 MOV R2,#+1 \ 00000114 B010A0E3 MOV R1,#+176 \ 00000118 DE1C81E3 ORR R1,R1,#0xDE00 \ 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,??DataTable221 ;; HeaderShot \ 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 D800A0E3 MOV R0,#+216 \ 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 E800A0E3 MOV R0,#+232 \ 00000030 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 8C0100EF SWI +396 5265 GBS_DelTimer(&tmr_active); \ 0000003C 8400A0E3 MOV R0,#+132 \ 00000040 680D80E3 ORR R0,R0,#0x1A00 \ 00000044 040080E0 ADD R0,R0,R4 \ 00000048 8C0100EF SWI +396 5266 GBS_DelTimer(&tmr_vibra); \ 0000004C 6400A0E3 MOV R0,#+100 \ 00000050 680D80E3 ORR R0,R0,#0x1A00 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 8C0100EF SWI +396 5267 GBS_DelTimer(&reconnect_tmr); \ 0000005C 7400A0E3 MOV R0,#+116 \ 00000060 680D80E3 ORR R0,R0,#0x1A00 \ 00000064 040080E0 ADD R0,R0,R4 \ 00000068 8C0100EF SWI +396 5268 GBS_DelTimer(&tmr_illumination); \ 0000006C E400A0E3 MOV R0,#+228 \ 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); \ 0000007C A400A0E3 MOV R0,#+164 \ 00000080 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000084 040080E0 ADD R0,R0,R4 \ 00000088 8C0100EF SWI +396 5273 #endif 5274 GBS_DelTimer(&remind_tmr); \ 0000008C 5400A0E3 MOV R0,#+84 \ 00000090 680D80E3 ORR R0,R0,#0x1A00 \ 00000094 040080E0 ADD R0,R0,R4 \ 00000098 8C0100EF SWI +396 5275 GBS_DelTimer(&popup[POPUP_ON].tmr); \ 0000009C 500084E2 ADD R0,R4,#+80 \ 000000A0 8C0100EF SWI +396 5276 GBS_DelTimer(&popup[POPUP_OFF].tmr); \ 000000A4 B00084E2 ADD R0,R4,#+176 \ 000000A8 8C0100EF SWI +396 5277 GBS_DelTimer(&popup[POPUP_MSG].tmr); \ 000000AC 440F84E2 ADD R0,R4,#+272 \ 000000B0 8C0100EF SWI +396 5278 GBS_DelTimer(&away_tmr); \ 000000B4 4400A0E3 MOV R0,#+68 \ 000000B8 680D80E3 ORR R0,R0,#0x1A00 \ 000000BC 040080E0 ADD R0,R0,R4 \ 000000C0 8C0100EF SWI +396 5279 5280 FreeAllList(); \ 000000C4 ........ _BLF FreeAllList,??FreeAllList??rA 5281 FreeWS(wsBuffer); \ 000000C8 980394E5 LDR R0,[R4, #+920] \ 000000CC 290100EF SWI +297 5282 5283 SetVibration(0); \ 000000D0 0000A0E3 MOV R0,#+0 \ 000000D4 7C0000EF SWI +124 5284 FreeTemplates(); \ 000000D8 ........ BL FreeTemplates 5285 FreeCLIST(); \ 000000DC ........ _BLF FreeCLIST,??FreeCLIST??rA 5286 free_ICONS(); \ 000000E0 ........ BL free_ICONS 5287 // FreeSmiles(); 5288 FreeWS(ews); \ 000000E4 C80394E5 LDR R0,[R4, #+968] \ 000000E8 290100EF SWI +297 5289 FreeXStatusText(); \ 000000EC ........ _BLF FreeXStatusText,??FreeXStatusText??rA 5290 lgpFreeLangPack(); \ 000000F0 ........ _BLF lgpFreeLangPack,??lgpFreeLangPack??rA 5291 // MutexDestroy(&contactlist_mtx); 5292 /* SUBPROC((void *)FreeSmiles);// вызывается в FreeAllList() 5293 SUBPROC((void *)FreeXStatusesImg);*/ 5294 SUBPROC((void *)end_socket); \ 000000F4 ........ LDR R0,??DataTable237 ;; end_socket \ 000000F8 710100EF SWI +369 5295 SUBPROC((void *)ClearSendQ); \ 000000FC ........ LDR R0,??DataTable238 ;; ClearSendQ \ 00000100 710100EF SWI +369 5296 SUBPROC((void *)ElfKiller); \ 00000104 ........ LDR R0,??DataTable247 ;; ElfKiller \ 00000108 710100EF SWI +369 5297 } \ 0000010C 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 ;; HeaderShot \ 00000004 00402DE9 PUSH {LR} \ 00000008 AC1490E5 LDR R1,[R0, #+1196] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 5302 { 5303 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 C01480E5 STR R1,[R0, #+1216] 5304 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable232 ;; 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 ;; HeaderShot \ 00000008 CB0FA0E3 MOV R0,#+812 \ 0000000C 041090E7 LDR R1,[R0, +R4] \ 00000010 010071E3 CMN R1,#+1 \ 00000014 1200000A BEQ ??CheckDoubleRun_0 5312 { 5313 gipc.name_to=ipc_xtask_name; \ 00000018 ........ LDR R3,??DataTable225 ;; Canvas \ 0000001C C92FA0E3 MOV R2,#+804 \ 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 283384E5 STR R3,[R4, #+808] 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 B010A0E3 MOV R1,#+176 \ 00000040 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000044 0900A0E3 MOV R0,#+9 \ 00000048 420C80E3 ORR R0,R0,#0x4200 \ 0000004C 000100EF SWI +256 5317 LockSched(); \ 00000050 460100EF SWI +326 5318 CloseCSM(maincsm_id); \ 00000054 580394E5 LDR R0,[R4, #+856] \ 00000058 FC0100EF SWI +508 5319 //ShowMSG(1,(int)LG_ALREADY_STARTED); 5320 UnlockSched(); \ 0000005C 470100EF SWI +327 \ 00000060 1080BDE8 POP {R4,PC} 5321 } 5322 else 5323 { 5324 LoadingImages();//инициализируем все картинки \ ??CheckDoubleRun_0: \ 00000064 ........ _BLF LoadingImages,??LoadingImages??rA 5325 #ifndef START_OFFLINE 5326 create_connect(); \ 00000068 ........ BL create_connect 5327 #else 5328 LoadLocalCL(); 5329 #endif 5330 } 5331 } \ 0000006C 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,??DataTable223 ;; DEVELOP_IF \ 00000008 ........ LDR R4,??DataTable244 ;; HeaderShot \ 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 9C538405 STREQ R5,[R4, #+924] 5341 if(IsUnlocked() && develop_by_unlock == 1) \ 00000034 430000EF SWI +67 \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 0B00000A BEQ ??maincsm_onmessage_2 \ 00000040 9C0394E5 LDR R0,[R4, #+924] \ 00000044 010050E3 CMP R0,#+1 \ 00000048 0800001A BNE ??maincsm_onmessage_2 5342 { 5343 develop_by_unlock = 0; \ 0000004C 9C6384E5 STR R6,[R4, #+924] 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 581394E5 LDR R1,[R4, #+856] \ 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 040099E5 LDR R0,[R9, #+4] \ 00000074 ........ LDR R8,??DataTable225 ;; Canvas \ 00000078 9B7FA0E3 MOV R7,#+620 \ 0000007C B010A0E3 MOV R1,#+176 \ 00000080 DE1C81E3 ORR R1,R1,#0xDE00 \ 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 0CA099E5 LDR R10,[R9, #+12] \ 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 081099E5 LDR R1,[R9, #+8] \ 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 01060654 DC8 +1,+6,+6,+84 \ 000000D4 8D06A71E DC8 +141,+6,+167,+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 F8079FE5 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 2C0090E5 LDR R0,[R0, #+44] \ 000000FC 350100EF SWI +309 \ 00000100 000050E3 CMP R0,#+0 \ 00000104 E000000A BEQ ??maincsm_onmessage_7 5535 { 5536 extern const int ICON_IDLE_ENABLE; 5537 if(ICON_IDLE_ENABLE) \ 00000108 D8079FE5 LDR R0,??maincsm_onmessage_6+0x4 ;; ICON_IDLE_ENABLE \ 0000010C 000090E5 LDR R0,[R0, #+0] \ 00000110 000050E3 CMP R0,#+0 \ 00000114 DC00000A BEQ ??maincsm_onmessage_7 5538 { 5539 GUI *igui=GetTopGUI(); 5540 if (igui) //И он существует \ 00000118 4D0100EF SWI +333 \ 0000011C 000050E3 CMP R0,#+0 \ 00000120 D900000A 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 900394E5 LDR R0,[R4, #+912] \ 00000130 000050E3 CMP R0,#+0 \ 00000134 B000000A BEQ ??maincsm_onmessage_8 5545 icn=IS_MSG; \ 00000138 0D00A0E3 MOV R0,#+13 \ 0000013C B40000EA B ??maincsm_onmessage_9 \ ??maincsm_onmessage_5: \ 00000140 580394E5 LDR R0,[R4, #+856] \ 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 SLI_check \ 0000015C ........ BL UpTime \ 00000160 A00394E5 LDR R0,[R4, #+928] \ 00000164 000050E3 CMP R0,#+0 \ 00000168 0200000A BEQ ??maincsm_onmessage_11 \ 0000016C B40494E5 LDR R0,[R4, #+1204] \ 00000170 000050E3 CMP R0,#+0 \ 00000174 B8538405 STREQ R5,[R4, #+952] \ ??maincsm_onmessage_11: \ 00000178 A80394E5 LDR R0,[R4, #+936] \ 0000017C 010040E2 SUB R0,R0,#+1 \ 00000180 A80384E5 STR R0,[R4, #+936] \ 00000184 010050E3 CMP R0,#+1 \ 00000188 0F0000AA BGE ??maincsm_onmessage_12 \ 0000018C 010070E3 CMN R0,#+1 \ 00000190 1000000A BEQ ??maincsm_onmessage_13 \ 00000194 000065E2 RSB R0,R5,#+0 \ 00000198 A80384E5 STR R0,[R4, #+936] \ 0000019C B46384E5 STR R6,[R4, #+948] \ 000001A0 8010A0E3 MOV R1,#+128 \ 000001A4 6400A0E3 MOV R0,#+100 \ 000001A8 5C0D80E3 ORR R0,R0,#0x1700 \ 000001AC 040080E0 ADD R0,R0,R4 \ 000001B0 1D0100EF SWI +285 \ 000001B4 C800A0E3 MOV R0,#+200 \ 000001B8 6C0D80E3 ORR R0,R0,#0x1B00 \ 000001BC 040080E0 ADD R0,R0,R4 \ 000001C0 8C0100EF SWI +396 \ 000001C4 DC6484E5 STR R6,[R4, #+1244] \ 000001C8 D86484E5 STR R6,[R4, #+1240] \ ??maincsm_onmessage_12: \ 000001CC B40494E5 LDR R0,[R4, #+1204] \ 000001D0 000050E3 CMP R0,#+0 \ 000001D4 B8538405 STREQ R5,[R4, #+952] \ ??maincsm_onmessage_13: \ 000001D8 C00394E5 LDR R0,[R4, #+960] \ 000001DC 010050E3 CMP R0,#+1 \ 000001E0 010040A2 SUBGE R0,R0,#+1 \ 000001E4 C00384A5 STRGE R0,[R4, #+960] \ 000001E8 C40394E5 LDR R0,[R4, #+964] \ 000001EC 011040E2 SUB R1,R0,#+1 \ 000001F0 C41384E5 STR R1,[R4, #+964] \ 000001F4 010050E3 CMP R0,#+1 \ 000001F8 030000BA BLT ??maincsm_onmessage_14 \ 000001FC B40494E5 LDR R0,[R4, #+1204] \ 00000200 000050E3 CMP R0,#+0 \ 00000204 B8538405 STREQ R5,[R4, #+952] \ 00000208 0200000A BEQ ??maincsm_onmessage_15 \ ??maincsm_onmessage_14: \ 0000020C B80394E5 LDR R0,[R4, #+952] \ 00000210 000050E3 CMP R0,#+0 \ 00000214 B4FFFF0A BEQ ??maincsm_onmessage_3 \ ??maincsm_onmessage_15: \ 00000218 ........ BL SMART_REDRAW \ 0000021C B86384E5 STR R6,[R4, #+952] \ 00000220 B1FFFFEA B ??maincsm_onmessage_3 \ ??maincsm_onmessage_16: \ 00000224 081087E0 ADD R1,R7,R8 \ 00000228 010050E1 CMP R0,R1 \ 0000022C AEFFFF1A BNE ??maincsm_onmessage_3 \ 00000230 54A394E5 LDR R10,[R4, #+852] \ 00000234 00B0A0E3 MOV R11,#+0 \ 00000238 00005AE3 CMP R10,#+0 \ 0000023C 2500000A BEQ ??maincsm_onmessage_17 \ ??maincsm_onmessage_18: \ 00000240 8C009AE5 LDR R0,[R10, #+140] \ 00000244 000050E3 CMP R0,#+0 \ 00000248 0400000A BEQ ??maincsm_onmessage_19 \ 0000024C 010050E2 SUBS R0,R0,#+1 \ 00000250 8C008AE5 STR R0,[R10, #+140] \ 00000254 01B0A003 MOVEQ R11,#+1 \ 00000258 90608A05 STREQ R6,[R10, #+144] \ 0000025C ........ BL SMART_REDRAW \ ??maincsm_onmessage_19: \ 00000260 74009AE5 LDR R0,[R10, #+116] \ 00000264 000050E3 CMP R0,#+0 \ 00000268 0C00000A BEQ ??maincsm_onmessage_20 \ 0000026C 010050E2 SUBS R0,R0,#+1 \ 00000270 74008AE5 STR R0,[R10, #+116] \ 00000274 0900001A BNE ??maincsm_onmessage_20 \ 00000278 68009AE5 LDR R0,[R10, #+104] \ 0000027C 01B0A0E3 MOV R11,#+1 \ 00000280 000050E3 CMP R0,#+0 \ 00000284 0500000A BEQ ??maincsm_onmessage_20 \ 00000288 5C009AE5 LDR R0,[R10, #+92] \ 0000028C 000050E3 CMP R0,#+0 \ 00000290 0200001A BNE ??maincsm_onmessage_20 \ 00000294 68008AE2 ADD R0,R10,#+104 \ 00000298 ........ BL FreeLOGQ \ 0000029C 78608AE5 STR R6,[R10, #+120] \ ??maincsm_onmessage_20: \ 000002A0 00A09AE5 LDR R10,[R10, #+0] \ 000002A4 00005AE3 CMP R10,#+0 \ 000002A8 E4FFFF1A BNE ??maincsm_onmessage_18 \ 000002AC 00005BE3 CMP R11,#+0 \ 000002B0 0800000A BEQ ??maincsm_onmessage_17 \ 000002B4 A01394E5 LDR R1,[R4, #+928] \ 000002B8 0000A0E3 MOV R0,#+0 \ 000002BC 000051E3 CMP R1,#+0 \ 000002C0 0200001A BNE ??maincsm_onmessage_21 \ 000002C4 A40394E5 LDR R0,[R4, #+932] \ 000002C8 000090E5 LDR R0,[R0, #+0] \ 000002CC ........ _BLF FindContactByN,??FindContactByN??rA \ ??maincsm_onmessage_21: \ 000002D0 0110A0E3 MOV R1,#+1 \ 000002D4 ........ BL RecountMenu \ ??maincsm_onmessage_17: \ 000002D8 CC0494E5 LDR R0,[R4, #+1228] \ 000002DC 000050E3 CMP R0,#+0 \ 000002E0 81FFFF0A BEQ ??maincsm_onmessage_3 \ 000002E4 010050E2 SUBS R0,R0,#+1 \ 000002E8 CC0484E5 STR R0,[R4, #+1228] \ 000002EC 7EFFFF1A BNE ??maincsm_onmessage_3 \ 000002F0 B40494E5 LDR R0,[R4, #+1204] \ 000002F4 350100EF SWI +309 \ 000002F8 000050E3 CMP R0,#+0 \ 000002FC 7AFFFF0A BEQ ??maincsm_onmessage_3 \ 00000300 960100EF SWI +406 \ 00000304 78FFFFEA B ??maincsm_onmessage_3 \ ??maincsm_onmessage_22: \ 00000308 04009BE5 LDR R0,[R11, #+4] \ 0000030C 1B0000EF SWI +27 \ 00000310 00008DE5 STR R0,[SP, #+0] \ 00000314 080080E2 ADD R0,R0,#+8 \ 00000318 140000EF SWI +20 \ 0000031C 00B0A0E1 MOV R11,R0 \ 00000320 08009AE5 LDR R0,[R10, #+8] \ 00000324 000090E5 LDR R0,[R0, #+0] \ 00000328 00008BE5 STR R0,[R11, #+0] \ 0000032C 0200A0E3 MOV R0,#+2 \ 00000330 B400CBE1 STRH R0,[R11, #+4] \ 00000334 00009DE5 LDR R0,[SP, #+0] \ 00000338 B600CBE1 STRH R0,[R11, #+6] \ 0000033C 08009AE5 LDR R0,[R10, #+8] \ 00000340 00209DE5 LDR R2,[SP, #+0] \ 00000344 041090E5 LDR R1,[R0, #+4] \ 00000348 08008BE2 ADD R0,R11,#+8 \ 0000034C 1E0100EF SWI +286 \ 00000350 600394E5 LDR R0,[R4, #+864] \ 00000354 0B20A0E1 MOV R2,R11 \ 00000358 010080E2 ADD R0,R0,#+1 \ 0000035C 600384E5 STR R0,[R4, #+864] \ 00000360 ........ LDR R0,??DataTable236 ;; SendAnswer \ 00000364 0010A0E3 MOV R1,#+0 \ 00000368 710100EF SWI +369 \ 0000036C 5EFFFFEA B ??maincsm_onmessage_3 \ ??maincsm_onmessage_23: \ 00000370 00009AE5 LDR R0,[R10, #+0] \ 00000374 081087E0 ADD R1,R7,R8 \ 00000378 010050E1 CMP R0,R1 \ 0000037C 5AFFFF1A BNE ??maincsm_onmessage_3 \ 00000380 08009BE5 LDR R0,[R11, #+8] \ 00000384 000050E3 CMP R0,#+0 \ 00000388 1000001A BNE ??maincsm_onmessage_24 \ 0000038C 04009BE5 LDR R0,[R11, #+4] \ 00000390 1B0000EF SWI +27 \ 00000394 0040A0E1 MOV R4,R0 \ 00000398 090084E2 ADD R0,R4,#+9 \ 0000039C 140000EF SWI +20 \ 000003A0 0050A0E1 MOV R5,R0 \ 000003A4 00009BE5 LDR R0,[R11, #+0] \ 000003A8 012084E2 ADD R2,R4,#+1 \ 000003AC 000085E5 STR R0,[R5, #+0] \ 000003B0 0300A0E3 MOV R0,#+3 \ 000003B4 B400C5E1 STRH R0,[R5, #+4] \ 000003B8 B640C5E1 STRH R4,[R5, #+6] \ 000003BC 04109BE5 LDR R1,[R11, #+4] \ 000003C0 080085E2 ADD R0,R5,#+8 \ 000003C4 1E0100EF SWI +286 \ 000003C8 0500A0E1 MOV R0,R5 \ 000003CC ........ _BLF ae,??ae??rA \ ??maincsm_onmessage_24: \ 000003D0 04009BE5 LDR R0,[R11, #+4] \ 000003D4 150000EF SWI +21 \ 000003D8 0C009BE5 LDR R0,[R11, #+12] \ 000003DC 150000EF SWI +21 \ 000003E0 0B00A0E1 MOV R0,R11 \ 000003E4 150000EF SWI +21 \ 000003E8 0A00A0E1 MOV R0,R10 \ 000003EC 150000EF SWI +21 \ 000003F0 0000A0E3 MOV R0,#+0 \ 000003F4 1CD08DE2 ADD SP,SP,#+28 \ 000003F8 F08FBDE8 POP {R4-R11,PC} ;; return 5546 else 5547 { 5548 switch(connect_state) \ ??maincsm_onmessage_8: \ 000003FC 8C0494E5 LDR R0,[R4, #+1164] \ 00000400 000050E3 CMP R0,#+0 \ 00000404 0200000A BEQ ??maincsm_onmessage_9 \ 00000408 030050E2 SUBS R0,R0,#+3 5549 { 5550 case 0: 5551 icn=IS_OFFLINE; break; 5552 case 3: 5553 icn=CurrentStatus; //IS_ONLINE; \ 0000040C 54049405 LDREQ R0,[R4, #+1108] 5554 break; 5555 default: 5556 icn=IS_UNKNOWN; break; \ 00000410 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: \ 00000414 000184E0 ADD R0,R4,R0, LSL #+2 \ 00000418 00008DE5 STR R0,[SP, #+0] \ 0000041C 440290E5 LDR R0,[R0, #+580] \ 00000420 210000EF SWI +33 \ 00000424 14008DE5 STR R0,[SP, #+20] \ 00000428 00009DE5 LDR R0,[SP, #+0] \ 0000042C 440290E5 LDR R0,[R0, #+580] \ 00000430 220000EF SWI +34 \ 00000434 B0149FE5 LDR R1,??maincsm_onmessage_6+0x8 ;; IDLEICON_X \ 00000438 00A091E5 LDR R10,[R1, #+0] \ 0000043C AC149FE5 LDR R1,??maincsm_onmessage_6+0xC ;; IDLEICON_Y \ 00000440 0A0080E0 ADD R0,R0,R10 \ 00000444 00B091E5 LDR R11,[R1, #+0] \ 00000448 0110A0E3 MOV R1,#+1 \ 0000044C 02002DE9 PUSH {R1} \ 00000450 18109DE5 LDR R1,[SP, #+24] \ 00000454 013040E2 SUB R3,R0,#+1 \ 00000458 0B20A0E1 MOV R2,R11 \ 0000045C 0B1081E0 ADD R1,R1,R11 \ 00000460 011041E2 SUB R1,R1,#+1 \ 00000464 02002DE9 PUSH {R1} \ 00000468 18009DE5 LDR R0,[SP, #+24] \ 0000046C 0A10A0E1 MOV R1,R10 \ 00000470 250000EF SWI +37 5563 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 00000474 08009DE5 LDR R0,[SP, #+8] \ 00000478 0B10A0E1 MOV R1,R11 \ 0000047C 442290E5 LDR R2,[R0, #+580] \ 00000480 0A00A0E1 MOV R0,R10 \ 00000484 230000EF SWI +35 \ 00000488 08D08DE2 ADD SP,SP,#+8 5564 } 5565 } 5566 } 5567 } 5568 if (msg->msg==MSG_RECONFIGURE_REQ) \ ??maincsm_onmessage_7: \ 0000048C 040099E5 LDR R0,[R9, #+4] \ 00000490 AF10A0E3 MOV R1,#+175 \ 00000494 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000498 010050E1 CMP R0,R1 \ 0000049C 1F00001A BNE ??maincsm_onmessage_25 5569 { 5570 extern const char *successed_config_filename; 5571 if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) \ 000004A0 ........ LDR R0,??DataTable246 ;; successed_config_filename \ 000004A4 0C1099E5 LDR R1,[R9, #+12] \ 000004A8 000090E5 LDR R0,[R0, #+0] \ 000004AC ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 000004B0 000050E3 CMP R0,#+0 \ 000004B4 1900001A BNE ??maincsm_onmessage_25 5572 { 5573 ShowMSG(1,(int)"NatICQ config updated!"); \ 000004B8 6E1F88E2 ADD R1,R8,#+440 \ 000004BC 0100A0E3 MOV R0,#+1 \ 000004C0 480100EF SWI +328 5574 InitConfig(); \ 000004C4 ........ _BLF InitConfig,??InitConfig??rA 5575 5576 void UpdateCSMname(void); 5577 UpdateCSMname();//обновим имя еси сменили уин и сделали рекконект... \ 000004C8 ........ BL UpdateCSMname 5578 5579 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000004CC ........ LDR R0,??DataTable245 ;; UIN \ 000004D0 081088E2 ADD R1,R8,#+8 \ 000004D4 002090E5 LDR R2,[R0, #+0] \ 000004D8 060087E2 ADD R0,R7,#+6 \ 000004DC 080080E0 ADD R0,R0,R8 \ 000004E0 160000EF SWI +22 5580 #ifdef GUI_INTERFACE 5581 clistm->font = ClFont; \ 000004E4 ........ LDR R0,??DataTable229 ;; ClFont \ 000004E8 A41394E5 LDR R1,[R4, #+932] \ 000004EC 000090E5 LDR R0,[R0, #+0] \ 000004F0 1C0081E5 STR R0,[R1, #+28] 5582 clistm->FontH = FontH(ClFont); \ 000004F4 C50100EF SWI +453 \ 000004F8 A41394E5 LDR R1,[R4, #+932] \ 000004FC 200081E5 STR R0,[R1, #+32] 5583 #endif 5584 free_ICONS(); \ 00000500 ........ BL free_ICONS 5585 setup_ICONS(); \ 00000504 ........ BL setup_ICONS 5586 ResortCL(); \ 00000508 ........ _BLF ResortCL,??ResortCL??rA 5587 RecountMenu(NULL, 1); \ 0000050C 0510A0E1 MOV R1,R5 \ 00000510 0600A0E1 MOV R0,R6 \ 00000514 ........ BL RecountMenu 5588 // InitSmiles(); 5589 5590 #ifdef GUI_INTERFACE 5591 shot_header=0; \ 00000518 E46484E5 STR R6,[R4, #+1252] 5592 shot_soft=0; \ 0000051C E06484E5 STR R6,[R4, #+1248] 5593 #endif 5594 } 5595 } 5596 5597 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_25: \ 00000520 040099E5 LDR R0,[R9, #+4] \ 00000524 0E10A0E3 MOV R1,#+14 \ 00000528 641C81E3 ORR R1,R1,#0x6400 \ 0000052C 010050E1 CMP R0,R1 \ 00000530 0C00001A BNE ??maincsm_onmessage_26 5598 { 5599 if ((int)msg->data0==csm->gui_id) \ 00000534 18109DE5 LDR R1,[SP, #+24] \ 00000538 0C0099E5 LDR R0,[R9, #+12] \ 0000053C 281091E5 LDR R1,[R1, #+40] \ 00000540 010050E1 CMP R0,R1 5600 { 5601 csm->csm.state=-3; \ 00000544 18009D05 LDREQ R0,[SP, #+24] \ 00000548 0210E003 MVNEQ R1,#+2 \ 0000054C 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) \ 00000550 0C0099E5 LDR R0,[R9, #+12] \ 00000554 B41494E5 LDR R1,[R4, #+1204] \ 00000558 010050E1 CMP R0,R1 \ 0000055C 0100001A BNE ??maincsm_onmessage_26 5611 { 5612 edchat_id=0; \ 00000560 B46484E5 STR R6,[R4, #+1204] 5613 SMART_REDRAW(); \ 00000564 ........ BL SMART_REDRAW 5614 } 5615 } 5616 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_26: \ 00000568 040099E5 LDR R0,[R9, #+4] \ 0000056C AE10A0E3 MOV R1,#+174 \ 00000570 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000574 010050E1 CMP R0,R1 \ 00000578 1F00001A BNE ??maincsm_onmessage_27 5617 { 5618 switch((int)msg->data0) \ 0000057C 0C0099E5 LDR R0,[R9, #+12] \ 00000580 101099E5 LDR R1,[R9, #+16] \ 00000584 ........ LDR R11,??DataTable230 ;; do_reconnect \ 00000588 7420A0E3 MOV R2,#+116 \ 0000058C 682D82E3 ORR R2,R2,#0x1A00 \ 00000590 049082E0 ADD R9,R2,R4 \ 00000594 A42F42E2 SUB R2,R2,#+656 \ 00000598 04A082E0 ADD R10,R2,R4 \ 0000059C 802050E2 SUBS R2,R0,#+128 \ 000005A0 0600000A BEQ ??maincsm_onmessage_28 \ 000005A4 022052E2 SUBS R2,R2,#+2 \ 000005A8 0200000A BEQ ??maincsm_onmessage_29 \ 000005AC 122052E2 SUBS R2,R2,#+18 \ 000005B0 1400000A BEQ ??maincsm_onmessage_30 \ 000005B4 1C0000EA B ??maincsm_onmessage_31 5619 { 5620 case LMAN_DISCONNECT_IND: 5621 is_gprs_online=0; \ ??maincsm_onmessage_29: \ 000005B8 AC6484E5 STR R6,[R4, #+1196] 5622 return(1); \ 000005BC 0E0000EA B ??maincsm_onmessage_27 5623 case LMAN_CONNECT_CNF: 5624 vibra_count=1; \ ??maincsm_onmessage_28: \ 000005C0 685384E5 STR R5,[R4, #+872] 5625 start_vibra(); \ 000005C4 ........ BL start_vibra 5626 is_gprs_online=1; 5627 //strcpy(logmsg,LG_GRGPRSUP); 5628 snprintf(logmsg, 255, LG_GRGPRSUP, RECONNECT_TIME); \ 000005C8 ........ LDR R0,??DataTable239 ;; RECONNECT_TIME \ 000005CC AC5484E5 STR R5,[R4, #+1196] \ 000005D0 004090E5 LDR R4,[R0, #+0] \ 000005D4 742F88E2 ADD R2,R8,#+464 \ 000005D8 0430A0E1 MOV R3,R4 \ 000005DC FF10A0E3 MOV R1,#+255 \ 000005E0 0A00A0E1 MOV R0,R10 \ 000005E4 1B0100EF SWI +283 5629 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 000005E8 0B20A0E1 MOV R2,R11 \ 000005EC D800A0E3 MOV R0,#+216 \ 000005F0 900401E0 MUL R1,R0,R4 \ 000005F4 0900A0E1 MOV R0,R9 \ 000005F8 4D0000EF SWI +77 5630 return(1); \ ??maincsm_onmessage_27: \ 000005FC 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_32: \ 00000600 1CD08DE2 ADD SP,SP,#+28 \ 00000604 F08FBDE8 POP {R4-R11,PC} 5631 case ENIP_DNR_HOST_BY_NAME: 5632 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_30: \ 00000608 BC0494E5 LDR R0,[R4, #+1212] \ 0000060C 000051E1 CMP R1,R0 \ 00000610 F9FFFF1A BNE ??maincsm_onmessage_27 5633 { 5634 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 00000614 C00494E5 LDR R0,[R4, #+1216] \ 00000618 000050E3 CMP R0,#+0 \ 0000061C F6FFFF0A BEQ ??maincsm_onmessage_27 \ 00000620 ........ LDR R0,??DataTable232 ;; create_connect \ ??maincsm_onmessage_33: \ 00000624 710100EF SWI +369 5635 } 5636 return(1); \ ??maincsm_onmessage_34: \ 00000628 F3FFFFEA B ??maincsm_onmessage_27 5637 } 5638 if ((int)msg->data1==sock) \ ??maincsm_onmessage_31: \ 0000062C 902494E5 LDR R2,[R4, #+1168] \ 00000630 020051E1 CMP R1,R2 \ 00000634 F0FFFF1A BNE ??maincsm_onmessage_27 5639 { 5640 //Если наш сокет 5641 if ((((unsigned int)msg->data0)>>28)==0xA) \ 00000638 201EA0E1 LSR R1,R0,#+28 \ 0000063C 0A0051E3 CMP R1,#+10 \ 00000640 3500001A BNE ??maincsm_onmessage_35 5642 { 5643 TPKT *p=(TPKT *)msg->data0; \ 00000644 0040A0E1 MOV R4,R0 5644 //Принят пакет 5645 if (p->pkt.type==T_RECVMSG) \ 00000648 B400D4E1 LDRH R0,[R4, #+4] \ 0000064C 030050E3 CMP R0,#+3 \ 00000650 2D00001A BNE ??maincsm_onmessage_36 5646 { 5647 //Просунем через IPC 5648 5649 int l=p->pkt.data_len+1; //С завершающим \0 \ 00000654 B600D4E1 LDRH R0,[R4, #+6] \ 00000658 01B080E2 ADD R11,R0,#+1 5650 IPC_REQ *ripc=malloc(sizeof(IPC_REQ)); \ 0000065C 0C00A0E3 MOV R0,#+12 \ 00000660 140000EF SWI +20 \ 00000664 0050A0E1 MOV R5,R0 5651 IPC_REQ *fipc=malloc(sizeof(IPC_REQ)); \ 00000668 0C00A0E3 MOV R0,#+12 \ 0000066C 140000EF SWI +20 \ 00000670 0090A0E1 MOV R9,R0 5652 IPCMsg_RECVMSG *msg=malloc(sizeof(IPCMsg_RECVMSG)); \ 00000674 1000A0E3 MOV R0,#+16 \ 00000678 140000EF SWI +20 \ 0000067C 00A0A0E1 MOV R10,R0 5653 memcpy(msg->msg=malloc(l),p->data,l); \ 00000680 0B00A0E1 MOV R0,R11 \ 00000684 140000EF SWI +20 \ 00000688 04008AE5 STR R0,[R10, #+4] \ 0000068C 0B20A0E1 MOV R2,R11 \ 00000690 081084E2 ADD R1,R4,#+8 \ 00000694 1E0100EF SWI +286 5654 msg->uin=p->pkt.uin; \ 00000698 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); \ 0000069C 0530A0E1 MOV R3,R5 \ 000006A0 00008AE5 STR R0,[R10, #+0] \ 000006A4 08608AE5 STR R6,[R10, #+8] \ 000006A8 0C508AE5 STR R5,[R10, #+12] \ 000006AC 08A085E5 STR R10,[R5, #+8] \ 000006B0 08A089E5 STR R10,[R9, #+8] \ 000006B4 080087E0 ADD R0,R7,R8 \ 000006B8 040085E5 STR R0,[R5, #+4] \ 000006BC 000085E5 STR R0,[R5, #+0] \ 000006C0 040089E5 STR R0,[R9, #+4] \ 000006C4 000089E5 STR R0,[R9, #+0] \ 000006C8 0960A0E3 MOV R6,#+9 \ 000006CC 426C86E3 ORR R6,R6,#0x4200 \ 000006D0 0620A0E3 MOV R2,#+6 \ 000006D4 B010A0E3 MOV R1,#+176 \ 000006D8 DE1C81E3 ORR R1,R1,#0xDE00 \ 000006DC 0600A0E1 MOV R0,R6 \ 000006E0 000100EF SWI +256 5664 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_FREEMSG,fipc); \ 000006E4 0930A0E1 MOV R3,R9 \ 000006E8 0720A0E3 MOV R2,#+7 \ 000006EC B010A0E3 MOV R1,#+176 \ 000006F0 DE1C81E3 ORR R1,R1,#0xDE00 \ 000006F4 0600A0E1 MOV R0,R6 \ 000006F8 000100EF SWI +256 5665 mfree(p); \ 000006FC 0400A0E1 MOV R0,R4 \ 00000700 150000EF SWI +21 \ 00000704 0000A0E3 MOV R0,#+0 \ 00000708 BCFFFFEA B ??maincsm_onmessage_32 5666 } 5667 else 5668 { 5669 //Непосредственная обработка 5670 // ae(p); 5671 ProcessPacket(p); \ ??maincsm_onmessage_36: \ 0000070C 0400A0E1 MOV R0,R4 \ 00000710 ........ BL ProcessPacket 5672 } 5673 return(0); \ 00000714 0000A0E3 MOV R0,#+0 \ 00000718 B8FFFFEA B ??maincsm_onmessage_32 5674 } 5675 switch((int)msg->data0) \ ??maincsm_onmessage_35: \ 0000071C ........ LDR R3,??DataTable233 ;; VIBR_ON_CONNECT \ 00000720 8C1494E5 LDR R1,[R4, #+1164] \ 00000724 003093E5 LDR R3,[R3, #+0] \ 00000728 ........ LDR R7,??DataTable253 ;; lgpData \ 0000072C 00308DE5 STR R3,[SP, #+0] \ 00000730 8A0040E2 SUB R0,R0,#+138 \ 00000734 050050E3 CMP R0,#+5 \ 00000738 AFFFFF8A BHI ??maincsm_onmessage_27 \ 0000073C 012F8FE2 ADR R2,??maincsm_onmessage_1 \ 00000740 D02092E1 LDRSB R2,[R2, R0] \ 00000744 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_1: \ 00000748 33332E01 DC8 +51,+51,+46,+1 \ 0000074C 3C380000 DC8 +60,+56,+0,+0 5676 { 5677 case ENIP_SOCK_CONNECTED: 5678 if (connect_state==1) \ ??maincsm_onmessage_37: \ 00000750 010051E3 CMP R1,#+1 \ 00000754 2600001A BNE ??maincsm_onmessage_38 5679 { 5680 if(VIBR_ON_CONNECT) \ 00000758 000053E3 CMP R3,#+0 5681 vibra_count=2; \ 0000075C 0200A013 MOVNE R0,#+2 \ 00000760 68038415 STRNE R0,[R4, #+872] 5682 else 5683 vibra_count=1; \ 00000764 68538405 STREQ R5,[R4, #+872] 5684 start_vibra(); \ 00000768 ........ BL start_vibra 5685 //Соединение установленно, посылаем пакет login 5686 strcpy(logmsg, LG_GRTRYLOGIN); \ 0000076C 821F88E2 ADD R1,R8,#+520 \ 00000770 0A00A0E1 MOV R0,R10 \ 00000774 1A0000EF SWI +26 5687 { 5688 SUBPROC((void *)ab,0,0); \ 00000778 74019FE5 LDR R0,??maincsm_onmessage_6+0x10 ;; ab \ 0000077C 0020A0E3 MOV R2,#+0 \ 00000780 0210A0E1 MOV R1,R2 \ 00000784 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; \ 00000788 B06484E5 STR R6,[R4, #+1200] 5698 SENDMSGCOUNT=0; //Начинаем отсчет \ 0000078C 606384E5 STR R6,[R4, #+864] 5699 if (!FindGroupByID(0)) AddGroup(0,lgpData[LGP_GroupNotInList]); \ 00000790 0600A0E1 MOV R0,R6 \ 00000794 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000798 000050E3 CMP R0,#+0 \ 0000079C 0100001A BNE ??maincsm_onmessage_39 \ 000007A0 141097E5 LDR R1,[R7, #+20] \ 000007A4 ........ _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: \ 000007A8 ........ LDR R0,??DataTable245 ;; UIN \ 000007AC 004090E5 LDR R4,[R0, #+0] \ 000007B0 0400A0E1 MOV R0,R4 \ 000007B4 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000007B8 000050E3 CMP R0,#+0 \ 000007BC 0800001A BNE ??maincsm_onmessage_40 \ 000007C0 30019FE5 LDR R0,??maincsm_onmessage_6+0x14 ;; IS_SHOW_LOOPBACK \ 000007C4 000090E5 LDR R0,[R0, #+0] \ 000007C8 000050E3 CMP R0,#+0 \ 000007CC 0400000A BEQ ??maincsm_onmessage_40 \ 000007D0 101097E5 LDR R1,[R7, #+16] \ 000007D4 0130A0E3 MOV R3,#+1 \ 000007D8 0620A0E1 MOV R2,R6 \ 000007DC 0400A0E1 MOV R0,R4 \ 000007E0 ........ _BLF AddContact,??AddContact??rA 5702 SUBPROC((void *)LoadLocalCL); \ ??maincsm_onmessage_40: \ 000007E4 10019FE5 LDR R0,??maincsm_onmessage_6+0x18 ;; LoadLocalCL \ 000007E8 710100EF SWI +369 5703 SMART_REDRAW(); \ 000007EC ........ BL SMART_REDRAW \ 000007F0 81FFFFEA B ??maincsm_onmessage_27 5704 } 5705 else 5706 { 5707 ShowMSG(1,(int)lgpData[LGP_MsgIllegmsgcon]); \ ??maincsm_onmessage_38: \ 000007F4 3C1197E5 LDR R1,[R7, #+316] \ ??maincsm_onmessage_41: \ 000007F8 0100A0E3 MOV R0,#+1 \ 000007FC 480100EF SWI +328 \ 00000800 7DFFFFEA B ??maincsm_onmessage_27 5708 } 5709 break; 5710 case ENIP_SOCK_DATA_READ: 5711 if (connect_state>=2) \ ??maincsm_onmessage_42: \ 00000804 020051E3 CMP R1,#+2 5712 { 5713 //Если посылали send 5714 SUBPROC((void *)get_answer); \ 00000808 F0009FA5 LDRGE R0,??maincsm_onmessage_6+0x1C ;; get_answer \ 0000080C 84FFFFAA BGE ??maincsm_onmessage_33 5715 //SMART_REDRAW(); 5716 } 5717 else 5718 { 5719 ShowMSG(1,(int)lgpData[LGP_MsgIllegmsgrea]); \ 00000810 401197E5 LDR R1,[R7, #+320] \ 00000814 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: \ 00000818 ........ LDR R0,??DataTable236 ;; SendAnswer \ 0000081C 0020A0E3 MOV R2,#+0 \ 00000820 0210A0E1 MOV R1,R2 \ 00000824 710100EF SWI +369 \ 00000828 73FFFFEA B ??maincsm_onmessage_27 5725 break; 5726 case ENIP_SOCK_REMOTE_CLOSED: 5727 //Закрыт со стороны сервера 5728 if (connect_state) \ ??maincsm_onmessage_44: \ 0000082C 000051E3 CMP R1,#+0 \ 00000830 71FFFF0A BEQ ??maincsm_onmessage_27 5729 SUBPROC((void *)end_socket); \ 00000834 ........ LDR R0,??DataTable237 ;; end_socket \ 00000838 79FFFFEA 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: \ 0000083C ........ _BLF FillAllOffline,??FillAllOffline??rA 5745 RecountMenu(NULL, 1); \ 00000840 0110A0E3 MOV R1,#+1 \ 00000844 0600A0E1 MOV R0,R6 \ 00000848 ........ BL RecountMenu 5746 connect_state=0; \ 0000084C 8C6484E5 STR R6,[R4, #+1164] 5747 sock=-1; \ 00000850 000065E2 RSB R0,R5,#+0 \ 00000854 900484E5 STR R0,[R4, #+1168] 5748 if(VIBR_ON_CONNECT) \ 00000858 00009DE5 LDR R0,[SP, #+0] \ 0000085C 000050E3 CMP R0,#+0 5749 vibra_count=4; \ 00000860 0400A013 MOVNE R0,#+4 \ 00000864 68038415 STRNE R0,[R4, #+872] 5750 else 5751 vibra_count=1; \ 00000868 68538405 STREQ R5,[R4, #+872] 5752 5753 start_vibra(); \ 0000086C ........ BL start_vibra 5754 if (sendq_p) \ 00000870 A80494E5 LDR R0,[R4, #+1192] \ 00000874 000050E3 CMP R0,#+0 \ 00000878 0400000A BEQ ??maincsm_onmessage_46 5755 { 5756 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 0000087C A43494E5 LDR R3,[R4, #+1188] \ 00000880 862F88E2 ADD R2,R8,#+536 \ 00000884 FF10A0E3 MOV R1,#+255 \ 00000888 0A00A0E1 MOV R0,R10 \ 0000088C 1B0100EF SWI +283 5757 } 5758 SMART_REDRAW(); \ ??maincsm_onmessage_46: \ 00000890 ........ BL SMART_REDRAW 5759 SUBPROC((void *)ClearSendQ); \ 00000894 ........ LDR R0,??DataTable238 ;; ClearSendQ \ 00000898 710100EF SWI +369 5760 if (!disautorecconect) \ 0000089C 500494E5 LDR R0,[R4, #+1104] \ 000008A0 000050E3 CMP R0,#+0 \ 000008A4 54FFFF1A BNE ??maincsm_onmessage_27 5761 { 5762 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 000008A8 ........ LDR R0,??DataTable239 ;; RECONNECT_TIME \ 000008AC 0B20A0E1 MOV R2,R11 \ 000008B0 004090E5 LDR R4,[R0, #+0] \ 000008B4 D800A0E3 MOV R0,#+216 \ 000008B8 900401E0 MUL R1,R0,R4 \ 000008BC 0900A0E1 MOV R0,R9 \ 000008C0 4D0000EF SWI +77 5763 snprintf(logmsg,255,LG_GRRECONNECT,logmsg, RECONNECT_TIME); \ 000008C4 10002DE9 PUSH {R4} \ 000008C8 0A30A0E1 MOV R3,R10 \ 000008CC 8F2F88E2 ADD R2,R8,#+572 \ 000008D0 FF10A0E3 MOV R1,#+255 \ 000008D4 0A00A0E1 MOV R0,R10 \ 000008D8 1B0100EF SWI +283 \ 000008DC 04D08DE2 ADD SP,SP,#+4 \ 000008E0 45FFFFEA B ??maincsm_onmessage_27 \ ??maincsm_onmessage_6: \ 000008E4 ........ DC32 CheckDoubleRun \ 000008E8 ........ DC32 ICON_IDLE_ENABLE \ 000008EC ........ DC32 IDLEICON_X \ 000008F0 ........ DC32 IDLEICON_Y \ 000008F4 ........ DC32 ab \ 000008F8 ........ DC32 IS_SHOW_LOOPBACK \ 000008FC ........ DC32 LoadLocalCL \ 00000900 ........ 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 \ In segment CODE, align 4, keep-with-next 5790 void addIconBar(short* num) 5791 { \ addIconBar: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 5792 if(!ShowStatusToIconBar) return; \ 00000008 08019FE5 LDR R0,??addIconBar_0 ;; ShowStatusToIconBar \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 5793 unsigned int NumStatusToIconBar = 8000; 5794 unsigned int NumXStatusToIconBar = 8100; 5795 5796 int icn; 5797 { 5798 if(total_unread) \ 00000018 ........ LDR R5,??DataTable244 ;; HeaderShot \ 0000001C 900395E5 LDR R0,[R5, #+912] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 0500000A BEQ ??addIconBar_1 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); \ 00000028 F40495E5 LDR R0,[R5, #+1268] \ 0000002C 010050E3 CMP R0,#+1 \ 00000030 6100A013 MOVNE R0,#+97 \ 00000034 780D8013 ORRNE R0,R0,#0x1E00 \ 00000038 0D00A003 MOVEQ R0,#+13 \ 0000003C 050000EA B ??addIconBar_2 5814 // iconmsgblink=!iconmsgblink; 5815 5816 } 5817 else 5818 { 5819 switch(connect_state) \ ??addIconBar_1: \ 00000040 8C0495E5 LDR R0,[R5, #+1164] \ 00000044 000050E3 CMP R0,#+0 \ 00000048 0200000A BEQ ??addIconBar_2 \ 0000004C 030050E2 SUBS R0,R0,#+3 5820 { 5821 case 0: 5822 icn=IS_OFFLINE; 5823 break; 5824 case 3: 5825 icn=CurrentStatus; //IS_ONLINE; \ 00000050 54049505 LDREQ R0,[R5, #+1108] 5826 break; 5827 default: 5828 icn=IS_UNKNOWN; \ 00000054 0E00A013 MOVNE R0,#+14 5829 break; 5830 } 5831 AddIconToIconBar(NumStatusToIconBar + icn, num); \ ??addIconBar_2: \ 00000058 0410A0E1 MOV R1,R4 \ 0000005C 7D0D80E2 ADD R0,R0,#+8000 \ 00000060 270000EF SWI +39 5832 } 5833 } 5834 5835 if(CurrentXStatus!=0)//еси есть хстатус то делаем так \ 00000064 580495E5 LDR R0,[R5, #+1112] \ 00000068 A460A0E3 MOV R6,#+164 \ 0000006C 7C6D86E3 ORR R6,R6,#0x1F00 \ 00000070 000050E3 CMP R0,#+0 \ 00000074 0B00000A BEQ ??addIconBar_3 5836 { 5837 if(total_unread_all && total_unread_all<10) \ 00000078 942395E5 LDR R2,[R5, #+916] \ 0000007C 000052E3 CMP R2,#+0 \ 00000080 0500000A BEQ ??addIconBar_4 \ 00000084 0A0052E3 CMP R2,#+10 \ 00000088 030000AA BGE ??addIconBar_4 5838 AddIconToIconBar(8200 + total_unread_all, num); \ 0000008C 0410A0E1 MOV R1,R4 \ 00000090 640086E2 ADD R0,R6,#+100 \ 00000094 020080E0 ADD R0,R0,R2 \ 00000098 010000EA B ??addIconBar_5 5839 else 5840 AddIconToIconBar(NumXStatusToIconBar+CurrentXStatus,num); \ ??addIconBar_4: \ 0000009C 0410A0E1 MOV R1,R4 \ 000000A0 000086E0 ADD R0,R6,R0 \ ??addIconBar_5: \ 000000A4 270000EF SWI +39 5841 } 5842 5843 if(ADDITION_UIN!=0) \ ??addIconBar_3: \ 000000A8 ........ LDR R0,??DataTable241 ;; ADDITION_UIN \ 000000AC 000090E5 LDR R0,[R0, #+0] \ 000000B0 000050E3 CMP R0,#+0 \ 000000B4 7080BD08 POPEQ {R4-R6,PC} 5844 { 5845 CLIST *t; 5846 t=FindContactByUin(ADDITION_UIN); \ 000000B8 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000000BC 0050B0E1 MOVS R5,R0 5847 if(t) \ 000000C0 7080BD08 POPEQ {R4-R6,PC} 5848 { 5849 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) \ 000000C4 B405D5E1 LDRH R0,[R5, #+84] \ 000000C8 FF10A0E3 MOV R1,#+255 \ 000000CC FF1C81E3 ORR R1,R1,#0xFF00 \ 000000D0 010050E1 CMP R0,R1 \ 000000D4 7080BD08 POPEQ {R4-R6,PC} \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ BL GetIconIndex \ 000000E0 0E0050E3 CMP R0,#+14 \ 000000E4 7080BD08 POPEQ {R4-R6,PC} 5850 { 5851 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); \ 000000E8 0500A0E1 MOV R0,R5 \ 000000EC ........ BL GetIconIndex \ 000000F0 0410A0E1 MOV R1,R4 \ 000000F4 7D0D80E2 ADD R0,R0,#+8000 \ 000000F8 270000EF SWI +39 5852 if(t->xstate!=0) \ 000000FC B605D5E1 LDRH R0,[R5, #+86] \ 00000100 000050E3 CMP R0,#+0 \ 00000104 7080BD08 POPEQ {R4-R6,PC} 5853 AddIconToIconBar(NumXStatusToIconBar + t->xstate, num); \ 00000108 0410A0E1 MOV R1,R4 \ 0000010C 000086E0 ADD R0,R6,R0 \ 00000110 270000EF SWI +39 \ 00000114 7080BDE8 POP {R4-R6,PC} ;; return \ ??addIconBar_0: \ 00000118 ........ DC32 ShowStatusToIconBar 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,??DataTable245 ;; UIN \ 00000004 10109FE5 LDR R1,??UpdateCSMname_0 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C 002090E5 LDR R2,[R0, #+0] \ 00000010 08009FE5 LDR R0,??UpdateCSMname_0+0x4 ;; HeaderShot + 748 \ 00000014 240100EF SWI +292 5912 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??UpdateCSMname_0: \ 0000001C ........ DC32 `?` \ 00000020 ........ DC32 HeaderShot + 748 5913 5914 #ifdef NEWSGOLD \ In segment CODE, align 4, keep-with-next 5915 void SetIconBarHandler() 5916 { 5917 MAINCSM.iconbar_handler.addr = (int)addIconBar; \ SetIconBarHandler: \ 00000000 08009FE5 LDR R0,??SetIconBarHandler_0 ;; HeaderShot + 776 \ 00000004 ........ LDR R1,??DataTable248 ;; addIconBar \ 00000008 001080E5 STR R1,[R0, #+0] 5918 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??SetIconBarHandler_0: \ 00000010 ........ DC32 HeaderShot + 776 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,??DataTable244 ;; HeaderShot \ 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 4400A0E3 MOV R0,#+68 \ 00000034 500E80E3 ORR R0,R0,#0x500 \ 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 4415C0E5 STRB R1,[R0, #+1348] 5935 5936 lgpLoadLangpack(); \ 0000004C ........ _BLF lgpLoadLangpack,??lgpLoadLangpack??rA 5937 5938 if (!UIN) \ 00000050 ........ LDR R0,??DataTable245 ;; 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 + 352 \ 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,??DataTable246 ;; 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,??DataTable247 ;; 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 B10F84E2 ADD R0,R4,#+708 \ 000000E0 070100EF SWI +263 \ 000000E4 580384E5 STR R0,[R4, #+856] 5957 UnlockSched(); \ 000000E8 470100EF SWI +327 5958 #ifdef NEWSGOLD 5959 SetIconBarHandler(); \ 000000EC ........ LDR R0,??DataTable248 ;; addIconBar \ 000000F0 080384E5 STR R0,[R4, #+776] 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 + 352 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,??DataTable250 ;; HeaderShot + 852 \ 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,??DataTable250 ;; HeaderShot + 852 \ 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,??DataTable257 ;; HeaderShot \ 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,??DataTable261 ;; IsBufferMenu \ 00000028 841495E5 LDR R1,[R5, #+1156] \ 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,??DataTable253 ;; 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 D01093E5 LDR R1,[R3, #+208] \ 000000B8 050000EA B ??ed_options_handler_7 6117 break; 6118 case 1: 6119 ascii2ws(item->ws,lgpData[LGP_MnuEdPrevAct]); \ ??ed_options_handler_10: \ 000000BC D41093E5 LDR R1,[R3, #+212] \ 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,??DataTable261 ;; IsBufferMenu \ 000000E8 841495E5 LDR R1,[R5, #+1156] \ 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 980395E5 LDR R0,[R5, #+920] \ 00000168 230100EF SWI +291 \ 0000016C 012080E2 ADD R2,R0,#+1 \ 00000170 980395E5 LDR R0,[R5, #+920] \ 00000174 3E10A0E3 MOV R1,#+62 \ 00000178 1D0000EF SWI +29 6149 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 0000017C 980395E5 LDR R0,[R5, #+920] \ 00000180 230100EF SWI +291 \ 00000184 012080E2 ADD R2,R0,#+1 \ 00000188 980395E5 LDR R0,[R5, #+920] \ 0000018C 2010A0E3 MOV R1,#+32 \ 00000190 1D0000EF SWI +29 6150 wstrcat(wsBuffer,ec_hdr.pWS); \ 00000194 28109DE5 LDR R1,[SP, #+40] \ 00000198 980395E5 LDR R0,[R5, #+920] \ 0000019C 210100EF SWI +289 6151 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 000001A0 980395E5 LDR R0,[R5, #+920] \ 000001A4 230100EF SWI +291 \ 000001A8 012080E2 ADD R2,R0,#+1 \ 000001AC 980395E5 LDR R0,[R5, #+920] \ 000001B0 0A10A0E3 MOV R1,#+10 \ 000001B4 1D0000EF SWI +29 6152 6153 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 000001B8 980395E5 LDR R0,[R5, #+920] \ 000001BC 230100EF SWI +291 \ 000001C0 012080E2 ADD R2,R0,#+1 \ 000001C4 980395E5 LDR R0,[R5, #+920] \ 000001C8 3E10A0E3 MOV R1,#+62 \ 000001CC 1D0000EF SWI +29 6154 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 000001D0 980395E5 LDR R0,[R5, #+920] \ 000001D4 230100EF SWI +291 \ 000001D8 012080E2 ADD R2,R0,#+1 \ 000001DC 980395E5 LDR R0,[R5, #+920] \ 000001E0 2010A0E3 MOV R1,#+32 \ 000001E4 1D0000EF SWI +29 6155 wstrcat(wsBuffer,ec.pWS); \ 000001E8 54109DE5 LDR R1,[SP, #+84] \ 000001EC 980395E5 LDR R0,[R5, #+920] \ 000001F0 210100EF SWI +289 6156 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 000001F4 980395E5 LDR R0,[R5, #+920] \ 000001F8 230100EF SWI +291 \ 000001FC 012080E2 ADD R2,R0,#+1 \ 00000200 980395E5 LDR R0,[R5, #+920] \ 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 981395E5 LDR R1,[R5, #+920] \ 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 981395E5 LDR R1,[R5, #+920] \ 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 980395E5 LDR R0,[R5, #+920] \ 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 B40495E5 LDR R0,[R5, #+1204] \ 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,??DataTable256 ;; `?` \ 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,??DataTable256 ;; `?` \ 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,??DataTable257 ;; HeaderShot \ 00000008 4CDF4DE2 SUB SP,SP,#+304 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0170A0E1 MOV R7,R1 \ 00000014 E400A0E3 MOV R0,#+228 \ 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 088090E5 LDR R8,[R0, #+8] 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 040090E5 LDR R0,[R0, #+4] \ 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 0E0058E3 CMP R8,#+14 \ 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 0D0058E3 CMP R8,#+13 \ 000001E8 1400001A BNE ??edchat_onkey_4 6500 { 6501 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); \ 000001EC 6400A0E3 MOV R0,#+100 \ 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 6400A0E3 MOV R0,#+100 \ 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 040090E5 LDR R0,[R0, #+4] \ 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 8C0496E5 LDR R0,[R6, #+1164] \ 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 D00FA0E3 MOV R0,#+832 \ 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 60A486E5 STR R10,[R6, #+1120] \ 0000030C 64A486E5 STR R10,[R6, #+1124] \ 00000310 94A089E5 STR R10,[R9, #+148] \ 00000314 6C0496E5 LDR R0,[R6, #+1132] \ 00000318 000050E3 CMP R0,#+0 \ 0000031C 0300000A BEQ ??edchat_onkey_15 \ 00000320 680496E5 LDR R0,[R6, #+1128] \ 00000324 540486E5 STR R0,[R6, #+1108] \ 00000328 ........ BL set_my_status \ 0000032C 6CA486E5 STR R10,[R6, #+1132] \ ??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 6400A0E3 MOV R0,#+100 \ 0000036C 700E80E3 ORR R0,R0,#0x700 \ 00000370 060080E0 ADD R0,R0,R6 \ 00000374 1A0000EF SWI +26 \ 00000378 600396E5 LDR R0,[R6, #+864] \ 0000037C ........ LDR R3,??DataTable294 ;; I_str \ 00000380 010080E2 ADD R0,R0,#+1 \ 00000384 600386E5 STR R0,[R6, #+864] \ 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,??DataTable295 ;; 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 C80396E5 LDR R0,[R6, #+968] \ 000003D4 0A10A0E1 MOV R1,R10 \ 000003D8 260100EF SWI +294 \ 000003DC C81396E5 LDR R1,[R6, #+968] \ 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 C80396E5 LDR R0,[R6, #+968] \ 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 C80396E5 LDR R0,[R6, #+968] \ 00000454 230100EF SWI +291 \ 00000458 010080E2 ADD R0,R0,#+1 \ 0000045C 140000EF SWI +20 \ 00000460 0070A0E1 MOV R7,R0 \ 00000464 C80396E5 LDR R0,[R6, #+968] \ 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,??DataTable260 ;; 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 C80396E5 LDR R0,[R6, #+968] \ 000004EC 402FA0E3 MOV R2,#+256 \ 000004F0 30108DE2 ADD R1,SP,#+48 \ 000004F4 6C0100EF SWI +364 \ 000004F8 C80396E5 LDR R0,[R6, #+968] \ 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,??DataTable261 ;; 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 0D0058E3 CMP R8,#+13 \ 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 0E0058E3 CMP R8,#+14 \ 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 30402DE9 PUSH {R4,R5,LR} 6644 void *edchat_gui; 6645 EDCHAT_STRUCT *ed_struct; 6646 if (old_ed_redraw) old_ed_redraw(data); \ 00000004 ........ LDR R4,??DataTable284 ;; HeaderShot \ 00000008 F81494E5 LDR R1,[R4, #+1272] \ 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 B40494E5 LDR R0,[R4, #+1204] \ 00000020 090200EF SWI +521 6648 if (edchat_gui) \ 00000024 000050E3 CMP R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 6649 { 6650 ed_struct=EDIT_GetUserPointer(edchat_gui); \ 0000002C DF0100EF SWI +479 6651 if (ed_struct) \ 00000030 000050E3 CMP R0,#+0 \ 00000034 3080BD08 POPEQ {R4,R5,PC} 6652 { 6653 #ifndef NEWSGOLD 6654 int icon, width; 6655 icon=*(S_ICONS+GetIconIndex(ed_struct->ed_contact)); 6656 ((HEADER_DESC *)&edchat_hdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 6657 DrawImg(ScreenW()-1-width,1,icon); 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)); \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C ........ BL GetIconIndex \ 00000040 000184E0 ADD R0,R4,R0, LSL #+2 \ 00000044 444290E5 LDR R4,[R0, #+580] 6701 width=GetImgWidth(icon); \ 00000048 0400A0E1 MOV R0,R4 \ 0000004C 220000EF SWI +34 \ 00000050 0050A0E1 MOV R5,R0 6702 DrawImg(2,((HeaderH()-width)>>1)+YDISP,icon); \ 00000054 8A8100EF SWI +33162 \ 00000058 0420A0E1 MOV R2,R4 \ 0000005C 050040E0 SUB R0,R0,R5 \ 00000060 1810A0E3 MOV R1,#+24 \ 00000064 C01081E0 ADD R1,R1,R0, ASR #+1 \ 00000068 0200A0E3 MOV R0,#+2 \ 0000006C 230000EF SWI +35 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 } \ 00000070 3080BDE8 POP {R4,R5,PC} ;; return 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,??DataTable284 ;; HeaderShot \ 00000008 0050A0E1 MOV R5,R0 \ 0000000C ........ LDR R0,??DataTable293 ;; 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 481384E5 STR R1,[R4, #+840] \ 00000024 500384E5 STR R0,[R4, #+848] 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 E400A0E3 MOV R0,#+228 \ 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 180000EA B ??edchat_ghook_1 6734 } 6735 if (cmd==2) \ ??edchat_ghook_0: \ 00000060 081098E5 LDR R1,[R8, #+8] \ 00000064 020056E3 CMP R6,#+2 \ 00000068 1700001A 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 6300000A BEQ ??edchat_ghook_3 6746 { 6747 memcpy(methods,m[1],sizeof(methods)); \ 00000094 FC60A0E3 MOV R6,#+252 \ 00000098 406E86E3 ORR R6,R6,#0x400 \ 0000009C 4020A0E3 MOV R2,#+64 \ 000000A0 0010A0E1 MOV R1,R0 \ 000000A4 040086E0 ADD R0,R6,R4 \ 000000A8 1E0100EF SWI +286 6748 old_ed_redraw=(void (*)(void *))(methods[0]); \ 000000AC 040096E7 LDR R0,[R6, +R4] \ 000000B0 F80484E5 STR R0,[R4, #+1272] 6749 methods[0]=(void *)my_ed_redraw; \ 000000B4 70019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 000000B8 040086E7 STR R0,[R6, +R4] 6750 m[1]=methods; \ 000000BC 040086E0 ADD R0,R6,R4 \ 000000C0 040085E5 STR R0,[R5, #+4] \ ??edchat_ghook_1: \ 000000C4 2CD08DE2 ADD SP,SP,#+44 \ 000000C8 F083BDE8 POP {R4-R9,PC} 6751 } 6752 } 6753 } 6754 if (cmd==3) \ ??edchat_ghook_2: \ 000000CC 030056E3 CMP R6,#+3 \ 000000D0 0E00001A BNE ??edchat_ghook_5 6755 { 6756 // if (edgui_data==data) edgui_data=NULL; 6757 if (ed_struct->ed_contact) \ 000000D4 000098E5 LDR R0,[R8, #+0] \ 000000D8 000050E3 CMP R0,#+0 \ 000000DC 0500000A BEQ ??edchat_ghook_6 6758 { 6759 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000E0 0D20A0E1 MOV R2,SP \ 000000E4 0500A0E1 MOV R0,R5 \ 000000E8 690100EF SWI +361 6760 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000EC 28109DE5 LDR R1,[SP, #+40] \ 000000F0 000098E5 LDR R0,[R8, #+0] \ 000000F4 ........ BL SaveAnswer 6761 } 6762 RecountMenu(ed_struct->ed_contact, 1); \ ??edchat_ghook_6: \ 000000F8 000098E5 LDR R0,[R8, #+0] \ 000000FC 0110A0E3 MOV R1,#+1 \ 00000100 ........ BL RecountMenu 6763 mfree(ed_struct); \ 00000104 0800A0E1 MOV R0,R8 \ 00000108 150000EF SWI +21 \ 0000010C ECFFFFEA B ??edchat_ghook_1 6764 } 6765 if (cmd==0x0A) \ ??edchat_ghook_5: \ 00000110 0A0056E3 CMP R6,#+10 \ 00000114 0900001A BNE ??edchat_ghook_7 6766 { 6767 pltop->dyn_pltop=SmilesImgList; \ 00000118 10019FE5 LDR R0,??edchat_ghook_4+0x4 ;; SmilesImgList \ 0000011C 000090E5 LDR R0,[R0, #+0] \ 00000120 080089E5 STR R0,[R9, #+8] 6768 DisableIDLETMR(); \ 00000124 7F0100EF SWI +383 6769 total_unread-=ed_struct->requested_decrement_total_unread; \ 00000128 900394E5 LDR R0,[R4, #+912] \ 0000012C 0C1098E5 LDR R1,[R8, #+12] \ 00000130 010040E0 SUB R0,R0,R1 \ 00000134 900384E5 STR R0,[R4, #+912] 6770 ed_struct->requested_decrement_total_unread=0; \ 00000138 0C7088E5 STR R7,[R8, #+12] \ 0000013C 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: \ 00000140 070056E3 CMP R6,#+7 \ 00000144 2700001A BNE ??edchat_ghook_8 6779 { 6780 SetSoftKey(data,&sk,SET_SOFT_KEY_N); \ 00000148 0020A0E3 MOV R2,#+0 \ 0000014C D11F84E2 ADD R1,R4,#+836 \ 00000150 0500A0E1 MOV R0,R5 \ 00000154 680100EF SWI +360 6781 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000158 081098E5 LDR R1,[R8, #+8] \ 0000015C 0D20A0E1 MOV R2,SP \ 00000160 0500A0E1 MOV R0,R5 \ 00000164 690100EF SWI +361 6782 if (ec.pWS->wsbody[0]==0) \ 00000168 28009DE5 LDR R0,[SP, #+40] \ 0000016C 000090E5 LDR R0,[R0, #+0] \ 00000170 B000D0E1 LDRH R0,[R0, #+0] \ 00000174 000050E3 CMP R0,#+0 \ 00000178 0300001A BNE ??edchat_ghook_9 6783 SetSoftKey(data,&sk_cancel,SET_SOFT_KEY_N==0?1:0); \ 0000017C 0120A0E3 MOV R2,#+1 \ 00000180 D31F84E2 ADD R1,R4,#+844 \ 00000184 0500A0E1 MOV R0,R5 \ 00000188 680100EF SWI +360 6784 if (!EDIT_IsBusy(data)) \ ??edchat_ghook_9: \ 0000018C 0500A0E1 MOV R0,R5 \ 00000190 1C0200EF SWI +540 \ 00000194 000050E3 CMP R0,#+0 \ 00000198 2100001A BNE ??edchat_ghook_3 6785 { 6786 time_to_stop_t9=0; \ 0000019C CC7484E5 STR R7,[R4, #+1228] 6787 if (ed_struct->ed_contact->req_add) \ 000001A0 000098E5 LDR R0,[R8, #+0] \ 000001A4 601090E5 LDR R1,[R0, #+96] \ 000001A8 000051E3 CMP R1,#+0 \ 000001AC 0500000A BEQ ??edchat_ghook_10 6788 { 6789 ed_struct->ed_contact->req_add=0; \ 000001B0 607080E5 STR R7,[R0, #+96] 6790 AddMsgToChat(data); \ 000001B4 0500A0E1 MOV R0,R5 \ 000001B8 ........ BL AddMsgToChat 6791 RecountMenu(ed_struct->ed_contact, 1); \ 000001BC 000098E5 LDR R0,[R8, #+0] \ 000001C0 0110A0E3 MOV R1,#+1 \ 000001C4 ........ BL RecountMenu 6792 } 6793 if (ed_struct->ed_contact->req_drawack) \ ??edchat_ghook_10: \ 000001C8 000098E5 LDR R0,[R8, #+0] \ 000001CC 641090E5 LDR R1,[R0, #+100] \ 000001D0 000051E3 CMP R1,#+0 \ 000001D4 1200000A BEQ ??edchat_ghook_3 6794 { 6795 ed_struct->ed_contact->req_drawack=0; \ 000001D8 647080E5 STR R7,[R0, #+100] 6796 DrawAck(data); \ 000001DC 0500A0E1 MOV R0,R5 \ 000001E0 ........ BL DrawAck \ 000001E4 B6FFFFEA B ??edchat_ghook_1 6797 } 6798 } 6799 } 6800 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001E8 0C0056E3 CMP R6,#+12 \ 000001EC 0C00001A BNE ??edchat_ghook_3 6801 { 6802 j=EDIT_GetFocus(data); \ 000001F0 0500A0E1 MOV R0,R5 \ 000001F4 820100EF SWI +386 \ 000001F8 0040A0E1 MOV R4,R0 6803 if ((EDIT_GetUnFocus(data)ed_answer)) \ 000001FC 0500A0E1 MOV R0,R5 \ 00000200 830100EF SWI +387 \ 00000204 040050E1 CMP R0,R4 \ 00000208 050000AA BGE ??edchat_ghook_3 \ 0000020C 080098E5 LDR R0,[R8, #+8] \ 00000210 000054E1 CMP R4,R0 \ 00000214 0200000A BEQ ??edchat_ghook_3 6804 EDIT_SetCursorPos(data,1); \ 00000218 0110A0E3 MOV R1,#+1 \ 0000021C 0500A0E1 MOV R0,R5 \ 00000220 D40100EF SWI +468 6805 } 6806 } \ ??edchat_ghook_3: \ 00000224 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 00000228 F083BDE8 POP {R4-R9,PC} ;; return \ ??edchat_ghook_4: \ 0000022C ........ DC32 my_ed_redraw \ 00000230 ........ 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 080000006400 DC32 8, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ 00000038 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000040 000000000000 DC32 0H, 0, 2147483647 \ 0000FFFFFF7F \ 0000004C 2D2D2D2D2D2D DC8 "-------" \ 2D00 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 D4649FE5 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,??DataTable284 ;; HeaderShot \ 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 A20F87E2 ADD R0,R7,#+648 \ 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,??DataTable266 ;; ED_X_FONT_SIZE \ 00000050 ........ LDR R0,??DataTable267 ;; 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,??DataTable268 ;; I_COLOR \ 00000064 1C208DE5 STR R2,[SP, #+28] \ 00000068 ........ LDR R2,??DataTable269 ;; X_COLOR \ 0000006C 030010E2 ANDS R0,R0,#0x3 \ 00000070 002092E5 LDR R2,[R2, #+0] \ 00000074 14208DE5 STR R2,[SP, #+20] \ 00000078 ........ LDR R2,??DataTable270 ;; O_ED_X_FONT_SIZE \ 0000007C 002092E5 LDR R2,[R2, #+0] \ 00000080 18208DE5 STR R2,[SP, #+24] \ 00000084 ........ LDR R2,??DataTable271 ;; 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,??DataTable272 ;; 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,??DataTable273 ;; O_I_COLOR \ ??CreateEditChat_9: \ 000000D0 00B090E5 LDR R11,[R0, #+0] \ ??CreateEditChat_10: \ 000000D4 ........ LDR R0,??DataTable274 ;; 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,??DataTable275 ;; 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,??DataTable276 ;; TO_COLOR \ 0000013C 000000EA B ??CreateEditChat_5 6886 } 6887 } 6888 else 6889 color=UNACK_COLOR; //Серый \ ??CreateEditChat_6: \ 00000140 ........ LDR R0,??DataTable277 ;; 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 C80397E5 LDR R0,[R7, #+968] \ 0000016C 101089E2 ADD R1,R9,#+16 \ 00000170 ........ _BLF ascii2ws,??ascii2ws??rA 6895 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000174 C83397E5 LDR R3,[R7, #+968] \ 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 C83397E5 LDR R3,[R7, #+968] \ 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 C80397E5 LDR R0,[R7, #+968] \ 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 C80397E5 LDR R0,[R7, #+968] \ 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 C83397E5 LDR R3,[R7, #+968] \ 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,??DataTable278 ;; O_ED_FONT_SIZE \ 00000284 ........ LDREQ R0,??DataTable280 ;; 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 90039715 LDRNE R0,[R7, #+912] \ 000002F4 01004012 SUBNE R0,R0,#+1 \ 000002F8 90038715 STRNE R0,[R7, #+912] \ 000002FC 5C9084E5 STR R9,[R4, #+92] 6937 6938 total_unread_all -= t->unread_msg; \ 00000300 940397E5 LDR R0,[R7, #+916] \ 00000304 881094E5 LDR R1,[R4, #+136] \ 00000308 010040E0 SUB R0,R0,R1 \ 0000030C 940387E5 STR R0,[R7, #+916] 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 C80397E5 LDR R0,[R7, #+968] \ 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 C83397E5 LDR R3,[R7, #+968] \ 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,??DataTable280 ;; 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 C80397E5 LDR R0,[R7, #+968] \ 0000039C ........ BL ParseAnswer \ 000003A0 020000EA B ??CreateEditChat_20 6952 else CutWSTR(ews,0); \ ??CreateEditChat_19: \ 000003A4 C80397E5 LDR R0,[R7, #+968] \ 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 24019FE5 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 C83397E5 LDR R3,[R7, #+968] \ 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 B893C6E1 STRH R9,[R6, #+56] \ 00000468 1800A0E3 MOV R0,#+24 \ 0000046C BA03C6E1 STRH R0,[R6, #+58] \ 00000470 888100EF SWI +33160 \ 00000474 010040E2 SUB R0,R0,#+1 \ 00000478 BC03C6E1 STRH R0,[R6, #+60] \ 0000047C 8A8100EF SWI +33162 \ 00000480 170080E2 ADD R0,R0,#+23 \ 00000484 BE03C6E1 STRH R0,[R6, #+62] 6980 patch_input(&edchat_desc); \ 00000488 B891C6E1 STRH R9,[R6, #+24] \ 0000048C 8A8100EF SWI +33162 \ 00000490 190080E2 ADD R0,R0,#+25 \ 00000494 BA01C6E1 STRH R0,[R6, #+26] \ 00000498 888100EF SWI +33160 \ 0000049C 010040E2 SUB R0,R0,#+1 \ 000004A0 BC01C6E1 STRH R0,[R6, #+28] \ 000004A4 898100EF SWI +33161 \ 000004A8 0040A0E1 MOV R4,R0 \ 000004AC 8B8100EF SWI +33163 \ 000004B0 000044E0 SUB R0,R4,R0 \ 000004B4 010040E2 SUB R0,R0,#+1 \ 000004B8 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); \ 000004BC 20002DE9 PUSH {R5} \ 000004C0 0130A0E3 MOV R3,#+1 \ 000004C4 0820A0E1 MOV R2,R8 \ 000004C8 381086E2 ADD R1,R6,#+56 \ 000004CC 0600A0E1 MOV R0,R6 \ 000004D0 670100EF SWI +359 \ 000004D4 B40487E5 STR R0,[R7, #+1204] 6985 } \ 000004D8 50D08DE2 ADD SP,SP,#+80 \ 000004DC F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 000004E0 ........ DC32 edchat_desc \ 000004E4 ........ 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,??DataTable283 ;; 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,??DataTable283 ;; 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,??DataTable283 ;; 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,??DataTable284 ;; HeaderShot \ 0000001C 8C1490E5 LDR R1,[R0, #+1164] \ 00000020 030051E3 CMP R1,#+3 \ 00000024 1D00001A BNE ??GetShortInfo_0 7071 { 7072 req_info_contact = 1; \ 00000028 0110A0E3 MOV R1,#+1 \ 0000002C D01480E5 STR R1,[R0, #+1232] 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,??DataTable294 ;; 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,??DataTable295 ;; 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,??DataTable292 ;; HeaderShot + 1164 \ 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,??DataTable292 ;; HeaderShot + 1164 \ 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,??DataTable293 ;; 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,??DataTable294 ;; 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,??DataTable295 ;; 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,??DataTable292 ;; HeaderShot + 1164 \ 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,??DataTable293 ;; 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,??DataTable294 ;; 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,??DataTable295 ;; 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,??DataTable296 ;; 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,??DataTable297 ;; HeaderShot + 1204 \ 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 \ HeaderShot: \ 00000000 DS8 12 \ 0000000C REQUIRE `?` \ popup: \ 0000000C DS8 288 \ 0000012C REQUIRE `?` \ ecmenu_ITEMS: \ 0000012C DS8 280 \ 00000244 REQUIRE `?` \ S_ICONS: \ 00000244 DS8 128 \ 000002C4 REQUIRE `?` \ MAINCSM: \ 000002C4 DS8 72 \ 0000030C REQUIRE `?` \ menu_sk: \ 0000030C DS8 24 \ 00000324 REQUIRE `?` \ gipc: \ 00000324 DS8 12 \ 00000330 REQUIRE `?` \ tmr_gipc: \ 00000330 DS8 12 \ 0000033C REQUIRE `?` \ CountMessage: \ 0000033C DS8 8 \ 00000344 REQUIRE `?` \ 00000344 DS8 8 \ 0000034C REQUIRE `?` \ 0000034C DS8 8 \ 00000354 REQUIRE `?` \ cltop: \ 00000354 DS8 4 \ 00000358 REQUIRE `?` \ maincsm_id: \ 00000358 DS8 4 \ 0000035C REQUIRE `?` \ maingui_id: \ 0000035C DS8 4 \ 00000360 REQUIRE `?` \ SENDMSGCOUNT: \ 00000360 DS8 4 \ 00000364 REQUIRE `?` \ IsActiveUp: \ 00000364 DS8 4 \ 00000368 REQUIRE `?` \ vibra_count: \ 00000368 DS8 4 \ 0000036C REQUIRE `?` \ Is_Double_Vibra_On: \ 0000036C DS8 4 \ 00000370 REQUIRE `?` \ Is_Vibra_Enabled: \ 00000370 DS8 4 \ 00000374 REQUIRE `?` \ Is_Sounds_Enabled: \ 00000374 DS8 4 \ 00000378 REQUIRE `?` \ Is_Show_Offline: \ 00000378 DS8 4 \ 0000037C REQUIRE `?` \ Is_Show_Groups: \ 0000037C DS8 4 \ 00000380 REQUIRE `?` \ Is_POPUP_On: \ 00000380 DS8 4 \ 00000384 REQUIRE `?` \ Is_SLI_On: \ 00000384 DS8 4 \ 00000388 REQUIRE `?` \ Is_ILU_By_Online: \ 00000388 DS8 4 \ 0000038C REQUIRE `?` \ Is_Extd_Sound: \ 0000038C DS8 4 \ 00000390 REQUIRE `?` \ total_unread: \ 00000390 DS8 4 \ 00000394 REQUIRE `?` \ total_unread_all: \ 00000394 DS8 4 \ 00000398 REQUIRE `?` \ wsBuffer: \ 00000398 DS8 4 \ 0000039C REQUIRE `?` \ develop_by_unlock: \ 0000039C DS8 4 \ 000003A0 REQUIRE `?` \ ShowLoadScreen: \ 000003A0 DS8 4 \ 000003A4 REQUIRE `?` \ 000003A4 DS8 4 \ 000003A8 REQUIRE `?` \ on_off_timer: \ 000003A8 DS8 4 \ 000003AC REQUIRE `?` \ online_contact: \ 000003AC DS8 4 \ 000003B0 REQUIRE `?` \ total_contact: \ 000003B0 DS8 4 \ 000003B4 REQUIRE `?` \ isonline: \ 000003B4 DS8 4 \ 000003B8 REQUIRE `?` \ DoRefreshCL: \ 000003B8 DS8 4 \ 000003BC REQUIRE `?` \ blocked_spam: \ 000003BC DS8 4 \ 000003C0 REQUIRE `?` \ LongPressTimer: \ 000003C0 DS8 4 \ 000003C4 REQUIRE `?` \ PrintTimer: \ 000003C4 DS8 4 \ 000003C8 REQUIRE `?` \ ews: \ 000003C8 DS8 4 \ 000003CC REQUIRE `?` \ icons_names: \ 000003CC DS8 124 \ 00000448 REQUIRE `?` \ Is_ILU_Mode: \ 00000448 DS8 4 \ 0000044C REQUIRE `?` \ silenthide: \ 0000044C DS8 4 \ 00000450 REQUIRE `?` \ disautorecconect: \ 00000450 DS8 4 \ 00000454 REQUIRE `?` \ CurrentStatus: \ 00000454 DS8 4 \ 00000458 REQUIRE `?` \ CurrentXStatus: \ 00000458 DS8 4 \ 0000045C REQUIRE `?` \ CurrentPrivateStatus: \ 0000045C DS8 4 \ 00000460 REQUIRE `?` \ msg_away_timer: \ 00000460 DS8 4 \ 00000464 REQUIRE `?` \ away_m: \ 00000464 DS8 4 \ 00000468 REQUIRE `?` \ status_rem: \ 00000468 DS8 4 \ 0000046C REQUIRE `?` \ change_back_status: \ 0000046C DS8 4 \ 00000470 REQUIRE `?` \ double_on: \ 00000470 DS8 4 \ 00000474 REQUIRE `?` \ FIRST_START: \ 00000474 DS8 4 \ 00000478 REQUIRE `?` \ ExtSndModeIndivd: \ 00000478 DS8 4 \ 0000047C REQUIRE `?` \ ExtSndMode_flag: \ 0000047C DS8 4 \ 00000480 REQUIRE `?` \ templates_chars: \ 00000480 DS8 4 \ 00000484 REQUIRE `?` \ templates_lines: \ 00000484 DS8 4 \ 00000488 REQUIRE `?` \ RXstate: \ 00000488 DS8 4 \ 0000048C REQUIRE `?` \ connect_state: \ 0000048C DS8 4 \ 00000490 REQUIRE `?` \ sock: \ 00000490 DS8 4 \ 00000494 REQUIRE `?` \ TOTALRECEIVED: \ 00000494 DS8 4 \ 00000498 REQUIRE `?` \ TOTALSENDED: \ 00000498 DS8 4 \ 0000049C REQUIRE `?` \ ALLTOTALRECEIVED: \ 0000049C DS8 4 \ 000004A0 REQUIRE `?` \ ALLTOTALSENDED: \ 000004A0 DS8 4 \ 000004A4 REQUIRE `?` \ sendq_l: \ 000004A4 DS8 4 \ 000004A8 REQUIRE `?` \ sendq_p: \ 000004A8 DS8 4 \ 000004AC REQUIRE `?` \ is_gprs_online: \ 000004AC DS8 4 \ 000004B0 REQUIRE `?` \ GROUP_CACHE: \ 000004B0 DS8 4 \ 000004B4 REQUIRE `?` \ edchat_id: \ 000004B4 DS8 4 \ 000004B8 REQUIRE `?` \ tenseconds_to_ping: \ 000004B8 DS8 4 \ 000004BC REQUIRE `?` \ DNR_ID: \ 000004BC DS8 4 \ 000004C0 REQUIRE `?` \ DNR_TRIES: \ 000004C0 DS8 4 \ 000004C4 REQUIRE `?` \ host_counter: \ 000004C4 DS8 4 \ 000004C8 REQUIRE `?` \ NEW_MSG: \ 000004C8 DS8 4 \ 000004CC REQUIRE `?` \ time_to_stop_t9: \ 000004CC DS8 4 \ 000004D0 REQUIRE `?` \ req_info_contact: \ 000004D0 DS8 4 \ 000004D4 REQUIRE `?` \ HeaderY: \ 000004D4 DS8 4 \ 000004D8 REQUIRE `?` \ 000004D8 DS8 4 \ 000004DC REQUIRE `?` \ 000004DC DS8 4 \ 000004E0 REQUIRE `?` \ shot_soft: \ 000004E0 DS8 4 \ 000004E4 REQUIRE `?` \ shot_header: \ 000004E4 DS8 4 \ 000004E8 REQUIRE `?` \ myack: \ 000004E8 DS8 4 \ 000004EC REQUIRE `?` \ scr_w: \ 000004EC DS8 4 \ 000004F0 REQUIRE `?` \ scr_h: \ 000004F0 DS8 4 \ 000004F4 REQUIRE `?` \ iconmsgblink: \ 000004F4 DS8 4 \ 000004F8 REQUIRE `?` \ old_ed_redraw: \ 000004F8 DS8 4 \ 000004FC REQUIRE `?` \ 000004FC DS8 64 \ 0000053C REQUIRE `?` \ uptime: \ 0000053C DS8 8 \ 00000544 REQUIRE `?` \ elf_path: \ 00000544 DS8 256 \ 00000644 REQUIRE `?` \ prmsg: \ 00000644 DS8 256 \ 00000744 REQUIRE `?` \ ContactT9Key: \ 00000744 DS8 32 \ 00000764 REQUIRE `?` \ last_msg_buffer: \ 00000764 DS8 4096 \ 00001764 REQUIRE `?` \ on_off_buf: \ 00001764 DS8 128 \ 000017E4 REQUIRE `?` \ logmsg: \ 000017E4 DS8 256 \ 000018E4 REQUIRE `?` \ tmr_illumination: \ 000018E4 DS8 16 \ 000018F4 REQUIRE `?` \ away_msg: \ 000018F4 DS8 256 \ 000019F4 REQUIRE `?` \ away_msg_time: \ 000019F4 DS8 64 \ 00001A34 REQUIRE `?` \ away_msg_time_dace: \ 00001A34 DS8 16 \ 00001A44 REQUIRE `?` \ away_tmr: \ 00001A44 DS8 16 \ 00001A54 REQUIRE `?` \ remind_tmr: \ 00001A54 DS8 16 \ 00001A64 REQUIRE `?` \ tmr_vibra: \ 00001A64 DS8 16 \ 00001A74 REQUIRE `?` \ reconnect_tmr: \ 00001A74 DS8 16 \ 00001A84 REQUIRE `?` \ tmr_active: \ 00001A84 DS8 16 \ 00001A94 REQUIRE `?` \ 00001A94 DS8 32 \ 00001AB4 REQUIRE `?` \ 00001AB4 DS8 32 \ 00001AD4 REQUIRE `?` \ clmenu_sk_r: \ 00001AD4 DS8 16 \ 00001AE4 REQUIRE `?` \ 00001AE4 DS8 32 \ 00001B04 REQUIRE `?` \ 00001B04 DS8 32 \ 00001B24 REQUIRE `?` \ hostname: \ 00001B24 DS8 128 \ 00001BA4 REQUIRE `?` \ sli_tmr: \ 00001BA4 DS8 16 \ 00001BB4 REQUIRE `?` \ clrBlack: \ 00001BB4 DS8 4 \ 00001BB8 REQUIRE `?` \ clrWhite: \ 00001BB8 DS8 4 \ 00001BBC REQUIRE `?` \ clrRed: \ 00001BBC DS8 4 \ 00001BC0 REQUIRE `?` \ blue: \ 00001BC0 DS8 8 \ 00001BC8 REQUIRE `?` \ tmr_scroll: \ 00001BC8 DS8 16 \ 00001BD8 REQUIRE `?` \ online_tmr: \ 00001BD8 DS8 16 \ 00001BE8 REQUIRE `?` \ OneSecTmr: \ 00001BE8 DS8 16 \ 00001BF8 REQUIRE `?` 7309 7310 7311 char ecm_contactname[64]; \ ecm_contactname: \ 00001BF8 DS8 64 \ 00001C38 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ SoftShot: \ 00000000 DS8 12 \ 0000000C 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, 2147483647 \ ....FFFFFF7F \ 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 6800000A BEQ ??ec_menu_0 7335 { 7336 if(strlen(t->name)) \ 00000018 ........ LDR R5,??DataTable298 ;; HeaderShot \ 0000001C F800A0E3 MOV R0,#+248 \ 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 5B1F8FE2 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 8C0495E5 LDR R0,[R5, #+1164] \ 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 B4709FE5 LDR R7,??ec_menu_3+0x4 ;; ecmenu_HDR \ 00000110 1800A0E3 MOV R0,#+24 \ 00000114 B010C7E1 STRH R1,[R7, #+0] \ 00000118 B200C7E1 STRH R0,[R7, #+2] \ 0000011C 888100EF SWI +33160 \ 00000120 010040E2 SUB R0,R0,#+1 \ 00000124 B400C7E1 STRH R0,[R7, #+4] \ 00000128 8A8100EF SWI +33162 \ 0000012C 170080E2 ADD R0,R0,#+23 \ 00000130 B600C7E1 STRH R0,[R7, #+6] 7368 to_remove[0]=remove; 7369 7370 //Инициализация ленгпака 7371 ecmenu_ITEMS[0].lgp_id_small=(int)lgpData[LGP_MnuQuote]; \ 00000134 ........ LDR R0,??DataTable299 ;; lgpData \ 00000138 00608DE5 STR R6,[SP, #+0] \ 0000013C AC1090E5 LDR R1,[R0, #+172] 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); \ 00000140 0730A0E1 MOV R3,R7 \ 00000144 301185E5 STR R1,[R5, #+304] \ 00000148 B01090E5 LDR R1,[R0, #+176] \ 0000014C 242087E2 ADD R2,R7,#+36 \ 00000150 4C1185E5 STR R1,[R5, #+332] \ 00000154 B41090E5 LDR R1,[R0, #+180] \ 00000158 681185E5 STR R1,[R5, #+360] \ 0000015C B81090E5 LDR R1,[R0, #+184] \ 00000160 841185E5 STR R1,[R5, #+388] \ 00000164 BC1090E5 LDR R1,[R0, #+188] \ 00000168 A01185E5 STR R1,[R5, #+416] \ 0000016C C01090E5 LDR R1,[R0, #+192] \ 00000170 BC1185E5 STR R1,[R5, #+444] \ 00000174 C41090E5 LDR R1,[R0, #+196] \ 00000178 D81185E5 STR R1,[R5, #+472] \ 0000017C C81090E5 LDR R1,[R0, #+200] \ 00000180 CC0090E5 LDR R0,[R0, #+204] \ 00000184 F41185E5 STR R1,[R5, #+500] \ 00000188 141087E2 ADD R1,R7,#+20 \ 0000018C 101285E5 STR R1,[R5, #+528] \ 00000190 2C0285E5 STR R0,[R5, #+556] \ 00000194 0D00A0E1 MOV R0,SP \ 00000198 01002DE9 PUSH {R0} \ 0000019C 10002DE9 PUSH {R4} \ 000001A0 0010A0E3 MOV R1,#+0 \ 000001A4 0A00A0E3 MOV R0,#+10 \ 000001A8 01002DE9 PUSH {R0} \ 000001AC 0000A0E3 MOV R0,#+0 \ 000001B0 01002DE9 PUSH {R0} \ 000001B4 520100EF SWI +338 \ 000001B8 10D08DE2 ADD SP,SP,#+16 7383 } 7384 } \ ??ec_menu_0: \ 000001BC 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000001C0 F080BDE8 POP {R4-R7,PC} ;; return \ ??ec_menu_3: \ 000001C4 25750000 DC8 "%u",+0 \ 000001C8 ........ 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 \ ??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 HeaderShot \ 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 HeaderShot + 1860 \ In segment CODE, align 4, keep-with-next \ ??DataTable62: \ 00000000 ........ DC32 HeaderShot \ In segment CODE, align 4, keep-with-next \ ??DataTable63: \ 00000000 ........ DC32 HeaderShot + 852 \ 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 \ ??DataTable69: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable71: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable72: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable73: \ 00000000 ........ DC32 HeaderShot \ In segment CODE, align 4, keep-with-next \ ??DataTable74: \ 00000000 ........ DC32 sndMsg \ In segment CODE, align 4, keep-with-next \ ??DataTable75: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable79: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable81: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable82: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable83: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable91: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable92: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable94: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable95: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable96: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable97: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable98: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable99: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable100: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable101: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable102: \ 00000000 ........ DC32 HeaderShot + 1204 \ In segment CODE, align 4, keep-with-next \ ??DataTable107: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable109: \ 00000000 ........ DC32 lgpData \ In segment CODE, align 4, keep-with-next \ ??DataTable110: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable111: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable112: \ 00000000 ........ DC32 HeaderShot \ In segment CODE, align 4, keep-with-next \ ??DataTable114: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable115: \ 00000000 89888888 DC32 0xffffffff88888889 \ In segment CODE, align 4, keep-with-next \ ??DataTable116: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable117: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable120: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable121: \ 00000000 ........ DC32 ADDITION_UIN \ 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 \ ??DataTable132: \ 00000000 ........ DC32 HeaderShot + 7076 \ In segment CODE, align 4, keep-with-next \ ??DataTable135: \ 00000000 ........ DC32 HeaderShot \ In segment CODE, align 4, keep-with-next \ ??DataTable140: \ 00000000 ........ DC32 _t \ In segment CODE, align 4, keep-with-next \ ??DataTable141: \ 00000000 ........ DC32 HeaderShot + 1860 \ In segment CODE, align 4, keep-with-next \ ??DataTable142: \ 00000000 ........ DC32 longAct_0 \ In segment CODE, align 4, keep-with-next \ ??DataTable143: \ 00000000 ........ DC32 longAct_1 \ In segment CODE, align 4, keep-with-next \ ??DataTable144: \ 00000000 ........ DC32 longAct_2 \ In segment CODE, align 4, keep-with-next \ ??DataTable145: \ 00000000 ........ DC32 longAct_3 \ In segment CODE, align 4, keep-with-next \ ??DataTable146: \ 00000000 ........ DC32 longAct_4 \ In segment CODE, align 4, keep-with-next \ ??DataTable147: \ 00000000 ........ DC32 longAct_5 \ In segment CODE, align 4, keep-with-next \ ??DataTable148: \ 00000000 ........ DC32 longAct_6 \ In segment CODE, align 4, keep-with-next \ ??DataTable149: \ 00000000 ........ DC32 longAct_7 \ In segment CODE, align 4, keep-with-next \ ??DataTable150: \ 00000000 ........ DC32 longAct_8 \ In segment CODE, align 4, keep-with-next \ ??DataTable151: \ 00000000 ........ DC32 longAct_9 \ In segment CODE, align 4, keep-with-next \ ??DataTable152: \ 00000000 ........ DC32 longAct_10 \ In segment CODE, align 4, keep-with-next \ ??DataTable153: \ 00000000 ........ DC32 longAct_11 \ In segment CODE, align 4, keep-with-next \ ??DataTable157: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable158: \ 00000000 ........ DC32 HeadFont \ In segment CODE, align 4, keep-with-next \ ??DataTable159: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable161: \ 00000000 ........ DC32 scroll_timer_proc \ In segment CODE, align 4, keep-with-next \ ??DataTable163: \ 00000000 ........ DC32 ClFont \ In segment CODE, align 4, keep-with-next \ ??DataTable165: \ 00000000 ........ DC32 HeaderShot \ In segment CODE, align 4, keep-with-next \ ??DataTable169: \ 00000000 ........ DC32 SOFT_MODE \ In segment CODE, align 4, keep-with-next \ ??DataTable170: \ 00000000 ........ DC32 HeadFont \ In segment CODE, align 4, keep-with-next \ ??DataTable171: \ 00000000 ........ DC32 ClFont \ In segment CODE, align 4, keep-with-next \ ??DataTable173: \ 00000000 ........ DC32 GroupClr \ In segment CODE, align 4, keep-with-next \ ??DataTable174: \ 00000000 ........ DC32 ClBoldFont \ In segment CODE, align 4, keep-with-next \ ??DataTable176: \ 00000000 ........ DC32 VIEW_MODE \ In segment CODE, align 4, keep-with-next \ ??DataTable177: \ 00000000 ........ DC32 HeaderShot \ In segment CODE, align 4, keep-with-next \ ??DataTable181: \ 00000000 ........ DC32 HeaderShot + 932 \ In segment CODE, align 4, keep-with-next \ ??DataTable184: \ 00000000 ........ DC32 SOFT_MODE \ In segment CODE, align 4, keep-with-next \ ??DataTable187: \ 00000000 ........ DC32 HeaderShot + 852 \ In segment CODE, align 4, keep-with-next \ ??DataTable189: \ 00000000 ........ DC32 VIEW_MODE \ In segment CODE, align 4, keep-with-next \ ??DataTable190: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable191: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable192: \ 00000000 ........ DC32 HeaderShot \ In segment CODE, align 4, keep-with-next \ ??DataTable193: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable194: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable197: \ 00000000 89888888 DC32 0xffffffff88888889 \ In segment CODE, align 4, keep-with-next \ ??DataTable201: \ 00000000 ........ DC32 ClFont \ In segment CODE, align 4, keep-with-next \ ??DataTable202: \ 00000000 ........ DC32 lgpData \ In segment CODE, align 4, keep-with-next \ ??DataTable207: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable212: \ 00000000 ........ DC32 OneSecondTimer \ In segment CODE, align 4, keep-with-next \ ??DataTable213: \ 00000000 ........ DC32 process_active_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable221: \ 00000000 ........ DC32 HeaderShot \ In segment CODE, align 4, keep-with-next \ ??DataTable223: \ 00000000 ........ DC32 DEVELOP_IF \ In segment CODE, align 4, keep-with-next \ ??DataTable225: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable229: \ 00000000 ........ DC32 ClFont \ In segment CODE, align 4, keep-with-next \ ??DataTable230: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable232: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable233: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable236: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable237: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable238: \ 00000000 ........ DC32 ClearSendQ \ In segment CODE, align 4, keep-with-next \ ??DataTable239: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable241: \ 00000000 ........ DC32 ADDITION_UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable244: \ 00000000 ........ DC32 HeaderShot \ In segment CODE, align 4, keep-with-next \ ??DataTable245: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable246: \ 00000000 ........ DC32 successed_config_filename \ In segment CODE, align 4, keep-with-next \ ??DataTable247: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable248: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable250: \ 00000000 ........ DC32 HeaderShot + 852 \ In segment CODE, align 4, keep-with-next \ ??DataTable253: \ 00000000 ........ DC32 lgpData \ In segment CODE, align 4, keep-with-next \ ??DataTable256: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable257: \ 00000000 ........ DC32 HeaderShot \ In segment CODE, align 4, keep-with-next \ ??DataTable260: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable261: \ 00000000 ........ DC32 IsBufferMenu \ In segment CODE, align 4, keep-with-next \ ??DataTable266: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable267: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable268: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable269: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable270: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable271: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable272: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable273: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable274: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable275: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable276: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable277: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable278: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable280: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable283: \ 00000000 ........ DC32 Focus_Quote \ In segment CODE, align 4, keep-with-next \ ??DataTable284: \ 00000000 ........ DC32 HeaderShot \ In segment CODE, align 4, keep-with-next \ ??DataTable292: \ 00000000 ........ DC32 HeaderShot + 1164 \ In segment CODE, align 4, keep-with-next \ ??DataTable293: \ 00000000 ........ DC32 lgpData \ In segment CODE, align 4, keep-with-next \ ??DataTable294: \ 00000000 ........ DC32 I_str \ In segment CODE, align 4, keep-with-next \ ??DataTable295: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable296: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable297: \ 00000000 ........ DC32 HeaderShot + 1204 \ In segment CODE, align 4, keep-with-next \ ??DataTable298: \ 00000000 ........ DC32 HeaderShot \ In segment CODE, align 4, keep-with-next \ ??DataTable299: \ 00000000 ........ DC32 lgpData \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 00000000 DC16 0, 0 \ 00000004 08000000.... DC32 8, `?` \ .... \ `?`: \ 0000000C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000001C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000002C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000003C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000004C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000005C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000006C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000007C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000008C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000009C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000000FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000010C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000011C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000012C 000000000000 DC32 0H, 0, 2147483647, 0, 0H, 3, 1442, 0H, 0, 2147483647, 0, 0H, 3 \ 0000FFFFFF7F \ 000000000000 \ 000003000000 \ A20500000000 \ 000000000000 \ FFFFFF7F0000 \ 000000000000 \ 03000000 \ 00000160 A20500000000 DC32 1442, 0H, 0, 2147483647, 0, 0H, 3, 1442, 0H, 0, 2147483647, 0, 0H \ 000000000000 \ FFFFFF7F0000 \ 000000000000 \ 03000000A205 \ 000000000000 \ 00000000FFFF \ FF7F00000000 \ 00000000 \ 00000194 03000000A205 DC32 3, 1442, 0H, 0, 2147483647, 0, 0H, 3, 1442, 0H, 0, 2147483647, 0 \ 000000000000 \ 00000000FFFF \ FF7F00000000 \ 000000000300 \ 0000A2050000 \ 000000000000 \ 0000FFFFFF7F \ 00000000 \ 000001C8 000000000300 DC32 0H, 3, 1442, 0H, 0, 2147483647, 0, 0H, 3, 1442, 0H, 0, 2147483647 \ 0000A2050000 \ 000000000000 \ 0000FFFFFF7F \ 000000000000 \ 000003000000 \ A20500000000 \ 000000000000 \ FFFFFF7F \ 000001FC 000000000000 DC32 0, 0H, 3, 1442, 0H, 0, 2147483647, 0, 0H, 3, 1442, 0H, 0 \ 000003000000 \ A20500000000 \ 000000000000 \ FFFFFF7F0000 \ 000000000000 \ 03000000A205 \ 000000000000 \ 00000000 \ 00000230 FFFFFF7F0000 DC32 2147483647, 0, 0H, 3, 1442 \ 000000000000 \ 03000000A205 \ 0000 \ `?`: \ 00000244 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000254 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000264 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000274 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000284 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000294 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000002C4 ............ DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 000002E0 2C0000000100 DC32 44, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 00000000 \ 000002FC 8B00 DC16 139 \ 000002FE 0000 DC8 0, 0 \ 00000300 49636F6E4261 DC8 "IconBar" \ 7200 \ 00000308 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000030C 18000000 DC16 24, 0 \ 00000310 00000000 DC32 0 \ 00000314 01000000 DC16 1, 0 \ 00000318 00000000 DC32 0 \ 0000031C 3D000000 DC16 61, 0 \ 00000320 FBC0FF7F DC32 2147467515 \ `?`: \ 00000324 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000330 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 0000033C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00000344 FF0F0000 DC16 4095, 0 \ 00000348 00000000 DC32 0 \ `?`: \ 0000034C F00F0000 DC16 4080, 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 DC8 0, 0, 0, 0 \ `?`: \ 00000364 00000000 DC32 0 \ `?`: \ 00000368 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000036C 00000000 DC32 0 \ `?`: \ 00000370 00000000 DC32 0 \ `?`: \ 00000374 00000000 DC32 0 \ `?`: \ 00000378 00000000 DC32 0 \ `?`: \ 0000037C 00000000 DC32 0 \ `?`: \ 00000380 01000000 DC32 1 \ `?`: \ 00000384 01000000 DC32 1 \ `?`: \ 00000388 01000000 DC32 1 \ `?`: \ 0000038C 00000000 DC32 0 \ `?`: \ 00000390 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000394 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000398 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000039C 00000000 DC32 0 \ `?`: \ 000003A0 01000000 DC32 1 \ `?`: \ 000003A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003A8 00000000 DC32 0 \ `?`: \ 000003AC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003B8 00000000 DC32 0 \ `?`: \ 000003BC 00000000 DC32 0 \ `?`: \ 000003C0 00000000 DC32 0 \ `?`: \ 000003C4 00000000 DC32 0 \ `?`: \ 000003C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003CC ............ DC32 `?`, `?` \ .... \ 000003D4 ............ DC32 `?`, `?` \ .... \ 000003DC ............ DC32 `?`, `?` \ .... \ 000003E4 ............ DC32 `?`, `?` \ .... \ 000003EC ............ DC32 `?`, `?` \ .... \ 000003F4 ............ DC32 `?`, `?` \ .... \ 000003FC ............ DC32 `?`, `?` \ .... \ 00000404 ............ DC32 `?`, `?` \ .... \ 0000040C ............ DC32 `?`, `?` \ .... \ 00000414 ............ DC32 `?`, `?` \ .... \ 0000041C ............ DC32 `?`, `?` \ .... \ 00000424 ............ DC32 `?`, `?` \ .... \ 0000042C ............ DC32 `?`, `?` \ .... \ 00000434 ............ DC32 `?`, `?` \ .... \ 0000043C ............ DC32 `?`, `?` \ .... \ 00000444 ........ DC32 `?` \ `?`: \ 00000448 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000044C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000450 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000454 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000458 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000045C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000460 00000000 DC32 0 \ `?`: \ 00000464 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000468 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000046C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000470 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000474 00000000 DC32 0 \ `?`: \ 00000478 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000047C 00000000 DC32 0 \ `?`: \ 00000480 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000484 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000488 F6FFFFFF DC32 -10 \ `?`: \ 0000048C 00000000 DC32 0 \ `?`: \ 00000490 FFFFFFFF DC32 -1 \ `?`: \ 00000494 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000498 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000049C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004A4 00000000 DC32 0 \ `?`: \ 000004A8 00000000 DC32 0H \ `?`: \ 000004AC 01000000 DC32 1 \ `?`: \ 000004B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004BC 00000000 DC32 0 \ `?`: \ 000004C0 03000000 DC32 3 \ `?`: \ 000004C4 00000000 DC32 0 \ `?`: \ 000004C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004D0 00000000 DC32 0 \ `?`: \ 000004D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004D8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004DC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004E0 00000000 DC32 0 \ `?`: \ 000004E4 00000000 DC32 0 \ `?`: \ 000004E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004F4 01000000 DC32 1 \ `?`: \ 000004F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000004FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000050C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000051C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000052C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000053C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00000544 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000554 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000564 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000574 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000584 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000594 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000604 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000614 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000624 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000634 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000644 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000654 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000664 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000674 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000684 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000694 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000704 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000714 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000724 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000734 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000744 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000754 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000764 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000774 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000784 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000794 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000804 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000814 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000824 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000834 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000844 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000854 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000864 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000874 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000884 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000894 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000904 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000914 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000924 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000934 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000944 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000954 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000964 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000974 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000984 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000994 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ED4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001004 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001014 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001024 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001034 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001044 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001054 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001064 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001074 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001084 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001094 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001104 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001114 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001124 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001134 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001144 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001154 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001164 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001174 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001184 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001194 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001204 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001214 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001224 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001234 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001244 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001254 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001264 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001274 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001284 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001294 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001304 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001314 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001324 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001334 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001344 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001354 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001364 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001374 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001384 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001394 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001404 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001414 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001424 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001434 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001444 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001454 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001464 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001474 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001484 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001494 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001504 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001514 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001524 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001534 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001544 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001554 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001564 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001574 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001584 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001594 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001604 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001614 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001624 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001634 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001644 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001654 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001664 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001674 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001684 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001694 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001704 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001714 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001724 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001734 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001744 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001754 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001764 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001774 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001784 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001794 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000017E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001804 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001814 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001824 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001834 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001844 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001854 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001864 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001874 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001884 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001894 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001904 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001914 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001924 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001934 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001944 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001954 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001964 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001974 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001984 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001994 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000019F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A94 00 DC8 "" \ 00001A95 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AA5 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000 \ `?`: \ 00001AB4 00 DC8 "" \ 00001AB5 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AC5 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000 \ `?`: \ 00001AD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001AE4 00 DC8 "" \ 00001AE5 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AF5 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000 \ `?`: \ 00001B04 00 DC8 "" \ 00001B05 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B15 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000 \ `?`: \ 00001B24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001BA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001BB4 00000064 DC8 0, 0, 0, 100 \ `?`: \ 00001BB8 FFFFFF64 DC8 255, 255, 255, 100 \ `?`: \ 00001BBC FF000064 DC8 255, 0, 0, 100 \ `?`: \ 00001BC0 0000FF6400 DC8 0, 0, 0FFH, 64H, 0 \ 00001BC5 000000 DC8 0, 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 \ 00001C08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 00000000 DC16 0, 0 \ 00000004 08000000.... DC32 8, `?` \ .... \ 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 6D703300 DC8 "mp3" \ 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 5C302E747874 DC8 "\\0.txt" \ 00 \ 00000007 00 DC8 0 \ 00000008 5C25642E7478 DC8 "\\%d.txt" \ 7400 \ 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 \ `?_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 00000000 DC16 0, 0 \ 00000004 08000000.... DC32 8, `?` \ .... \ 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 CCE5EDFE00 DC8 "\314\345\355\376" \ 00000005 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 5B495D0A00 DC8 "[I]\012" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5B565D0A00 DC8 "[V]\012" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5B535D0A00 DC8 "[S]\012" \ 00000005 000000 DC8 0, 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 6C756E63682E DC8 "lunch.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 776F726B2E70 DC8 "work.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 0000004000 DC8 0, 0, 0, 40H, 0 \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6666632E706E DC8 "ffc.png" \ 6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6D6573736167 DC8 "message.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 756E6B6E6F77 DC8 "unknown.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupon.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupoff.png" \ 66662E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E756C6C2E70 DC8 "null.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 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 36 DrawAck 80 DrawContactList 28 DrawHeader 64 DrawList 108 DrawLoadScreen 132 DrawOnlineContact 24 DrawScrollBar 60 DrawScrollStr 60 DrawSoftKeys 72 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 156 RecountMenu 12 RedrawOnline 16 RefreshCL 0 Remind 8 Reminder_timer 4 RemoveLOGQ 4 ReqAddMsgToChat 16 RequestXText 8 SLI_Off 4 SLI_On 4 SLI_check 8 SMART_REDRAW 8 SaveAnswer 12 SendAnswer 40 SendAuthGrant 32 SendAuthReq 32 SendMSGACK 8 SetIconBarHandler 0 SetVisibleScreen 28 UpTime 8 UpdateCSMname 4 WriteDefSettings 156 ZeroOnline 16 addIconBar 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 7364 get_rev 96 lgpUpdateClHdr 12 main 60 maincsm_onclose 8 maincsm_oncreate 20 maincsm_onmessage 72 method0 12 method1 12 method2 20 method3 8 method4 0 method5 8 method8 0 method9 0 my_ed_redraw 12 process_active_timer 12 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 888 LongPressAction 188 DrwImage 156 IsNoJavaRun 72 show_on_contact 404 show_off_contact 412 show_pp_sender 356 ReadDefSettings 416 WriteDefSettings 336 GetExtSnd 136 Play 312 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 36 end_socket 52 get_rev 156 SendAnswer 432 do_ping 52 SendMSGACK 52 RequestXText 52 get_answer 1856 AddStringToLog 636 ParseXStatusText 152 AddMsgToChat 900 DrawAck 336 ask_my_info 4 set_my_status 72 set_my_xstatus 264 to_develop 84 ReqAddMsgToChat 120 GetStatusByIconIndex 144 FindSubWord 92 GetCLV 244 AutoAnswer 612 ProcessPacket 3076 process_active_timer 148 SLI_On 36 SLI_Off 36 SLI_check 64 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 864 GetPrivateIcon 84 DrawHeader 1488 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 188 ZeroOnline 192 FindMessage 144 ClOnKey 1500 DrawLoadScreen 1392 method0 76 method1 164 method2 136 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 ? 388 def_setting 20 menusoftkeys 12 menu_skt 8 _t 3 maincsm_oncreate 304 maincsm_onclose 272 do_reconnect 40 CheckDoubleRun 112 maincsm_onmessage 2308 minus11 4 addIconBar 284 maincsm_name_body 280 UpdateCSMname 36 SetIconBarHandler 20 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 116 edchat_ghook 564 edchat_desc 84 CreateEditChat 1256 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 HeaderShot 7224 SoftShot 12 ecmenu_HDR 80 ec_menu 460 AskNickAndAddContact 8 AddSmile 24 ??DataTable7 4 ??DataTable9 4 ??DataTable13 4 ??DataTable15 4 ??DataTable16 4 ??DataTable18 4 ??DataTable19 4 ??DataTable20 4 ??DataTable21 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 ??DataTable69 4 ??DataTable71 4 ??DataTable72 4 ??DataTable73 4 ??DataTable74 4 ??DataTable75 4 ??DataTable79 4 ??DataTable81 4 ??DataTable82 4 ??DataTable83 4 ??DataTable91 4 ??DataTable92 4 ??DataTable94 4 ??DataTable95 4 ??DataTable96 4 ??DataTable97 4 ??DataTable98 4 ??DataTable99 4 ??DataTable100 4 ??DataTable101 4 ??DataTable102 4 ??DataTable107 4 ??DataTable109 4 ??DataTable110 4 ??DataTable111 4 ??DataTable112 4 ??DataTable114 4 ??DataTable115 4 ??DataTable116 4 ??DataTable117 4 ??DataTable120 4 ??DataTable121 4 ??DataTable122 4 ??DataTable123 4 ??DataTable124 4 ??DataTable125 4 ??DataTable126 4 ??DataTable127 4 ??DataTable129 4 ??DataTable130 4 ??DataTable132 4 ??DataTable135 4 ??DataTable140 4 ??DataTable141 4 ??DataTable142 4 ??DataTable143 4 ??DataTable144 4 ??DataTable145 4 ??DataTable146 4 ??DataTable147 4 ??DataTable148 4 ??DataTable149 4 ??DataTable150 4 ??DataTable151 4 ??DataTable152 4 ??DataTable153 4 ??DataTable157 4 ??DataTable158 4 ??DataTable159 4 ??DataTable161 4 ??DataTable163 4 ??DataTable165 4 ??DataTable169 4 ??DataTable170 4 ??DataTable171 4 ??DataTable173 4 ??DataTable174 4 ??DataTable176 4 ??DataTable177 4 ??DataTable181 4 ??DataTable184 4 ??DataTable187 4 ??DataTable189 4 ??DataTable190 4 ??DataTable191 4 ??DataTable192 4 ??DataTable193 4 ??DataTable194 4 ??DataTable197 4 ??DataTable201 4 ??DataTable202 4 ??DataTable207 4 ??DataTable212 4 ??DataTable213 4 ??DataTable221 4 ??DataTable223 4 ??DataTable225 4 ??DataTable229 4 ??DataTable230 4 ??DataTable232 4 ??DataTable233 4 ??DataTable236 4 ??DataTable237 4 ??DataTable238 4 ??DataTable239 4 ??DataTable241 4 ??DataTable244 4 ??DataTable245 4 ??DataTable246 4 ??DataTable247 4 ??DataTable248 4 ??DataTable250 4 ??DataTable253 4 ??DataTable256 4 ??DataTable257 4 ??DataTable260 4 ??DataTable261 4 ??DataTable266 4 ??DataTable267 4 ??DataTable268 4 ??DataTable269 4 ??DataTable270 4 ??DataTable271 4 ??DataTable272 4 ??DataTable273 4 ??DataTable274 4 ??DataTable275 4 ??DataTable276 4 ??DataTable277 4 ??DataTable278 4 ??DataTable280 4 ??DataTable283 4 ??DataTable284 4 ??DataTable292 4 ??DataTable293 4 ??DataTable294 4 ??DataTable295 4 ??DataTable296 4 ??DataTable297 4 ??DataTable298 4 ??DataTable299 4 ? 7224 ? 12 ? 12 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 12 ? 12 ? 8 ? 1 ? 96 ? 8 ? 4 ? 4 ? 4 ? 16 ? 124 ?_1 44 ? 52 ? 264 ? 4 ?_1 72 ? 16 ? 4 ? 3 ? 12 ? 8 ? 8 ? 8 ? 8 ? 8 ? 8 ? 8 ? 4 ? 4 ? 4 ? 8 ? 4 ? 12 ? 8 ? 8 ? 8 ? 12 ? 12 ? 44 ? 164 ? 16 ? 16 ? 28 ?_1 3 ? 12 ? 16 ? 12 ? 8 ? 16 ? 8 ? 16 ? 12 ? 12 ? 12 ? 12 ? 8 ? 8 ? 12 ? 12 ? 12 ? 16 ? 12 Others 1164 44 424 bytes in segment CODE 3 210 bytes in segment DATA_C 7 236 bytes in segment DATA_I 7 236 bytes in segment DATA_ID 33 136 bytes in segment DATA_Z 24 bytes in segment INITTAB 43 284 bytes of CODE memory (+ 1 164 bytes shared) 10 446 bytes of CONST memory 40 372 bytes of DATA memory Errors: none Warnings: 1