############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.41A/W32 EVALUATION 27/Feb/2008 23:01:08 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\main.c # # Command line = "D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\main.c" -D NEWSGOLD -D ELKA -D # # EVILFOX --preprocess "D:\Pasha\elf\mod_src\naticq_2n # # d_mod to all(17.02.08)\EVILFOX_ICQ\List\" -lC # # "D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\EVILFOX_ICQ\List\" -o # # "D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\EVILFOX_ICQ\Obj\" -s9 --no_unroll # # --cpu_mode arm --endian little --cpu ARM926EJ-S # # --stack_align 4 --interwork -e --fpu None # # --dlib_config "D:\Pasha\ARM_Embedded_Workbench\Embed # # ded Workbench 4.0 Evaluation\ARM\LIB\dl5tpainl8n.h" # # -I "D:\Pasha\ARM_Embedded_Workbench\Embedded # # Workbench 4.0 Evaluation\ARM\INC\" # # --inline_threshold=2 # # List file = D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\EVILFOX_ICQ\List\main.lst # # Object file = D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\EVILFOX_ICQ\Obj\main.r79 # # # # # ############################################################################## D:\Pasha\elf\mod_src\naticq_2nd_mod to all(17.02.08)\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 "naticq_ipc.h" 13 #include "status_change.h" 14 #include "strings.h" 15 #include "manage_cl.h" 16 #include "cl_work.h" 17 #include "select_smile.h" 18 #include "revision.h" 19 #ifdef EVILFOX 20 #include "print.h" 21 #endif 22 23 #ifndef NEWSGOLD 24 #define SEND_TIMER 25 #endif 26 27 int total_unread; 28 #define EOP -10 29 int CurrentStatus; 30 int CurrentXStatus; 31 volatile CLIST *cltop; 32 33 #ifdef EVILFOX 34 //=========================mod definitions 35 #ifdef ELKA 36 #pragma swi_number=54 37 __swi __arm void SLI_SetState(unsigned char state); //for sli usage 38 #endif 39 #ifdef NEWSGOLD 40 #pragma swi_number=0x0C5 41 __swi __arm int IsIdleUiOnTop(); //for check if idlegui 42 #endif 43 char upcoming[64]; //for nick that comes online 44 int total_unread2; //for total unread mesages 45 int total_c_online; //for count of contacts who just came online 46 #ifdef ELKA 47 int Is_SLI_On; //for checking if is active sli 48 GBSTMR mytmr; //timer for sli 49 #endif 50 //extern const int SLI_TYPE; //for check where to activate sli 51 int Is_ILU_On; // for ilumination use 52 int seconds; //sekundes 53 int minutes; //minuutes 54 int hours; //hours 55 GBSTMR ctmr; //time counter 56 char online_txt[18]; //online txt 57 extern const unsigned int ONTIME_X; //cordinates for online time ms 58 extern const unsigned int ONTIME_Y; //cordinates for online time ms 59 extern const int Pause_Time; // for time refresher 60 int align=0; //align for png font 61 extern const unsigned int fonto; // font number 62 extern const unsigned int spaco1; // space between letters in png font 63 extern const unsigned int spaco2; // space between letters in png font 64 extern const unsigned int system_color; //system font color 65 int spaco1r; //display 66 extern const char fontpath[64]; //font path for png 67 int time_draw; //refresh for mainscreen 68 void *canvasdata; //just canvasdata 69 int show_ping; //for autoping not show 70 int ping_sec; //for autoping engaging 71 extern const int Show_Ping; //do ping if 1 72 extern const unsigned int PING_X; //cordinates for ping ms 73 extern const unsigned int PING_Y; //cordinates for ping ms 74 char ping_txt[16]; // ping txt 75 extern const unsigned int UNREAD_X; //cordinates for unread ms 76 extern const unsigned int UNREAD_Y; //cordinates for unread ms 77 char unread_txt[16]; //unread msg txt 78 extern const int Is_Unread_On; //show/hide unread on ms 79 extern const int Is_Online_On; //show/hide online time on ms 80 int INC_show; //for popup sender counter 81 char show_nick[64]; //nick save for popup sender 82 int Is_INC_On; // show//hide popup sender 83 GBSTMR incs; // popup sendet timer 84 #ifdef ELKA 85 int font=9; // font for popup sender 86 #else 87 #ifdef NEWSGOLD 88 int font=11; // font for popup sender 89 #else 90 int font=7; // font for popup sender 91 #endif 92 #endif 93 //const char color[4]={255,255,255,100}; // color for popup sender 94 int pp_color; // color for popup sender 95 extern const int Is_DRAWMAIN_On; //show/hide main msg 96 int main_d; // refresher for main msg 97 extern const unsigned int MSG_Y; // cordinates for main msg 98 extern const unsigned int MSG_X; // cordinates for main msg 99 int paused_height; // vertical height of font 100 int in_count; // count incoming messages 101 int out_count; // count outgoing messages 102 #ifdef ELKA 103 char last_msg_buffer[3072]; // last message buffer 104 #endif 105 int comanda; //for check comand to add it to log 106 int msg_away_timer; // time for autostatus 107 extern const unsigned int AUTO_ENGADE; //time to start autostatus 108 int change_back_status; //to do changeback or not 109 int status_rem; //remember your status before change 110 char away_msg_time[64]; //away time char 111 char away_msg[256]; // away txt 112 int away_m; //use to check if auto time engaged 113 extern const int Auto_Status; //use autostatus or not to use 114 extern const char away_msg1[24]; //for hello msg in autostatus 115 extern const char away_msg2[64]; //for automsg txt 116 extern const int time_zone; //for time zone initialization 117 char tim_zone[24]; //timezone txt \ In segment DATA_Z, align 4, align-sorted 118 int In_EXT_On; //to initialize extended sounds \ In_EXT_On: \ 00000000 DS8 4 119 char ext_sound[128]; //path to play or init ext sound 120 extern const char sndMsg2[64]; //path to extended sounds 121 int total_count; //counter for extender sound info display 122 int in_ext; //counter for extender sound info display 123 char LG_MENU2[32]; //moved menu name here for my needs 124 extern const unsigned int main_draw_l; // lenght of txt to draw on main 125 extern const int TIME_OR_MSG; // for check what to draw with main header 126 int icon_change; //for icon change on ms 127 int icon_change2; //for icon change on ms 128 extern int *XStatusesIconArray; // strange need but ok 129 char mod_info[]="2nd generation mod based on revision 1848! mod date: 19.02.08 14:02!"; //just info for mod info 130 //=========================end 131 #endif 132 133 #ifdef EVILFOX 134 //=========================modification functions 135 #ifdef ELKA 136 void SLI_Off(void); \ In segment CODE, align 4, keep-with-next 137 void SLI_On() 138 { \ SLI_On: \ 00000000 10402DE9 PUSH {R4,LR} 139 if (total_unread) \ 00000004 ........ LDR R4,??DataTable29 ;; S_ICONS \ 00000008 8C0094E5 LDR R0,[R4, #+140] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0600000A BEQ ??SLI_On_0 140 { 141 SLI_SetState(1); \ 00000014 0100A0E3 MOV R0,#+1 \ 00000018 360000EF SWI +54 142 GBS_StartTimerProc(&mytmr, 21, SLI_Off); \ 0000001C 14209FE5 LDR R2,??SLI_On_1 ;; SLI_Off \ 00000020 1510A0E3 MOV R1,#+21 \ 00000024 D00F84E2 ADD R0,R4,#+832 \ 00000028 4D0000EF SWI +77 \ 0000002C 1080BDE8 POP {R4,PC} 143 } 144 else 145 SLI_SetState(0); \ ??SLI_On_0: \ 00000030 360000EF SWI +54 146 } \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??SLI_On_1: \ 00000038 ........ DC32 SLI_Off 147 \ In segment CODE, align 4, keep-with-next 148 void SLI_Off() 149 { \ SLI_Off: \ 00000000 00402DE9 PUSH {LR} 150 SLI_SetState(2); \ 00000004 0200A0E3 MOV R0,#+2 \ 00000008 360000EF SWI +54 151 if (total_unread) \ 0000000C ........ LDR R0,??DataTable29 ;; S_ICONS \ 00000010 8C1090E5 LDR R1,[R0, #+140] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0400000A BEQ ??SLI_Off_0 152 GBS_StartTimerProc(&mytmr, 21, SLI_On); //26*SLI_time2 \ 0000001C ........ LDR R2,??DataTable4 ;; SLI_On \ 00000020 1510A0E3 MOV R1,#+21 \ 00000024 D00F80E2 ADD R0,R0,#+832 \ 00000028 4D0000EF SWI +77 \ 0000002C 0080BDE8 POP {PC} 153 else 154 SLI_SetState(0); \ ??SLI_Off_0: \ 00000030 0000A0E3 MOV R0,#+0 \ 00000034 360000EF SWI +54 155 } \ 00000038 0080BDE8 POP {PC} ;; return 156 \ In segment CODE, align 4, keep-with-next 157 void SLI_Timer() 158 { 159 if(Is_SLI_On) \ SLI_Timer: \ 00000000 ........ LDR R0,??DataTable29 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 9C1090E5 LDR R1,[R0, #+156] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 160 GBS_StartTimerProc(&mytmr, 262, SLI_On); //262*SLI_time \ 00000014 ........ LDR R2,??DataTable4 ;; SLI_On \ 00000018 0610A0E3 MOV R1,#+6 \ 0000001C 401F81E3 ORR R1,R1,#0x100 \ 00000020 D00F80E2 ADD R0,R0,#+832 \ 00000024 4D0000EF SWI +77 161 } \ 00000028 0080BDE8 POP {PC} ;; return 162 #endif 163 //===============time count========= \ In segment CODE, align 4, keep-with-next 164 void time_count() 165 { 166 seconds++; \ time_count: \ 00000000 ........ LDR R0,??DataTable29 ;; S_ICONS \ 00000004 A41090E5 LDR R1,[R0, #+164] 167 if(seconds==60) \ 00000008 A82090E5 LDR R2,[R0, #+168] \ 0000000C 011081E2 ADD R1,R1,#+1 \ 00000010 3C0051E3 CMP R1,#+60 168 { 169 seconds=0; \ 00000014 0010A003 MOVEQ R1,#+0 170 minutes++; \ 00000018 01208202 ADDEQ R2,R2,#+1 \ 0000001C A41080E5 STR R1,[R0, #+164] 171 } 172 if(minutes==60) \ 00000020 3C0052E3 CMP R2,#+60 \ 00000024 0300001A BNE ??time_count_0 173 { 174 minutes=0; 175 hours++; \ 00000028 AC1090E5 LDR R1,[R0, #+172] \ 0000002C 0020A0E3 MOV R2,#+0 \ 00000030 011081E2 ADD R1,R1,#+1 \ 00000034 AC1080E5 STR R1,[R0, #+172] \ ??time_count_0: \ 00000038 A82080E5 STR R2,[R0, #+168] 176 } 177 } \ 0000003C 1EFF2FE1 BX LR ;; return 178 \ In segment CODE, align 4, keep-with-next 179 void time_counter() 180 { \ time_counter: \ 00000000 70402DE9 PUSH {R4-R6,LR} 181 if(connect_state==3) \ 00000004 4C509FE5 LDR R5,??time_counter_0 ;; time_counter \ 00000008 ........ LDR R6,??DataTable29 ;; S_ICONS \ 0000000C D44FA0E3 MOV R4,#+848 \ 00000010 540196E5 LDR R0,[R6, #+340] \ 00000014 030050E3 CMP R0,#+3 \ 00000018 0100001A BNE ??time_counter_1 182 { 183 time_count(); \ 0000001C ........ BL time_count 184 GBS_StartTimerProc(&ctmr, 216, time_counter); \ 00000020 050000EA B ??time_counter_2 185 } 186 else 187 { 188 if(!Pause_Time) \ ??time_counter_1: \ 00000024 30009FE5 LDR R0,??time_counter_0+0x4 ;; Pause_Time \ 00000028 000090E5 LDR R0,[R0, #+0] \ 0000002C 000050E3 CMP R0,#+0 189 { 190 seconds=0; \ 00000030 A4008605 STREQ R0,[R6, #+164] 191 minutes=0; \ 00000034 A8008605 STREQ R0,[R6, #+168] 192 hours=0; \ 00000038 AC008605 STREQ R0,[R6, #+172] 193 } 194 GBS_StartTimerProc(&ctmr, 216, time_counter); \ ??time_counter_2: \ 0000003C 0520A0E1 MOV R2,R5 \ 00000040 D810A0E3 MOV R1,#+216 \ 00000044 060084E0 ADD R0,R4,R6 \ 00000048 4D0000EF SWI +77 195 } 196 time_draw=1; \ 0000004C 0100A0E3 MOV R0,#+1 \ 00000050 B80086E5 STR R0,[R6, #+184] 197 } \ 00000054 7080BDE8 POP {R4-R6,PC} ;; return \ ??time_counter_0: \ 00000058 ........ DC32 time_counter \ 0000005C ........ DC32 Pause_Time 198 //=========================time count===== 199 //=========================mainscreen ping=============== 200 static void PingToServer2(void) 201 { 202 TPKT *p; 203 p=malloc(sizeof(PKT)+sizeof(TTime)); 204 GetDateTime(NULL,(TTime *)p->data); 205 p->pkt.uin=0; 206 p->pkt.type=T_ECHO; 207 p->pkt.data_len=sizeof(TTime); 208 SUBPROC((void *)SendAnswer,0,p); 209 } 210 //=========================mainscreen ping============== 211 212 //=========================popup sender========================= \ In segment CODE, align 4, keep-with-next 213 void show_pp_sender() 214 { \ show_pp_sender: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 215 if(INC_show>0) \ 00000004 ........ LDR R4,??DataTable29 ;; S_ICONS \ 00000008 C80094E5 LDR R0,[R4, #+200] \ 0000000C 010050E3 CMP R0,#+1 \ 00000010 F081BDB8 POPLT {R4-R8,PC} 216 { 217 WSHDR *ws=AllocWS(64); \ 00000014 4000A0E3 MOV R0,#+64 \ 00000018 250100EF SWI +293 \ 0000001C 0050A0E1 MOV R5,R0 218 ascii2ws(ws,show_nick); \ 00000020 E51F84E2 ADD R1,R4,#+916 \ 00000024 ........ _BLF ascii2ws,??ascii2ws??rA 219 DrawRectangle(0,0,Get_WS_width(ws,font)+2,GetFontYSIZE(font)+2,0,GetPaletteAdrByColorIndex(1),GetPaletteAdrByColorIndex(1)); \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 2E0100EF SWI +302 \ 00000030 0060A0E1 MOV R6,R0 \ 00000034 0100A0E3 MOV R0,#+1 \ 00000038 2E0100EF SWI +302 \ 0000003C 0070A0E1 MOV R7,R0 \ 00000040 D00094E5 LDR R0,[R4, #+208] \ 00000044 C50100EF SWI +453 \ 00000048 D01094E5 LDR R1,[R4, #+208] \ 0000004C 0080A0E1 MOV R8,R0 \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 080200EF SWI +520 \ 00000058 40002DE9 PUSH {R6} \ 0000005C 80002DE9 PUSH {R7} \ 00000060 0010A0E3 MOV R1,#+0 \ 00000064 02002DE9 PUSH {R1} \ 00000068 023088E2 ADD R3,R8,#+2 \ 0000006C 022080E2 ADD R2,R0,#+2 \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 B40100EF SWI +436 220 DrawString(ws,1,1,1+Get_WS_width(ws,font)+2,1+GetFontYSIZE(font),font,0,GetPaletteAdrByColorIndex(pp_color),GetPaletteAdrByColorIndex(23)); \ 00000078 1700A0E3 MOV R0,#+23 \ 0000007C 2E0100EF SWI +302 \ 00000080 0060A0E1 MOV R6,R0 \ 00000084 D40094E5 LDR R0,[R4, #+212] \ 00000088 2E0100EF SWI +302 \ 0000008C 0070A0E1 MOV R7,R0 \ 00000090 D00094E5 LDR R0,[R4, #+208] \ 00000094 C50100EF SWI +453 \ 00000098 D01094E5 LDR R1,[R4, #+208] \ 0000009C 0080A0E1 MOV R8,R0 \ 000000A0 0500A0E1 MOV R0,R5 \ 000000A4 080200EF SWI +520 \ 000000A8 40002DE9 PUSH {R6} \ 000000AC 80002DE9 PUSH {R7} \ 000000B0 0010A0E3 MOV R1,#+0 \ 000000B4 02002DE9 PUSH {R1} \ 000000B8 D01094E5 LDR R1,[R4, #+208] \ 000000BC 033080E2 ADD R3,R0,#+3 \ 000000C0 02002DE9 PUSH {R1} \ 000000C4 0120A0E3 MOV R2,#+1 \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 011088E2 ADD R1,R8,#+1 \ 000000D0 02002DE9 PUSH {R1} \ 000000D4 0210A0E1 MOV R1,R2 \ 000000D8 4C0100EF SWI +332 221 FreeWS(ws); \ 000000DC 0500A0E1 MOV R0,R5 \ 000000E0 290100EF SWI +297 222 INC_show--; \ 000000E4 C80094E5 LDR R0,[R4, #+200] 223 GBS_StartTimerProc(&incs, 5, show_pp_sender); \ 000000E8 18209FE5 LDR R2,??show_pp_sender_0 ;; show_pp_sender \ 000000EC 010040E2 SUB R0,R0,#+1 \ 000000F0 C80084E5 STR R0,[R4, #+200] \ 000000F4 0510A0E3 MOV R1,#+5 \ 000000F8 F50F84E2 ADD R0,R4,#+980 \ 000000FC 4D0000EF SWI +77 \ 00000100 20D08DE2 ADD SP,SP,#+32 224 } 225 } \ 00000104 F081BDE8 POP {R4-R8,PC} ;; return \ ??show_pp_sender_0: \ 00000108 ........ DC32 show_pp_sender 226 //==================================popup sender=============== 227 //===========================main msg add=================== 228 char a_txt[64]; 229 char s_txt[64]; 230 char d_txt[64]; 231 char f_txt[64]; 232 char g_txt[64]; 233 \ In segment CODE, align 4, keep-with-next 234 static AddToMain(const char *nameu,const char *si) 235 { \ AddToMain: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 80D04DE2 SUB SP,SP,#+128 \ 00000008 0040A0E1 MOV R4,R0 236 char de[64]; 237 char du[64]; 238 int text_l=0; 239 int iz=0; 240 int name_l=0; 241 name_l=strlen(nameu); 242 text_l=main_draw_l-name_l; 243 244 if(strlen(si)>text_l) \ 0000000C 30519FE5 LDR R5,??AddToMain_0+0x4 ;; `?` \ 00000010 0170A0E1 MOV R7,R1 \ 00000014 1B0000EF SWI +27 \ 00000018 28119FE5 LDR R1,??AddToMain_0+0x8 ;; main_draw_l \ 0000001C 0060A0E3 MOV R6,#+0 \ 00000020 001091E5 LDR R1,[R1, #+0] \ 00000024 008041E0 SUB R8,R1,R0 \ 00000028 0700A0E1 MOV R0,R7 \ 0000002C 1B0000EF SWI +27 \ 00000030 000058E1 CMP R8,R0 \ 00000034 0B00002A BCS ??AddToMain_1 245 { 246 strncpy(du,si,text_l); \ 00000038 0820A0E1 MOV R2,R8 \ 0000003C 0710A0E1 MOV R1,R7 \ 00000040 40008DE2 ADD R0,SP,#+64 \ 00000044 160100EF SWI +278 247 du[text_l]='\0'; \ 00000048 40008DE2 ADD R0,SP,#+64 \ 0000004C 0060C8E7 STRB R6,[R8, +R0] 248 sprintf(de,"%s%s",du,"..."); \ 00000050 3A3F8FE2 ADR R3,??AddToMain_0 ;; "..." \ 00000054 40208DE2 ADD R2,SP,#+64 \ 00000058 0510A0E1 MOV R1,R5 \ 0000005C 0D00A0E1 MOV R0,SP \ 00000060 160000EF SWI +22 \ 00000064 020000EA B ??AddToMain_2 249 } 250 else 251 strcpy(de, si); \ ??AddToMain_1: \ 00000068 0710A0E1 MOV R1,R7 \ 0000006C 0D00A0E1 MOV R0,SP \ 00000070 1A0000EF SWI +26 252 iz=0; \ ??AddToMain_2: \ 00000074 0070A0E3 MOV R7,#+0 \ 00000078 0D80A0E1 MOV R8,SP \ 0000007C 060000EA B ??AddToMain_3 253 while(strlen(de)!=iz) 254 { 255 if((de[iz]==0x0D)||(de[iz]==0x0A)) de[iz]=0x20; \ ??AddToMain_4: \ 00000080 0000D8E5 LDRB R0,[R8, #+0] 256 iz++; \ 00000084 017087E2 ADD R7,R7,#+1 \ 00000088 0D0050E3 CMP R0,#+13 \ 0000008C 0A005013 CMPNE R0,#+10 \ 00000090 2000A003 MOVEQ R0,#+32 \ 00000094 0000C805 STRBEQ R0,[R8, #+0] \ 00000098 018088E2 ADD R8,R8,#+1 257 } \ ??AddToMain_3: \ 0000009C 0D00A0E1 MOV R0,SP \ 000000A0 1B0000EF SWI +27 \ 000000A4 070050E1 CMP R0,R7 \ 000000A8 F4FFFF1A BNE ??AddToMain_4 258 de[iz]='\0'; \ 000000AC 0D00A0E1 MOV R0,SP \ 000000B0 0060C7E7 STRB R6,[R7, +R0] 259 strcpy(a_txt, s_txt); \ 000000B4 ........ LDR R6,??DataTable29 ;; S_ICONS \ 000000B8 6400A0E3 MOV R0,#+100 \ 000000BC 480D80E3 ORR R0,R0,#0x1200 \ 000000C0 067080E0 ADD R7,R0,R6 \ 000000C4 0710A0E1 MOV R1,R7 \ 000000C8 4000C0E3 BIC R0,R0,#0x40 \ 000000CC 060080E0 ADD R0,R0,R6 \ 000000D0 1A0000EF SWI +26 260 strcpy(s_txt, d_txt); \ 000000D4 A400A0E3 MOV R0,#+164 \ 000000D8 480D80E3 ORR R0,R0,#0x1200 \ 000000DC 068080E0 ADD R8,R0,R6 \ 000000E0 0810A0E1 MOV R1,R8 \ 000000E4 0700A0E1 MOV R0,R7 \ 000000E8 1A0000EF SWI +26 261 strcpy(d_txt, f_txt); \ 000000EC E400A0E3 MOV R0,#+228 \ 000000F0 480D80E3 ORR R0,R0,#0x1200 \ 000000F4 067080E0 ADD R7,R0,R6 \ 000000F8 0710A0E1 MOV R1,R7 \ 000000FC 0800A0E1 MOV R0,R8 \ 00000100 1A0000EF SWI +26 262 strcpy(f_txt, g_txt); \ 00000104 2400A0E3 MOV R0,#+36 \ 00000108 4C0D80E3 ORR R0,R0,#0x1300 \ 0000010C 068080E0 ADD R8,R0,R6 \ 00000110 0810A0E1 MOV R1,R8 \ 00000114 0700A0E1 MOV R0,R7 \ 00000118 1A0000EF SWI +26 263 sprintf(g_txt, "%s: %s", nameu,de); \ 0000011C 0D30A0E1 MOV R3,SP \ 00000120 0420A0E1 MOV R2,R4 \ 00000124 081085E2 ADD R1,R5,#+8 \ 00000128 0800A0E1 MOV R0,R8 \ 0000012C 160000EF SWI +22 264 main_d=1; \ 00000130 0100A0E3 MOV R0,#+1 \ 00000134 D80086E5 STR R0,[R6, #+216] 265 } \ 00000138 80D08DE2 ADD SP,SP,#+128 \ 0000013C F081BDE8 POP {R4-R8,PC} ;; return \ ??AddToMain_0: \ 00000140 2E2E2E00 DC8 "..." \ 00000144 ........ DC32 `?` \ 00000148 ........ DC32 main_draw_l 266 //=================================main msg add============ 267 //==================================autostatus============= \ In segment CODE, align 4, keep-with-next 268 void away_engage() 269 { \ away_engage: \ 00000000 30402DE9 PUSH {R4,R5,LR} 270 TTime tt; 271 GetDateTime(NULL,&tt); 272 sprintf(away_msg_time, "(away since %02d : %02d ( %s ) )", tt.hour, tt.min, tim_zone); \ 00000004 ........ LDR R4,??DataTable29 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 0D10A0E1 MOV R1,SP \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 B40000EF SWI +180 \ 00000018 54109FE5 LDR R1,??away_engage_0 ;; `?` \ 0000001C 2400A0E3 MOV R0,#+36 \ 00000020 440D80E3 ORR R0,R0,#0x1100 \ 00000024 040080E0 ADD R0,R0,R4 \ 00000028 01002DE9 PUSH {R0} \ 0000002C 0530DDE5 LDRB R3,[SP, #+5] \ 00000030 0420DDE5 LDRB R2,[SP, #+4] 273 away_m=1; \ 00000034 0150A0E3 MOV R5,#+1 \ 00000038 E400A0E3 MOV R0,#+228 \ 0000003C F00E80E3 ORR R0,R0,#0xF00 \ 00000040 040080E0 ADD R0,R0,R4 \ 00000044 160000EF SWI +22 274 if(CurrentStatus!=2) \ 00000048 380194E5 LDR R0,[R4, #+312] \ 0000004C F85084E5 STR R5,[R4, #+248] \ 00000050 020050E3 CMP R0,#+2 \ 00000054 04D08DE2 ADD SP,SP,#+4 \ 00000058 3380BD08 POPEQ {R0,R1,R4,R5,PC} 275 { 276 status_rem=CurrentStatus; \ 0000005C F40084E5 STR R0,[R4, #+244] 277 CurrentStatus=2; \ 00000060 0200A0E3 MOV R0,#+2 \ 00000064 380184E5 STR R0,[R4, #+312] 278 set_my_status(); \ 00000068 ........ BL set_my_status 279 change_back_status=1; \ 0000006C F05084E5 STR R5,[R4, #+240] 280 } 281 } \ 00000070 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??away_engage_0: \ 00000074 ........ DC32 `?` 282 \ In segment CODE, align 4, keep-with-next 283 int my_keyhook(int key, int m) 284 { \ my_keyhook: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 285 if (m==KEY_DOWN) \ 00000008 9300A0E3 MOV R0,#+147 \ 0000000C 400F80E3 ORR R0,R0,#0x100 \ 00000010 000051E1 CMP R1,R0 \ 00000014 1500001A BNE ??my_keyhook_0 286 { 287 if(change_back_status==1) \ 00000018 ........ LDR R6,??DataTable29 ;; S_ICONS \ 0000001C 0050A0E3 MOV R5,#+0 \ 00000020 F00096E5 LDR R0,[R6, #+240] \ 00000024 010050E3 CMP R0,#+1 \ 00000028 0300001A BNE ??my_keyhook_1 288 { 289 CurrentStatus=status_rem; \ 0000002C F40096E5 LDR R0,[R6, #+244] \ 00000030 380186E5 STR R0,[R6, #+312] 290 set_my_status(); \ 00000034 ........ BL set_my_status 291 change_back_status=0; \ 00000038 F05086E5 STR R5,[R6, #+240] 292 } 293 #ifdef ELKA 294 if ((key==VOL_DOWN_BUTTON)&&(IsIdleUiOnTop())) \ ??my_keyhook_1: \ 0000003C 0E0054E3 CMP R4,#+14 \ 00000040 0800001A BNE ??my_keyhook_2 \ 00000044 C50000EF SWI +197 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0500000A BEQ ??my_keyhook_2 295 { 296 msg_away_timer=AUTO_ENGADE; \ 00000050 ........ LDR R0,??DataTable11 ;; AUTO_ENGADE \ 00000054 000090E5 LDR R0,[R0, #+0] \ 00000058 EC0086E5 STR R0,[R6, #+236] 297 away_engage(); \ 0000005C ........ BL away_engage \ 00000060 0000A0E3 MOV R0,#+0 \ 00000064 7080BDE8 POP {R4-R6,PC} 298 } 299 else 300 #endif 301 msg_away_timer=away_m=0; \ ??my_keyhook_2: \ 00000068 F85086E5 STR R5,[R6, #+248] \ 0000006C EC5086E5 STR R5,[R6, #+236] 302 } 303 return 0; \ ??my_keyhook_0: \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 304 } 305 \ In segment CODE, align 4, keep-with-next 306 void init_time_zone() 307 { 308 switch(time_zone) \ init_time_zone: \ 00000000 50219FE5 LDR R2,??init_time_zone_1 ;; time_zone \ 00000004 50019FE5 LDR R0,??init_time_zone_1+0x4 ;; S_ICONS + 4388 \ 00000008 50119FE5 LDR R1,??init_time_zone_1+0x8 ;; `?` \ 0000000C 00402DE9 PUSH {LR} \ 00000010 002092E5 LDR R2,[R2, #+0] \ 00000014 200052E3 CMP R2,#+32 \ 00000018 0080BD88 POPHI {PC} \ 0000001C 013F8FE2 ADR R3,??init_time_zone_0 \ 00000020 0230D3E7 LDRB R3,[R3, R2] \ 00000024 03F18FE0 ADD PC,PC,R3, LSL #+2 \ ??init_time_zone_0: \ 00000028 0C080B0E DC8 +12,+8,+11,+14 \ 0000002C 10121416 DC8 +16,+18,+20,+22 \ 00000030 181A1C1E DC8 +24,+26,+28,+30 \ 00000034 20222426 DC8 +32,+34,+36,+38 \ 00000038 282A2C2E DC8 +40,+42,+44,+46 \ 0000003C 30323436 DC8 +48,+50,+52,+54 \ 00000040 383A3C3E DC8 +56,+58,+60,+62 \ 00000044 40424446 DC8 +64,+66,+68,+70 \ 00000048 48000000 DC8 +72,+0,+0,+0 309 { 310 case 0: 311 sprintf(tim_zone, "GMT -12:00"); 312 break; 313 case 1: 314 sprintf(tim_zone, "GMT -11:00"); \ ??init_time_zone_2: \ 0000004C 0C1081E2 ADD R1,R1,#+12 \ 00000050 160000EF SWI +22 \ 00000054 0080BDE8 POP {PC} 315 break; 316 case 2: 317 sprintf(tim_zone, "GMT -10:00"); \ ??init_time_zone_3: \ 00000058 181081E2 ADD R1,R1,#+24 \ ??init_time_zone_4: \ 0000005C 160000EF SWI +22 \ 00000060 0080BDE8 POP {PC} 318 break; 319 case 3: 320 sprintf(tim_zone, "GMT -09:00"); \ ??init_time_zone_5: \ 00000064 601081E2 ADD R1,R1,#+96 \ 00000068 FBFFFFEA B ??init_time_zone_4 321 break; 322 case 4: 323 sprintf(tim_zone, "GMT -08:00"); \ ??init_time_zone_6: \ 0000006C 241081E2 ADD R1,R1,#+36 \ 00000070 F9FFFFEA B ??init_time_zone_4 324 break; 325 case 5: 326 sprintf(tim_zone, "GMT -07:00"); \ ??init_time_zone_7: \ 00000074 301081E2 ADD R1,R1,#+48 \ 00000078 F7FFFFEA B ??init_time_zone_4 327 break; 328 case 6: 329 sprintf(tim_zone, "GMT -06:00"); \ ??init_time_zone_8: \ 0000007C 3C1081E2 ADD R1,R1,#+60 \ 00000080 F5FFFFEA B ??init_time_zone_4 330 break; 331 case 7: 332 sprintf(tim_zone, "GMT -05:00"); \ ??init_time_zone_9: \ 00000084 481081E2 ADD R1,R1,#+72 \ 00000088 F3FFFFEA B ??init_time_zone_4 333 break; 334 case 8: 335 sprintf(tim_zone, "GMT -04:00"); \ ??init_time_zone_10: \ 0000008C 541081E2 ADD R1,R1,#+84 \ 00000090 F1FFFFEA B ??init_time_zone_4 336 break; 337 case 9: 338 sprintf(tim_zone, "GMT -03:30"); \ ??init_time_zone_11: \ 00000094 6C1081E2 ADD R1,R1,#+108 \ 00000098 EFFFFFEA B ??init_time_zone_4 339 break; 340 case 10: 341 sprintf(tim_zone, "GMT -03:00"); \ ??init_time_zone_12: \ 0000009C 781081E2 ADD R1,R1,#+120 \ 000000A0 EDFFFFEA B ??init_time_zone_4 342 break; 343 case 11: 344 sprintf(tim_zone, "GMT -02:00"); \ ??init_time_zone_13: \ 000000A4 841081E2 ADD R1,R1,#+132 \ 000000A8 EBFFFFEA B ??init_time_zone_4 345 break; 346 case 12: 347 sprintf(tim_zone, "GMT -01:00"); \ ??init_time_zone_14: \ 000000AC 901081E2 ADD R1,R1,#+144 \ 000000B0 E9FFFFEA B ??init_time_zone_4 348 break; 349 case 13: 350 sprintf(tim_zone, "GMT 00:00"); \ ??init_time_zone_15: \ 000000B4 9C1081E2 ADD R1,R1,#+156 \ 000000B8 E7FFFFEA B ??init_time_zone_4 351 break; 352 case 14: 353 sprintf(tim_zone, "GMT +01:00"); \ ??init_time_zone_16: \ 000000BC A81081E2 ADD R1,R1,#+168 \ 000000C0 E5FFFFEA B ??init_time_zone_4 354 break; 355 case 15: 356 sprintf(tim_zone, "GMT +02:00"); \ ??init_time_zone_17: \ 000000C4 B41081E2 ADD R1,R1,#+180 \ 000000C8 E3FFFFEA B ??init_time_zone_4 357 break; 358 case 16: 359 sprintf(tim_zone, "GMT +03:00"); \ ??init_time_zone_18: \ 000000CC C01081E2 ADD R1,R1,#+192 \ 000000D0 E1FFFFEA B ??init_time_zone_4 360 break; 361 case 17: 362 sprintf(tim_zone, "GMT +03:30"); \ ??init_time_zone_19: \ 000000D4 CC1081E2 ADD R1,R1,#+204 \ 000000D8 DFFFFFEA B ??init_time_zone_4 363 break; 364 case 18: 365 sprintf(tim_zone, "GMT +04:00"); \ ??init_time_zone_20: \ 000000DC D81081E2 ADD R1,R1,#+216 \ 000000E0 DDFFFFEA B ??init_time_zone_4 366 break; 367 case 19: 368 sprintf(tim_zone, "GMT +04:30"); \ ??init_time_zone_21: \ 000000E4 E41081E2 ADD R1,R1,#+228 \ 000000E8 DBFFFFEA B ??init_time_zone_4 369 break; 370 case 20: 371 sprintf(tim_zone, "GMT +05:00"); \ ??init_time_zone_22: \ 000000EC F01081E2 ADD R1,R1,#+240 \ 000000F0 D9FFFFEA B ??init_time_zone_4 372 break; 373 case 21: 374 sprintf(tim_zone, "GMT +05:30"); \ ??init_time_zone_23: \ 000000F4 FC1081E2 ADD R1,R1,#+252 \ 000000F8 D7FFFFEA B ??init_time_zone_4 375 break; 376 case 22: 377 sprintf(tim_zone, "GMT +05:45"); \ ??init_time_zone_24: \ 000000FC 421F81E2 ADD R1,R1,#+264 \ 00000100 D5FFFFEA B ??init_time_zone_4 378 break; 379 case 23: 380 sprintf(tim_zone, "GMT +06:00"); \ ??init_time_zone_25: \ 00000104 451F81E2 ADD R1,R1,#+276 \ 00000108 D3FFFFEA B ??init_time_zone_4 381 break; 382 case 24: 383 sprintf(tim_zone, "GMT +06:30"); \ ??init_time_zone_26: \ 0000010C 481F81E2 ADD R1,R1,#+288 \ 00000110 D1FFFFEA B ??init_time_zone_4 384 break; 385 case 25: 386 sprintf(tim_zone, "GMT +07:00"); \ ??init_time_zone_27: \ 00000114 4B1F81E2 ADD R1,R1,#+300 \ 00000118 CFFFFFEA B ??init_time_zone_4 387 break; 388 case 26: 389 sprintf(tim_zone, "GMT +08:00"); \ ??init_time_zone_28: \ 0000011C 4E1F81E2 ADD R1,R1,#+312 \ 00000120 CDFFFFEA B ??init_time_zone_4 390 break; 391 case 27: 392 sprintf(tim_zone, "GMT +09:00"); \ ??init_time_zone_29: \ 00000124 511F81E2 ADD R1,R1,#+324 \ 00000128 CBFFFFEA B ??init_time_zone_4 393 break; 394 case 28: 395 sprintf(tim_zone, "GMT +09:30"); \ ??init_time_zone_30: \ 0000012C 541F81E2 ADD R1,R1,#+336 \ 00000130 C9FFFFEA B ??init_time_zone_4 396 break; 397 case 29: 398 sprintf(tim_zone, "GMT +10:00"); \ ??init_time_zone_31: \ 00000134 571F81E2 ADD R1,R1,#+348 \ 00000138 C7FFFFEA B ??init_time_zone_4 399 break; 400 case 30: 401 sprintf(tim_zone, "GMT +11:00"); \ ??init_time_zone_32: \ 0000013C 5A1F81E2 ADD R1,R1,#+360 \ 00000140 C5FFFFEA B ??init_time_zone_4 402 break; 403 case 31: 404 sprintf(tim_zone, "GMT +12:00"); \ ??init_time_zone_33: \ 00000144 5D1F81E2 ADD R1,R1,#+372 \ 00000148 C3FFFFEA B ??init_time_zone_4 405 break; 406 case 32: 407 sprintf(tim_zone, "GMT +13:00"); \ ??init_time_zone_34: \ 0000014C 601F81E2 ADD R1,R1,#+384 \ 00000150 160000EF SWI +22 408 break; 409 } 410 } \ ??init_time_zone_35: \ 00000154 0080BDE8 POP {PC} ;; return \ ??init_time_zone_1: \ 00000158 ........ DC32 time_zone \ 0000015C ........ DC32 S_ICONS + 4388 \ 00000160 ........ DC32 `?` 411 //==================================autostatus============= 412 //============================init extended sounds============= \ In segment CODE, align 4, keep-with-next 413 void Init_Ext_Sounds(void) 414 { \ Init_Ext_Sounds: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 415 total_count=0; \ 00000004 ........ LDR R4,??DataTable29 ;; S_ICONS 416 in_ext=0; 417 // unsigned int uli; 418 char msgboxer[64]; 419 CLIST *t; 420 t=(CLIST *)(&cltop); \ 00000008 ........ LDR R7,??DataTable13 ;; `?` \ 0000000C 48D04DE2 SUB SP,SP,#+72 \ 00000010 0050A0E3 MOV R5,#+0 \ 00000014 FC5084E5 STR R5,[R4, #+252] \ 00000018 005184E5 STR R5,[R4, #+256] \ 0000001C 906084E2 ADD R6,R4,#+144 \ 00000020 070000EA B ??Init_Ext_Sounds_0 421 while(t=(CLIST *)(t->next)) 422 { 423 if(!t->isgroup) 424 { 425 total_count++; 426 volatile int hFile_ex; 427 unsigned int io_error_ex = 0; 428 sprintf(ext_sound, "%s%d.wav", sndMsg2, t->uin); 429 hFile_ex = fopen(ext_sound,A_ReadOnly + A_BIN,P_READ, &io_error_ex); 430 if(hFile_ex!=-1) 431 { 432 in_ext++; \ ??Init_Ext_Sounds_1: \ 00000024 000194E5 LDR R0,[R4, #+256] 433 t->ext_snd=1; 434 fclose(hFile_ex, &io_error_ex); \ 00000028 04108DE2 ADD R1,SP,#+4 \ 0000002C 010080E2 ADD R0,R0,#+1 \ 00000030 000184E5 STR R0,[R4, #+256] \ 00000034 0100A0E3 MOV R0,#+1 \ 00000038 600086E5 STR R0,[R6, #+96] \ 0000003C 00009DE5 LDR R0,[SP, #+0] \ 00000040 0D0000EF SWI +13 435 } \ ??Init_Ext_Sounds_0: \ 00000044 006096E5 LDR R6,[R6, #+0] \ 00000048 000056E3 CMP R6,#+0 \ 0000004C 1900000A BEQ ??Init_Ext_Sounds_2 \ 00000050 080096E5 LDR R0,[R6, #+8] \ 00000054 000050E3 CMP R0,#+0 \ 00000058 F9FFFF1A BNE ??Init_Ext_Sounds_0 \ 0000005C FC0094E5 LDR R0,[R4, #+252] \ 00000060 ........ LDR R2,??DataTable14 ;; sndMsg2 \ 00000064 010080E2 ADD R0,R0,#+1 \ 00000068 FC0084E5 STR R0,[R4, #+252] \ 0000006C 04508DE5 STR R5,[SP, #+4] \ 00000070 0C3096E5 LDR R3,[R6, #+12] \ 00000074 3C00A0E3 MOV R0,#+60 \ 00000078 440D80E3 ORR R0,R0,#0x1100 \ 0000007C 048080E0 ADD R8,R0,R4 \ 00000080 181087E2 ADD R1,R7,#+24 \ 00000084 0800A0E1 MOV R0,R8 \ 00000088 160000EF SWI +22 \ 0000008C 04308DE2 ADD R3,SP,#+4 \ 00000090 8020A0E3 MOV R2,#+128 \ 00000094 801CA0E3 MOV R1,#+32768 \ 00000098 0800A0E1 MOV R0,R8 \ 0000009C 0A0000EF SWI +10 \ 000000A0 00008DE5 STR R0,[SP, #+0] \ 000000A4 00009DE5 LDR R0,[SP, #+0] \ 000000A8 010070E3 CMN R0,#+1 \ 000000AC DCFFFF1A BNE ??Init_Ext_Sounds_1 436 else 437 t->ext_snd=0; \ 000000B0 605086E5 STR R5,[R6, #+96] \ 000000B4 E2FFFFEA B ??Init_Ext_Sounds_0 438 } 439 } 440 sprintf(msgboxer, "Complete!\n" 441 "Enabled for:\n" 442 "%d / %d contacts", 443 in_ext, total_count); \ ??Init_Ext_Sounds_2: \ 000000B8 FC3094E5 LDR R3,[R4, #+252] \ 000000BC 002194E5 LDR R2,[R4, #+256] \ 000000C0 241087E2 ADD R1,R7,#+36 \ 000000C4 08008DE2 ADD R0,SP,#+8 \ 000000C8 160000EF SWI +22 444 sprintf(LG_MENU2, "Меню ", in_ext, total_count); \ 000000CC FC3094E5 LDR R3,[R4, #+252] \ 000000D0 002194E5 LDR R2,[R4, #+256] \ 000000D4 4C1087E2 ADD R1,R7,#+76 \ 000000D8 BC00A0E3 MOV R0,#+188 \ 000000DC 440D80E3 ORR R0,R0,#0x1100 \ 000000E0 040080E0 ADD R0,R0,R4 \ 000000E4 160000EF SWI +22 445 ShowMSG(1,(int)msgboxer); \ 000000E8 08108DE2 ADD R1,SP,#+8 \ 000000EC 0100A0E3 MOV R0,#+1 \ 000000F0 480100EF SWI +328 446 } \ 000000F4 48D08DE2 ADD SP,SP,#+72 \ 000000F8 F081BDE8 POP {R4-R8,PC} ;; return 447 //============================init extended sounds============= 448 //=========================end of modification functions 449 #endif 450 451 char hostname[128]; 452 extern volatile int total_smiles; 453 extern volatile int total_xstatuses; 454 extern volatile int xstatuses_load; 455 456 #define USE_MLMENU 457 458 #define TMR_SECOND 216 459 460 //IPC 461 const char ipc_my_name[32]=IPC_NATICQ_NAME; 462 const char ipc_xtask_name[]=IPC_XTASK_NAME; 463 IPC_REQ gipc; 464 465 466 char elf_path[256]; 467 int maincsm_id; 468 int maingui_id; 469 \ In segment CODE, align 4, keep-with-next 470 void SMART_REDRAW(void) 471 { \ SMART_REDRAW: \ 00000000 10402DE9 PUSH {R4,LR} 472 int f; 473 LockSched(); \ 00000004 460100EF SWI +326 474 f=IsGuiOnTop(maingui_id); \ 00000008 1C009FE5 LDR R0,??SMART_REDRAW_0 ;; S_ICONS + 272 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 350100EF SWI +309 \ 00000014 0040A0E1 MOV R4,R0 475 UnlockSched(); \ 00000018 470100EF SWI +327 476 if (f) REDRAW(); \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} \ 00000024 720100EF SWI +370 477 } \ 00000028 1080BDE8 POP {R4,PC} ;; return \ ??SMART_REDRAW_0: \ 0000002C ........ DC32 S_ICONS + 272 478 479 //По 10 секунд 480 #ifdef EVILFOX 481 #define ACTIVE_TIME 30 482 #else 483 #define ACTIVE_TIME 360 484 #endif 485 486 //Максимальное количество сообщений в логе 487 #define MAXLOGMSG (20) 488 489 // Строковые описания статусов 490 491 const char S_OFFLINE[]="Offline"; 492 const char S_INVISIBLE[]="Invisible"; 493 const char S_AWAY[]="Away"; 494 const char S_NA[]="N/A"; 495 const char S_OCCUPIED[]="Occupied"; 496 const char S_DND[]="DND"; 497 const char S_ONLINE[]="Online"; 498 const char S_FFC[]="FFC"; 499 500 volatile int SENDMSGCOUNT; 501 502 int IsActiveUp=0; 503 504 int Is_Vibra_Enabled; 505 unsigned int Is_Sounds_Enabled; 506 int Is_Show_Offline; 507 int Is_Show_Groups; 508 509 int S_ICONS[TOTAL_ICONS+1]; 510 511 512 513 WSHDR *ews; 514 515 extern const unsigned int UIN; 516 extern const char PASS[]; 517 518 static const char * const icons_names[TOTAL_ICONS]= 519 { 520 "offline.png", 521 "invisible.png", 522 "away.png", 523 "na.png", 524 "occupied.png", 525 "dnd.png", 526 "depression.png", 527 "evil.png", 528 "home.png", 529 "lunch.png", 530 "work.png", 531 "online.png", 532 "ffc.png", 533 "message.png", 534 "unknown.png", 535 "groupon.png", 536 "groupoff.png", 537 "null.png", 538 "addcont.png", 539 "head.png", 540 "logo.png", 541 "ping.png", 542 "settings.png", 543 "vis1.png", 544 "vis2.png", 545 "vis3.png", 546 "vis4.png", 547 "vis5.png" 548 }; 549 550 extern const char ICON_PATH[]; 551 \ In segment CODE, align 4, keep-with-next 552 void setup_ICONS(void) 553 { \ setup_ICONS: \ 00000000 70402DE9 PUSH {R4-R6,LR} 554 int i=0; \ 00000004 ........ LDR R4,??DataTable16 ;; S_ICONS \ 00000008 34509FE5 LDR R5,??setup_ICONS_0 ;; icons_names \ 0000000C 1C60A0E3 MOV R6,#+28 555 do 556 { 557 if (!S_ICONS[i]) S_ICONS[i]=(int)MakeGlobalString(ICON_PATH,'\\',icons_names[i]); \ ??setup_ICONS_1: \ 00000010 000094E5 LDR R0,[R4, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0400001A BNE ??setup_ICONS_2 \ 0000001C 24009FE5 LDR R0,??setup_ICONS_0+0x4 ;; ICON_PATH \ 00000020 002095E5 LDR R2,[R5, #+0] \ 00000024 5C10A0E3 MOV R1,#+92 \ 00000028 ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 0000002C 000084E5 STR R0,[R4, #+0] 558 i++; 559 } 560 while(i>2,stop_vibra); \ 0000004C 3610A0E3 MOV R1,#+54 \ 00000050 000000EA B ??start_vibra_2 791 else 792 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra); \ ??start_vibra_1: \ 00000054 6C10A0E3 MOV R1,#+108 \ ??start_vibra_2: \ 00000058 4D0000EF SWI +77 793 } 794 } \ 0000005C 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra_0: \ 00000060 ........ DC32 vibraPower \ 00000064 ........ DC32 stop_vibra 795 \ In segment CODE, align 4, keep-with-next 796 void stop_vibra(void) 797 { \ stop_vibra: \ 00000000 00402DE9 PUSH {LR} 798 extern const int VIBR_TYPE; 799 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 800 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable29 ;; S_ICONS \ 00000010 441190E5 LDR R1,[R0, #+324] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 441180E5 STR R1,[R0, #+324] \ 0000001C 0080BD08 POPEQ {PC} 801 { 802 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000024 F410A0E3 MOV R1,#+244 \ 00000028 501D81E3 ORR R1,R1,#0x1400 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable26 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra_1 803 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra_2 804 else 805 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra); \ ??stop_vibra_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra_2: \ 0000004C 4D0000EF SWI +77 806 } 807 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra_0: \ 00000054 ........ DC32 start_vibra 808 \ In segment CODE, align 4, keep-with-next 809 void ChangeVibra(void) 810 { 811 if (!(Is_Vibra_Enabled=!(Is_Vibra_Enabled))) \ ChangeVibra: \ 00000000 ........ LDR R0,??DataTable29 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 281190E5 LDR R1,[R0, #+296] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 1C109FE5 LDR R1,??ChangeVibra_0 ;; `?` \ 00000008 4BDF4DE2 SUB SP,SP,#+300 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ BL FreeTemplates \ 00000014 70119FE5 LDR R1,??LoadTemplates_0+0x4 ;; TEMPLATES_PATH \ 00000018 2C008DE2 ADD R0,SP,#+44 \ 0000001C 1A0000EF SWI +26 \ 00000020 2C008DE2 ADD R0,SP,#+44 \ 00000024 1B0000EF SWI +27 \ 00000028 0070A0E1 MOV R7,R0 \ 0000002C 2C008DE2 ADD R0,SP,#+44 \ 00000030 005087E0 ADD R5,R7,R0 \ 00000034 0420A0E1 MOV R2,R4 \ 00000038 0610A0E1 MOV R1,R6 \ 0000003C 0500A0E1 MOV R0,R5 \ 00000040 160000EF SWI +22 855 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 856 if ((fsize=stat.size)<=0) goto L1; \ 00000060 08709DE5 LDR R7,[SP, #+8] \ 00000064 010057E3 CMP R7,#+1 \ 00000068 070000BA BLT ??LoadTemplates_1 857 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 858 { 859 L1: 860 strcpy(fn+i,"\\0.txt"); \ ??LoadTemplates_1: \ 0000008C 081086E2 ADD R1,R6,#+8 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 1A0000EF SWI +26 861 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 862 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 863 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 864 } 865 if (f==-1) return 0; \ ??LoadTemplates_2: \ 000000E0 040058E1 CMP R8,R4 \ 000000E4 F1FFFF0A BEQ ??LoadTemplates_4 866 p=templates_chars=malloc(fsize+1); \ 000000E8 ........ LDR R4,??DataTable37 ;; S_ICONS \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 480184E5 STR R0,[R4, #+328] \ 000000F8 0060A0E1 MOV R6,R0 867 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] 868 fclose(f,&ul); \ 00000118 0D10A0E1 MOV R1,SP \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 0D0000EF SWI +13 869 i=0; \ 00000124 0070A0E3 MOV R7,#+0 870 pp=p; \ 00000128 0680A0E1 MOV R8,R6 \ 0000012C 020000EA B ??LoadTemplates_6 871 for(;;) 872 { 873 c=*p; 874 if (c<32) 875 { 876 if (pp&&(pp!=p)) 877 { 878 templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 879 templates_lines[i++]=pp; 880 } 881 pp=NULL; 882 if (!c) break; 883 *p=0; 884 } 885 else 886 { 887 if (pp==NULL) pp=p; \ ??LoadTemplates_7: \ 00000130 000058E3 CMP R8,#+0 \ 00000134 0680A001 MOVEQ R8,R6 888 } 889 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 4C0194E5 LDR R0,[R4, #+332] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 4C0184E5 STR R0,[R4, #+332] \ 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 890 } 891 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 `?` \ 0000018C ........ DC32 TEMPLATES_PATH 892 } 893 894 895 //=================================================================== 896 897 typedef struct 898 { 899 CSM_RAM csm; 900 int gui_id; 901 }MAIN_CSM; 902 903 typedef struct 904 { 905 GUI gui; 906 WSHDR *ws1; 907 WSHDR *ws2; 908 int i1; 909 }MAIN_GUI; 910 911 912 913 int RXstate=EOP; //-sizeof(RXpkt)..-1 - receive header, 0..RXpkt.data_len - receive data 914 \ In segment DATA_Z, align 4, align-sorted 915 TPKT RXbuf; \ RXbuf: \ 00000000 DS8 16392 \ In segment DATA_Z, align 4, align-sorted 916 TPKT TXbuf; \ TXbuf: \ 00000000 DS8 16392 917 918 int connect_state=0; 919 920 int sock=-1; 921 922 volatile unsigned long TOTALRECEIVED; 923 volatile unsigned long TOTALSENDED; 924 volatile unsigned long ALLTOTALRECEIVED; //by BoBa 10.07 925 volatile unsigned long ALLTOTALSENDED; 926 927 volatile int sendq_l=0; //Длинна очереди для send 928 volatile void *sendq_p=NULL; //указатель очереди 929 930 volatile int is_gprs_online=1; 931 932 GBSTMR reconnect_tmr; 933 934 extern void kill_data(void *p,void (*func_p)(void *)); 935 \ In segment CODE, align 4, keep-with-next 936 void ElfKiller(void) 937 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 938 extern void *ELF_BEGIN; 939 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 940 } 941 942 943 944 //=============================================================================================== 945 #pragma inline 946 void patch_rect(RECT*rc,int x,int y, int x2, int y2) 947 { 948 rc->x=x; 949 rc->y=y; 950 rc->x2=x2; 951 rc->y2=y2; 952 } 953 954 #pragma inline 955 void patch_header(const HEADER_DESC* head) 956 { 957 ((HEADER_DESC*)head)->rc.x=0; 958 ((HEADER_DESC*)head)->rc.y=YDISP; 959 ((HEADER_DESC*)head)->rc.x2=ScreenW()-1; 960 ((HEADER_DESC*)head)->rc.y2=HeaderH()+YDISP-1; 961 } 962 #pragma inline 963 void patch_input(const INPUTDIA_DESC* inp) 964 { 965 ((INPUTDIA_DESC*)inp)->rc.x=0; 966 ((INPUTDIA_DESC*)inp)->rc.y=HeaderH()+1+YDISP; 967 ((INPUTDIA_DESC*)inp)->rc.x2=ScreenW()-1; 968 ((INPUTDIA_DESC*)inp)->rc.y2=ScreenH()-SoftkeyH()-1; 969 } 970 //=============================================================================================== 971 972 973 volatile unsigned int GROUP_CACHE; //Текущая группа для добавления 974 975 volatile int contactlist_menu_id; 976 977 GBSTMR tmr_active; 978 979 volatile int edchat_id; 980 981 //Применяется для добавления сообщений 982 //CLIST *edcontact; 983 //void *edgui_data; 984 985 static int prev_clmenu_itemcount; 986 987 char clm_hdr_text[48]; 988 static const char def_clm_hdr_text[] = LG_CLTITLE; 989 static const char key_clm_hdr_text[] = LG_CLT9INP; 990 991 static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+ICON_HEAD, (int)clm_hdr_text, LGP_NULL}; 992 static const int menusoftkeys[] = {0,1,2}; 993 static const SOFTKEY_DESC menu_sk[] = 994 { 995 {0x0018, 0x0000, (int)LG_SELECT}, 996 {0x0001, 0x0000, (int)LG_CLOSE}, 997 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 998 }; 999 1000 char clmenu_sk_r[16]; 1001 static const char def_clmenu_sk_r[] = LG_CLOSE; 1002 static const char key_clmenu_sk_r[] = LG_CLEAR; 1003 1004 static const SOFTKEY_DESC clmenu_sk[]= 1005 { 1006 {0x0018, 0x0000, (int)LG_OPTIONS}, 1007 {0x0001, 0x0000, (int)clmenu_sk_r}, 1008 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1009 }; 1010 1011 const SOFTKEYSTAB menu_skt = 1012 { 1013 menu_sk, 0 1014 }; 1015 1016 static const SOFTKEYSTAB clmenu_skt = 1017 { 1018 clmenu_sk, 0 1019 }; 1020 1021 void contactlist_menu_ghook(void *data, int cmd); 1022 int contactlist_menu_onkey(void *data, GUI_MSG *msg); 1023 void contactlist_menu_iconhndl(void *data, int curitem, void *unk); 1024 1025 #ifdef USE_MLMENU 1026 static const ML_MENU_DESC contactlist_menu= 1027 { 1028 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 1029 menusoftkeys, 1030 &clmenu_skt, 1031 0x11, //+0x400 1032 contactlist_menu_iconhndl, 1033 NULL, //Items 1034 NULL, //Procs 1035 0, //n 1036 1 //Добавочных строк 1037 }; 1038 #else 1039 static const MENU_DESC contactlist_menu= 1040 { 1041 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 1042 menusoftkeys, 1043 &clmenu_skt, 1044 0x11, //+0x400 1045 contactlist_menu_iconhndl, 1046 NULL, //Items 1047 NULL, //Procs 1048 0 //n 1049 }; 1050 #endif 1051 1052 //GBSTMR tmr_ping; 1053 int tenseconds_to_ping; 1054 \ In segment CODE, align 4, keep-with-next 1055 LOGQ *NewLOGQ(const char *s) 1056 { \ NewLOGQ: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1057 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 1058 zeromem(p,sizeof(LOGQ)); \ 00000018 6010A0E3 MOV R1,#+96 \ 0000001C 1D0100EF SWI +285 1059 strcpy(p->text,s); \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 600085E2 ADD R0,R5,#+96 \ 00000028 1A0000EF SWI +26 1060 return p; \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 3080BDE8 POP {R4,R5,PC} ;; return 1061 } 1062 \ In segment CODE, align 4, keep-with-next 1063 LOGQ *LastLOGQ(LOGQ **pp) 1064 { 1065 LOGQ *q=*pp; \ LastLOGQ: \ 00000000 000090E5 LDR R0,[R0, #+0] 1066 if (q) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 1EFF2F01 BXEQ LR \ 0000000C 000000EA B ??LastLOGQ_0 1067 { 1068 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 1069 } 1070 return(q); \ 00000020 1EFF2FE1 BX LR ;; return 1071 } 1072 1073 //Уничтожить лог \ In segment CODE, align 4, keep-with-next 1074 void FreeLOGQ(LOGQ **pp) 1075 { \ FreeLOGQ: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0010A0E1 MOV R1,R0 1076 LOGQ *p=*pp; \ 00000008 000091E5 LDR R0,[R1, #+0] 1077 *pp=NULL; //Сразу обрежем \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 002081E5 STR R2,[R1, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 1078 while(p) 1079 { 1080 LOGQ *np=p->next; \ ??FreeLOGQ_0: \ 0000001C 004090E5 LDR R4,[R0, #+0] 1081 mfree(p); \ 00000020 150000EF SWI +21 1082 p=np; \ 00000024 0400B0E1 MOVS R0,R4 1083 } \ 00000028 FBFFFF1A BNE ??FreeLOGQ_0 1084 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 1085 1086 //Удалить элемент из лога \ In segment CODE, align 4, keep-with-next 1087 void RemoveLOGQ(LOGQ **queue, LOGQ *p) 1088 { \ RemoveLOGQ: \ 00000000 00402DE9 PUSH {LR} 1089 LOGQ *q=(LOGQ *)queue; \ 00000004 000000EA B ??RemoveLOGQ_0 1090 LOGQ *qp; 1091 while(qp=q->next) 1092 { 1093 if (qp==p) 1094 { 1095 q->next=p->next; 1096 break; 1097 } 1098 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] 1099 } 1100 mfree(p); //Если элемент вообще не в логе \ ??RemoveLOGQ_2: \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 150000EF SWI +21 1101 } \ 00000030 0080BDE8 POP {PC} ;; return 1102 1103 //Добавить элемент в лог \ In segment CODE, align 4, keep-with-next 1104 int AddLOGQ(LOGQ **queue, LOGQ *p) 1105 { 1106 LOGQ *q=(LOGQ *)queue; 1107 LOGQ *qp; 1108 int i=0; \ AddLOGQ: \ 00000000 0020A0E3 MOV R2,#+0 \ 00000004 000000EA B ??AddLOGQ_0 1109 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 1110 p->next=NULL; \ 0000001C 003081E5 STR R3,[R1, #+0] 1111 q->next=p; \ 00000020 001080E5 STR R1,[R0, #+0] 1112 return(i+1); //Теперь всего в логе элементов \ 00000024 0200A0E1 MOV R0,R2 \ 00000028 1EFF2FE1 BX LR ;; return 1113 } 1114 1115 //Получаем последний полученный X-статус \ In segment CODE, align 4, keep-with-next 1116 char *GetLastXTextLOGQ(CLIST *t) 1117 { 1118 LOGQ *p = t->log; \ GetLastXTextLOGQ: \ 00000000 701090E5 LDR R1,[R0, #+112] 1119 char *s = 0; \ 00000004 0000A0E3 MOV R0,#+0 1120 if(!p) return 0; \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0500001A BNE ??GetLastXTextLOGQ_0 \ 00000010 1EFF2FE1 BX LR 1121 while(p->next) 1122 { 1123 if((p->type&0x0F)==3) \ ??GetLastXTextLOGQ_1: \ 00000014 0C3091E5 LDR R3,[R1, #+12] \ 00000018 0F3003E2 AND R3,R3,#0xF \ 0000001C 030053E3 CMP R3,#+3 1124 s = p->text; \ 00000020 60008102 ADDEQ R0,R1,#+96 1125 p = p->next; \ 00000024 0210A0E1 MOV R1,R2 1126 } \ ??GetLastXTextLOGQ_0: \ 00000028 002091E5 LDR R2,[R1, #+0] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 F7FFFF1A BNE ??GetLastXTextLOGQ_1 1127 if((p->type&0x0F)==3) \ 00000034 0C2091E5 LDR R2,[R1, #+12] \ 00000038 0F2002E2 AND R2,R2,#0xF \ 0000003C 030052E3 CMP R2,#+3 1128 s = p->text; \ 00000040 60008102 ADDEQ R0,R1,#+96 1129 return s; \ 00000044 1EFF2FE1 BX LR ;; return 1130 } 1131 \ In segment CODE, align 4, keep-with-next 1132 int GetIconIndex(CLIST *t) 1133 { 1134 unsigned short s; 1135 if (t) \ GetIconIndex: \ 00000000 000050E3 CMP R0,#+0 \ 00000004 3400000A BEQ ??GetIconIndex_0 1136 { 1137 s=t->state; 1138 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 1139 if (t->isunread) \ 0000001C 580090E5 LDR R0,[R0, #+88] \ 00000020 000050E3 CMP R0,#+0 1140 return(IS_MSG); \ 00000024 0D00A013 MOVNE R0,#+13 \ 00000028 1EFF2F11 BXNE LR 1141 else 1142 { 1143 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 1144 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 1145 if ((s&0xF000)==0x3000) return (IS_EVIL); \ 0000004C C00D52E3 CMP R2,#+12288 \ 00000050 0700A003 MOVEQ R0,#+7 \ 00000054 1EFF2F01 BXEQ LR 1146 if ((s&0xF000)==0x4000) return (IS_DEPRESSION); \ 00000058 400C52E3 CMP R2,#+16384 \ 0000005C 0600A003 MOVEQ R0,#+6 \ 00000060 1EFF2F01 BXEQ LR 1147 if ((s&0xF000)==0x5000) return (IS_HOME); \ 00000064 500C52E3 CMP R2,#+20480 \ 00000068 0800A003 MOVEQ R0,#+8 \ 0000006C 1EFF2F01 BXEQ LR 1148 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 1149 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 1150 if (s & 0x0001) return(IS_AWAY); \ ??GetIconIndex_1: \ 00000090 010011E3 TST R1,#0x1 \ 00000094 0200A013 MOVNE R0,#+2 \ 00000098 1EFF2F11 BXNE LR 1151 if (s & 0x0005) return(IS_NA); \ 0000009C 050011E3 TST R1,#0x5 \ 000000A0 0300A013 MOVNE R0,#+3 \ 000000A4 1EFF2F11 BXNE LR 1152 if (s & 0x0011) return(IS_OCCUPIED); \ 000000A8 110011E3 TST R1,#0x11 \ 000000AC 0400A013 MOVNE R0,#+4 \ 000000B0 1EFF2F11 BXNE LR 1153 if (s & 0x0013) return(IS_DND); \ 000000B4 130011E3 TST R1,#0x13 \ 000000B8 0500A013 MOVNE R0,#+5 \ 000000BC 1EFF2F11 BXNE LR 1154 if (s & 0x0002) return(IS_FFC); \ 000000C0 020011E3 TST R1,#0x2 \ 000000C4 EFFFFF1A BNE ??GetIconIndex_2 1155 if (s & 0x0100) return(IS_INVISIBLE); \ 000000C8 400F11E3 TST R1,#0x100 \ 000000CC 0100A013 MOVNE R0,#+1 \ 000000D0 1EFF2F11 BXNE LR 1156 } 1157 } 1158 else 1159 { 1160 return(IS_UNKNOWN); 1161 } 1162 return(IS_ONLINE); \ 000000D4 0B00A0E3 MOV R0,#+11 \ 000000D8 1EFF2FE1 BX LR \ ??GetIconIndex_0: \ 000000DC 0E00A0E3 MOV R0,#+14 \ 000000E0 1EFF2FE1 BX LR ;; return 1163 } 1164 \ In segment CODE, align 4, keep-with-next 1165 LOGQ *FindContactLOGQByAck(TPKT *p) 1166 { \ FindContactLOGQByAck: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1167 CLIST *t; 1168 LockSched(); \ 00000008 460100EF SWI +326 1169 t=FindContactByUin(p->pkt.uin); \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000014 0050A0E1 MOV R5,R0 1170 UnlockSched(); \ 00000018 470100EF SWI +327 1171 unsigned int id=*((unsigned short*)(p->data)); \ 0000001C B840D4E1 LDRH R4,[R4, #+8] 1172 LOGQ *q; 1173 if (!t) return NULL; \ 00000020 000055E3 CMP R5,#+0 \ 00000024 0000A003 MOVEQ R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 1174 LockSched(); \ 0000002C 460100EF SWI +326 1175 q=t->log; \ 00000030 705095E5 LDR R5,[R5, #+112] \ 00000034 000000EA B ??FindContactLOGQByAck_0 1176 while(q) 1177 { 1178 if (q->ID==id) break; 1179 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 1180 } 1181 UnlockSched(); \ 0000004C 470100EF SWI +327 1182 return q; \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return 1183 } 1184 1185 1186 char ContactT9Key[32]; 1187 \ In segment CODE, align 4, keep-with-next 1188 void UpdateCLheader(void) 1189 { \ UpdateCLheader: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 1190 if (strlen(ContactT9Key)) \ 00000004 ........ LDR R5,??DataTable37 ;; S_ICONS \ 00000008 04719FE5 LDR R7,??UpdateCLheader_0 ;; key_clmenu_sk_r \ 0000000C 08D04DE2 SUB SP,SP,#+8 \ 00000010 5400A0E3 MOV R0,#+84 \ 00000014 540D80E3 ORR R0,R0,#0x1500 \ 00000018 054080E0 ADD R4,R0,R5 \ 0000001C 300040E2 SUB R0,R0,#+48 \ 00000020 056080E0 ADD R6,R0,R5 \ 00000024 B88FA0E3 MOV R8,#+736 \ 00000028 050088E0 ADD R0,R8,R5 \ 0000002C 1B0000EF SWI +27 \ 00000030 000050E3 CMP R0,#+0 \ 00000034 0900000A BEQ ??UpdateCLheader_1 1191 { 1192 strcpy(clm_hdr_text,key_clm_hdr_text); \ 00000038 541087E2 ADD R1,R7,#+84 \ 0000003C 0600A0E1 MOV R0,R6 \ 00000040 1A0000EF SWI +26 1193 strcat(clm_hdr_text,ContactT9Key); \ 00000044 051088E0 ADD R1,R8,R5 \ 00000048 0600A0E1 MOV R0,R6 \ 0000004C 170000EF SWI +23 1194 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 00000050 0710A0E1 MOV R1,R7 \ 00000054 0400A0E1 MOV R0,R4 \ 00000058 1A0000EF SWI +26 \ 0000005C F381BDE8 POP {R0,R1,R4-R8,PC} 1195 } 1196 else 1197 { 1198 #ifdef EVILFOX 1199 if(TIME_OR_MSG) \ ??UpdateCLheader_1: \ 00000060 B0009FE5 LDR R0,??UpdateCLheader_0+0x4 ;; TIME_OR_MSG \ 00000064 000090E5 LDR R0,[R0, #+0] \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 1000000A BEQ ??UpdateCLheader_2 1200 { 1201 if(total_c_online>0) \ 00000070 981095E5 LDR R1,[R5, #+152] \ 00000074 8C3095E5 LDR R3,[R5, #+140] \ 00000078 940095E5 LDR R0,[R5, #+148] \ 0000007C 010051E3 CMP R1,#+1 \ 00000080 070000BA BLT ??UpdateCLheader_3 1202 sprintf(clm_hdr_text, "%s(%d/%d) On:%02d",def_clm_hdr_text,total_unread,total_unread2, total_c_online); \ 00000084 02002DE9 PUSH {R1} \ 00000088 01002DE9 PUSH {R0} \ 0000008C 4C2087E2 ADD R2,R7,#+76 \ 00000090 041087E2 ADD R1,R7,#+4 \ ??UpdateCLheader_4: \ 00000094 0600A0E1 MOV R0,R6 \ 00000098 160000EF SWI +22 \ 0000009C 08D08DE2 ADD SP,SP,#+8 \ 000000A0 170000EA B ??UpdateCLheader_5 1203 else 1204 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,total_unread,total_unread2); \ ??UpdateCLheader_3: \ 000000A4 01002DE9 PUSH {R0} \ 000000A8 4C2087E2 ADD R2,R7,#+76 \ 000000AC 181087E2 ADD R1,R7,#+24 \ 000000B0 100000EA B ??UpdateCLheader_6 1205 } 1206 else 1207 { 1208 TTime the; 1209 GetDateTime(NULL,&the); \ ??UpdateCLheader_2: \ 000000B4 0D10A0E1 MOV R1,SP \ 000000B8 B40000EF SWI +180 1210 if(total_c_online>0) \ 000000BC 980095E5 LDR R0,[R5, #+152] \ 000000C0 010050E3 CMP R0,#+1 \ 000000C4 060000BA BLT ??UpdateCLheader_7 1211 sprintf(clm_hdr_text, "%s(%02d:%02d) On:%02d",def_clm_hdr_text, the.hour, the.min, total_c_online); \ 000000C8 01002DE9 PUSH {R0} \ 000000CC 4C2087E2 ADD R2,R7,#+76 \ 000000D0 0500DDE5 LDRB R0,[SP, #+5] \ 000000D4 241087E2 ADD R1,R7,#+36 \ 000000D8 01002DE9 PUSH {R0} \ 000000DC 0830DDE5 LDRB R3,[SP, #+8] \ 000000E0 EBFFFFEA B ??UpdateCLheader_4 1212 else 1213 sprintf(clm_hdr_text, "%s(%02d:%02d)",def_clm_hdr_text,the.hour,the.min); \ ??UpdateCLheader_7: \ 000000E4 0100DDE5 LDRB R0,[SP, #+1] \ 000000E8 4C2087E2 ADD R2,R7,#+76 \ 000000EC 3C1087E2 ADD R1,R7,#+60 \ 000000F0 01002DE9 PUSH {R0} \ 000000F4 0430DDE5 LDRB R3,[SP, #+4] \ ??UpdateCLheader_6: \ 000000F8 0600A0E1 MOV R0,R6 \ 000000FC 160000EF SWI +22 \ 00000100 04D08DE2 ADD SP,SP,#+4 1214 } 1215 #else 1216 strcpy(clm_hdr_text,def_clm_hdr_text); 1217 #endif 1218 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ ??UpdateCLheader_5: \ 00000104 601087E2 ADD R1,R7,#+96 \ 00000108 0400A0E1 MOV R0,R4 \ 0000010C 1A0000EF SWI +26 1219 } 1220 } \ 00000110 F381BDE8 POP {R0,R1,R4-R8,PC} ;; return \ ??UpdateCLheader_0: \ 00000114 ........ DC32 key_clmenu_sk_r \ 00000118 ........ DC32 TIME_OR_MSG 1221 \ In segment CODE, align 4, keep-with-next 1222 void ClearContactT9Key(void) 1223 { 1224 zeromem(ContactT9Key,sizeof(ContactT9Key)); \ ClearContactT9Key: \ 00000000 0C009FE5 LDR R0,??ClearContactT9Key_0 ;; S_ICONS + 736 \ 00000004 00402DE9 PUSH {LR} \ 00000008 2010A0E3 MOV R1,#+32 \ 0000000C 1D0100EF SWI +285 1225 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??ClearContactT9Key_0: \ 00000014 ........ DC32 S_ICONS + 736 1226 \ In segment CODE, align 4, keep-with-next 1227 void AddContactT9Key(int chr) 1228 { \ AddContactT9Key: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1229 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R5,??DataTable37 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C B80F85E2 ADD R0,R5,#+736 \ 00000010 1B0000EF SWI +27 1230 if (l<(sizeof(ContactT9Key)-1)) \ 00000014 1F0050E3 CMP R0,#+31 1231 { 1232 ContactT9Key[l]=chr; \ 00000018 05008030 ADDCC R0,R0,R5 \ 0000001C E042C035 STRBCC R4,[R0, #+736] 1233 } 1234 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 1235 \ In segment CODE, align 4, keep-with-next 1236 void BackSpaceContactT9(void) 1237 { \ BackSpaceContactT9: \ 00000000 10402DE9 PUSH {R4,LR} 1238 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R4,??DataTable37 ;; S_ICONS \ 00000008 B80F84E2 ADD R0,R4,#+736 \ 0000000C 1B0000EF SWI +27 1239 if (l) \ 00000010 000050E3 CMP R0,#+0 1240 { 1241 l--; 1242 ContactT9Key[l]=0; \ 00000014 04008010 ADDNE R0,R0,R4 \ 00000018 0010A013 MOVNE R1,#+0 \ 0000001C DF12C015 STRBNE R1,[R0, #+735] 1243 } 1244 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 1245 \ In segment CODE, align 4, keep-with-next 1246 void create_contactlist_menu(void) 1247 { \ create_contactlist_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 1248 int i; 1249 i=CountContacts(); 1250 prev_clmenu_itemcount=i; \ 00000004 ........ LDR R5,??DataTable37 ;; S_ICONS 1251 UpdateCLheader(); 1252 patch_header(&contactlist_menuhdr); \ 00000008 58609FE5 LDR R6,??create_contactlist_menu_0 ;; contactlist_menuhdr \ 0000000C ........ _BLF CountContacts,??CountContacts??rA \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 844185E5 STR R4,[R5, #+388] \ 00000018 ........ BL UpdateCLheader \ 0000001C 0000A0E3 MOV R0,#+0 \ 00000020 B000C6E1 STRH R0,[R6, #+0] \ 00000024 1800A0E3 MOV R0,#+24 \ 00000028 B200C6E1 STRH R0,[R6, #+2] \ 0000002C 888100EF SWI +33160 \ 00000030 010040E2 SUB R0,R0,#+1 \ 00000034 B400C6E1 STRH R0,[R6, #+4] \ 00000038 8A8100EF SWI +33162 \ 0000003C 170080E2 ADD R0,R0,#+23 \ 00000040 B600C6E1 STRH R0,[R6, #+6] 1253 #ifdef USE_MLMENU 1254 contactlist_menu_id=CreateMultiLinesMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i); \ 00000044 10002DE9 PUSH {R4} \ 00000048 0000A0E3 MOV R0,#+0 \ 0000004C 01002DE9 PUSH {R0} \ 00000050 0630A0E1 MOV R3,R6 \ 00000054 142086E2 ADD R2,R6,#+20 \ 00000058 0010A0E3 MOV R1,#+0 \ 0000005C 170200EF SWI +535 \ 00000060 7C0185E5 STR R0,[R5, #+380] 1255 #else 1256 contactlist_menu_id=CreateMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i,0,0); 1257 #endif 1258 } \ 00000064 7380BDE8 POP {R0,R1,R4-R6,PC} ;; return \ ??create_contactlist_menu_0: \ 00000068 ........ DC32 contactlist_menuhdr 1259 \ In segment CODE, align 4, keep-with-next 1260 void contactlist_menu_ghook(void *data, int cmd) 1261 { \ contactlist_menu_ghook: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0140A0E1 MOV R4,R1 1262 PNGTOP_DESC *pltop=PNG_TOP(); \ 00000008 B98100EF SWI +33209 1263 if (cmd==9) \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 090054E3 CMP R4,#+9 1264 { 1265 pltop->dyn_pltop=NULL; \ 00000014 08108005 STREQ R1,[R0, #+8] \ 00000018 1080BD08 POPEQ {R4,PC} 1266 } 1267 if (cmd==0x0A) \ 0000001C 0A0054E3 CMP R4,#+10 \ 00000020 1080BD18 POPNE {R4,PC} 1268 { 1269 silenthide=0; \ 00000024 14209FE5 LDR R2,??contactlist_menu_ghook_0 ;; S_ICONS + 288 \ 00000028 001082E5 STR R1,[R2, #+0] 1270 pltop->dyn_pltop=XStatusesImgList; \ 0000002C ........ LDR R1,??DataTable35 ;; XStatusesImgList \ 00000030 001091E5 LDR R1,[R1, #+0] \ 00000034 081080E5 STR R1,[R0, #+8] 1271 DisableIDLETMR(); \ 00000038 7F0100EF SWI +383 1272 } 1273 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??contactlist_menu_ghook_0: \ 00000040 ........ DC32 S_ICONS + 288 1274 \ In segment CODE, align 4, keep-with-next 1275 void RecountMenu(CLIST *req, int needfocus) 1276 { \ RecountMenu: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 1277 int i; 1278 int j; 1279 void *data; 1280 UpdateCLheader(); 1281 if (!contactlist_menu_id) return; //Нечего считать \ 00000004 ........ LDR R6,??DataTable37 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 ........ BL UpdateCLheader \ 00000014 7C0196E5 LDR R0,[R6, #+380] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C F080BD08 POPEQ {R4-R7,PC} 1282 data=FindGUIbyId(contactlist_menu_id,NULL); \ 00000020 7C0196E5 LDR R0,[R6, #+380] \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 090200EF SWI +521 \ 0000002C 0070A0E1 MOV R7,R0 1283 if (req==NULL) \ 00000030 000054E3 CMP R4,#+0 \ 00000034 0200000A BEQ ??RecountMenu_0 1284 { 1285 j=0; 1286 } 1287 else 1288 { 1289 j=FindContactByContact(req); \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C ........ _BLF FindContactByContact,??FindContactByContact??rA \ 00000040 0040A0E1 MOV R4,R0 1290 } 1291 i=CountContacts(); \ ??RecountMenu_0: \ 00000044 ........ _BLF CountContacts,??CountContacts??rA 1292 if (j>=i) j=i-1; 1293 if (j<0) j=0; 1294 if (i!=prev_clmenu_itemcount) \ 00000048 841196E5 LDR R1,[R6, #+388] \ 0000004C 000054E1 CMP R4,R0 \ 00000050 014040A2 SUBGE R4,R0,#+1 \ 00000054 000054E3 CMP R4,#+0 \ 00000058 0040A043 MOVMI R4,#+0 \ 0000005C 010050E1 CMP R0,R1 \ 00000060 0300000A BEQ ??RecountMenu_1 1295 { 1296 prev_clmenu_itemcount=i; \ 00000064 840186E5 STR R0,[R6, #+388] 1297 Menu_SetItemCountDyn(data,i); \ 00000068 0010A0E1 MOV R1,R0 \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 E60100EF SWI +486 1298 } 1299 if(needfocus) SetCursorToMenuItem(data,j); \ ??RecountMenu_1: \ 00000074 000055E3 CMP R5,#+0 \ 00000078 0200000A BEQ ??RecountMenu_2 \ 0000007C 0410A0E1 MOV R1,R4 \ 00000080 0700A0E1 MOV R0,R7 \ 00000084 C40100EF SWI +452 1300 if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); \ ??RecountMenu_2: \ 00000088 7C0196E5 LDR R0,[R6, #+380] \ 0000008C 350100EF SWI +309 \ 00000090 000050E3 CMP R0,#+0 \ 00000094 F080BD08 POPEQ {R4-R7,PC} \ 00000098 960100EF SWI +406 \ 0000009C F080BDE8 POP {R4-R7,PC} ;; return 1301 } 1302 \ In segment CODE, align 4, keep-with-next 1303 int contactlist_menu_onkey(void *data, GUI_MSG *msg) 1304 { \ contactlist_menu_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 0140A0E1 MOV R4,R1 1305 CLIST *t; 1306 int i; 1307 i=GetCurMenuItem(data); \ 00000008 8F0100EF SWI +399 1308 t=FindContactByN(i); \ 0000000C ........ _BLF FindContactByN,??FindContactByN??rA \ 00000010 0050A0E1 MOV R5,R0 1309 if (msg->keys==0x18) \ 00000014 F200D4E1 LDRSH R0,[R4, #+2] \ 00000018 180050E3 CMP R0,#+24 \ 0000001C 0100001A BNE ??contactlist_menu_onkey_0 1310 { 1311 ShowMainMenu(); \ 00000020 ........ _BLF ShowMainMenu,??ShowMainMenu??rA 1312 return(-1); \ 00000024 270000EA B ??contactlist_menu_onkey_1 1313 } 1314 if (msg->keys==0x3D) \ ??contactlist_menu_onkey_0: \ 00000028 ........ LDR R8,??DataTable37 ;; S_ICONS \ 0000002C FF60A0E3 MOV R6,#+255 \ 00000030 FF6C86E3 ORR R6,R6,#0xFF00 \ 00000034 B87FA0E3 MOV R7,#+736 \ 00000038 3D0050E3 CMP R0,#+61 \ 0000003C 2300001A BNE ??contactlist_menu_onkey_2 1315 { 1316 if (t) \ 00000040 000055E3 CMP R5,#+0 \ 00000044 2B00000A BEQ ??contactlist_menu_onkey_3 1317 { 1318 if (t->isgroup) \ 00000048 080095E5 LDR R0,[R5, #+8] \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 0500000A BEQ ??contactlist_menu_onkey_4 1319 { 1320 t->state^=0xFFFF; \ 00000054 B405D5E1 LDRH R0,[R5, #+84] 1321 RecountMenu(t, 1); \ 00000058 0110A0E3 MOV R1,#+1 \ 0000005C 000026E0 EOR R0,R6,R0 \ 00000060 B405C5E1 STRH R0,[R5, #+84] \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 210000EA B ??contactlist_menu_onkey_5 1322 return(-1); 1323 } 1324 if (strlen(ContactT9Key)) \ ??contactlist_menu_onkey_4: \ 0000006C 080087E0 ADD R0,R7,R8 \ 00000070 1B0000EF SWI +27 \ 00000074 000050E3 CMP R0,#+0 \ 00000078 0500000A BEQ ??contactlist_menu_onkey_6 1325 { 1326 ClearContactT9Key(); \ 0000007C 2010A0E3 MOV R1,#+32 \ 00000080 080087E0 ADD R0,R7,R8 \ 00000084 1D0100EF SWI +285 1327 RecountMenu(NULL, 1); \ 00000088 0110A0E3 MOV R1,#+1 \ 0000008C 0000A0E3 MOV R0,#+0 \ 00000090 ........ BL RecountMenu 1328 } 1329 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<keys==1) \ ??contactlist_menu_onkey_2: \ 000000D0 010050E3 CMP R0,#+1 \ 000000D4 0900001A BNE ??contactlist_menu_onkey_8 1335 { 1336 if (strlen(ContactT9Key)) \ 000000D8 080087E0 ADD R0,R7,R8 \ 000000DC 1B0000EF SWI +27 \ 000000E0 000050E3 CMP R0,#+0 \ 000000E4 0500000A BEQ ??contactlist_menu_onkey_8 1337 { 1338 BackSpaceContactT9(); \ 000000E8 ........ BL BackSpaceContactT9 1339 RecountMenu(NULL, 1); \ 000000EC 0110A0E3 MOV R1,#+1 \ 000000F0 0000A0E3 MOV R0,#+0 \ ??contactlist_menu_onkey_5: \ 000000F4 ........ BL RecountMenu 1340 return(-1); \ ??contactlist_menu_onkey_3: \ 000000F8 0000E0E3 MVN R0,#+0 \ 000000FC F08FBDE8 POP {R4-R11,PC} 1341 } 1342 } 1343 if (msg->gbsmsg->msg==KEY_DOWN) \ ??contactlist_menu_onkey_8: \ 00000100 040094E5 LDR R0,[R4, #+4] \ 00000104 ........ LDR R9,??DataTable42 ;; `?` \ 00000108 041090E5 LDR R1,[R0, #+4] \ 0000010C 00A0A0E3 MOV R10,#+0 \ 00000110 01B0A0E3 MOV R11,#+1 \ 00000114 9320A0E3 MOV R2,#+147 \ 00000118 402F82E3 ORR R2,R2,#0x100 \ 0000011C 020051E1 CMP R1,R2 \ 00000120 1C00001A BNE ??contactlist_menu_onkey_9 1344 { 1345 int key=msg->gbsmsg->submess; \ 00000124 080090E5 LDR R0,[R0, #+8] 1346 #ifdef EVILFOX 1347 if ((key>='0')&&(key<='9')) \ 00000128 300050E3 CMP R0,#+48 \ 0000012C 030000BA BLT ??contactlist_menu_onkey_10 \ 00000130 3A0050E3 CMP R0,#+58 \ 00000134 390000AA BGE ??contactlist_menu_onkey_11 1348 #else 1349 if (((key>='0')&&(key<='9'))||(key=='#')||(key=='*')) 1350 #endif 1351 { 1352 AddContactT9Key(key); \ 00000138 ........ BL AddContactT9Key 1353 RecountMenu(NULL, 1); \ 0000013C 960000EA B ??contactlist_menu_onkey_12 1354 return(-1); 1355 } 1356 if (key==VOL_UP_BUTTON) \ ??contactlist_menu_onkey_10: \ 00000140 0D0050E3 CMP R0,#+13 \ 00000144 6D00001A BNE ??contactlist_menu_onkey_13 1357 { 1358 char *small_info=malloc(256); \ 00000148 400FA0E3 MOV R0,#+256 \ 0000014C 140000EF SWI +20 \ 00000150 0050A0E1 MOV R5,R0 1359 sprintf(small_info, "Online time:\n" 1360 "%02d:%02d:%02d\n" 1361 "Server:\n" 1362 "%s" 1363 , hours, minutes, seconds, hostname); \ 00000154 6400A0E3 MOV R0,#+100 \ 00000158 4C0D80E3 ORR R0,R0,#0x1300 \ 0000015C 080080E0 ADD R0,R0,R8 \ 00000160 01002DE9 PUSH {R0} \ 00000164 A40098E5 LDR R0,[R8, #+164] \ 00000168 601089E2 ADD R1,R9,#+96 \ 0000016C 01002DE9 PUSH {R0} \ 00000170 A83098E5 LDR R3,[R8, #+168] \ 00000174 AC2098E5 LDR R2,[R8, #+172] \ 00000178 0500A0E1 MOV R0,R5 \ 0000017C 160000EF SWI +22 1364 ShowMSG(1,(int)small_info); \ 00000180 0510A0E1 MOV R1,R5 \ 00000184 0100A0E3 MOV R0,#+1 \ 00000188 480100EF SWI +328 1365 mfree(small_info); \ 0000018C 0500A0E1 MOV R0,R5 \ 00000190 150000EF SWI +21 \ 00000194 08D08DE2 ADD SP,SP,#+8 1366 } 1367 if (key==LEFT_BUTTON) 1368 { 1369 #ifdef EVILFOX 1370 while(t=(CLIST *)(t->next)) 1371 { 1372 if (t->isunread) goto doit; 1373 } 1374 t=(CLIST *)(&cltop); 1375 while(t=(CLIST *)(t->next)) 1376 { 1377 if (t->isunread) goto doit; 1378 } 1379 t=(CLIST *)(&cltop); 1380 if(Is_Show_Groups) 1381 { 1382 while(t=(CLIST *)(t->next)) 1383 { 1384 if (t->isgroup) 1385 { 1386 if(!t->state) 1387 t->state^=0xFFFF; 1388 } 1389 } 1390 } 1391 goto doit2; 1392 doit: 1393 { 1394 CLIST *g=FindGroupByID(t->group); 1395 if (g) 1396 { 1397 if (g->state) 1398 { 1399 g->state=0; 1400 } 1401 } 1402 } 1403 doit2: 1404 RecountMenu(t, 1); 1405 #else 1406 IsActiveUp=!IsActiveUp; 1407 RecountMenu(NULL, 1); 1408 #endif 1409 return(-1); 1410 } 1411 #ifdef EVILFOX 1412 if (key=='*') 1413 { 1414 while(t=(CLIST *)(t->next)) 1415 { 1416 if (t->just_now) goto doit3; 1417 } 1418 t=(CLIST *)(&cltop); 1419 while(t=(CLIST *)(t->next)) 1420 { 1421 if (t->just_now) goto doit3; 1422 } 1423 return(-1); 1424 doit3: 1425 { 1426 CLIST *g=FindGroupByID(t->group); 1427 if (g) 1428 { 1429 if (g->state) 1430 { 1431 g->state=0; 1432 } 1433 } 1434 } 1435 RecountMenu(t, 1); 1436 return(-1); 1437 } 1438 if (key=='#') 1439 { 1440 while(t=(CLIST *)(t->next)) 1441 { 1442 if (t->isactive) goto doit4; 1443 } 1444 t=(CLIST *)(&cltop); 1445 while(t=(CLIST *)(t->next)) 1446 { 1447 if (t->isactive) goto doit4; 1448 } 1449 return(-1); 1450 doit4: 1451 { 1452 CLIST *g=FindGroupByID(t->group); 1453 if (g) 1454 { 1455 if (g->state) 1456 { 1457 g->state=0; 1458 } 1459 } 1460 } 1461 RecountMenu(t, 1); 1462 return(-1); 1463 } 1464 #endif 1465 if (key==RIGHT_BUTTON) 1466 { 1467 //Послать запрос текста XStatus 1468 if (t) 1469 { 1470 if (!t->isgroup) 1471 { 1472 FreeXText(t); 1473 t->req_xtext=0; 1474 RequestXText(t->uin); 1475 RefreshGUI(); 1476 return(-1); 1477 } 1478 } 1479 } 1480 if (key==GREEN_BUTTON) 1481 { 1482 #ifdef EVILFOX 1483 IsActiveUp=!IsActiveUp; 1484 RecountMenu(NULL, 1); 1485 #else 1486 if (t && Is_Show_Groups) {//есть контакт и показываем группы? 1487 if (!t->isgroup) 1488 t=FindGroupByID(t->group); 1489 if (t && !t->state) {//группа нашлась и она открыта? 1490 t->state^=0xFFFF; 1491 RecountMenu(t, 1); 1492 } 1493 } 1494 #endif 1495 return(-1); 1496 } 1497 } 1498 if (msg->gbsmsg->msg==LONG_PRESS) \ ??contactlist_menu_onkey_9: \ 00000198 040094E5 LDR R0,[R4, #+4] \ 0000019C 652F8BE3 ORR R2,R11,#0x194 \ 000001A0 041090E5 LDR R1,[R0, #+4] \ 000001A4 020051E1 CMP R1,R2 \ 000001A8 9300001A BNE ??contactlist_menu_onkey_14 1499 { 1500 if (msg->gbsmsg->submess=='#') \ 000001AC 081090E5 LDR R1,[R0, #+8] \ 000001B0 0940A0E3 MOV R4,#+9 \ 000001B4 424C84E3 ORR R4,R4,#0x4200 \ 000001B8 B050A0E3 MOV R5,#+176 \ 000001BC DE5C85E3 ORR R5,R5,#0xDE00 \ 000001C0 AA6FA0E3 MOV R6,#+680 \ 000001C4 230051E3 CMP R1,#+35 \ 000001C8 7800001A BNE ??contactlist_menu_onkey_15 1501 { 1502 ClearContactT9Key(); \ 000001CC 2010A0E3 MOV R1,#+32 \ 000001D0 080087E0 ADD R0,R7,R8 \ 000001D4 1D0100EF SWI +285 1503 RecountMenu(NULL, 1); \ 000001D8 0110A0E3 MOV R1,#+1 \ 000001DC 0A00A0E1 MOV R0,R10 \ 000001E0 ........ BL RecountMenu 1504 gipc.name_to=ipc_xtask_name; \ 000001E4 090086E0 ADD R0,R6,R9 \ 000001E8 740088E5 STR R0,[R8, #+116] 1505 gipc.name_from=ipc_my_name; \ 000001EC A20F89E2 ADD R0,R9,#+648 \ 000001F0 780088E5 STR R0,[R8, #+120] 1506 gipc.data=0; \ 000001F4 7CA088E5 STR R10,[R8, #+124] 1507 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 000001F8 743088E2 ADD R3,R8,#+116 \ 000001FC 0B20A0E1 MOV R2,R11 \ 00000200 0510A0E1 MOV R1,R5 \ 00000204 0400A0E1 MOV R0,R4 \ 00000208 000100EF SWI +256 1508 if (IsUnlocked()) \ 0000020C 430000EF SWI +67 \ 00000210 000050E3 CMP R0,#+0 \ 00000214 B7FFFF0A BEQ ??contactlist_menu_onkey_3 1509 { 1510 KbdLock(); \ 00000218 A90000EF SWI +169 \ 0000021C A9FFFFEA B ??contactlist_menu_onkey_1 1511 } 1512 return(-1); 1513 } \ ??contactlist_menu_onkey_11: \ 00000220 3D0050E3 CMP R0,#+61 \ 00000224 1000000A BEQ ??contactlist_menu_onkey_16 \ 00000228 3E0050E3 CMP R0,#+62 \ 0000022C D9FFFF1A BNE ??contactlist_menu_onkey_9 \ 00000230 000055E3 CMP R5,#+0 \ 00000234 D7FFFF0A BEQ ??contactlist_menu_onkey_9 \ 00000238 080095E5 LDR R0,[R5, #+8] \ 0000023C 000050E3 CMP R0,#+0 \ 00000240 D4FFFF1A BNE ??contactlist_menu_onkey_9 \ 00000244 0500A0E1 MOV R0,R5 \ 00000248 ........ _BLF FreeXText,??FreeXText??rA \ 0000024C 88A085E5 STR R10,[R5, #+136] \ 00000250 0C0095E5 LDR R0,[R5, #+12] \ 00000254 ........ BL RequestXText \ 00000258 960100EF SWI +406 \ 0000025C 250000EA B ??contactlist_menu_onkey_17 \ ??contactlist_menu_onkey_18: \ 00000260 580095E5 LDR R0,[R5, #+88] \ 00000264 000050E3 CMP R0,#+0 \ 00000268 1900001A BNE ??contactlist_menu_onkey_19 \ ??contactlist_menu_onkey_16: \ 0000026C 005095E5 LDR R5,[R5, #+0] \ 00000270 000055E3 CMP R5,#+0 \ 00000274 F9FFFF1A BNE ??contactlist_menu_onkey_18 \ 00000278 905088E2 ADD R5,R8,#+144 \ 0000027C 020000EA B ??contactlist_menu_onkey_20 \ ??contactlist_menu_onkey_21: \ 00000280 580095E5 LDR R0,[R5, #+88] \ 00000284 000050E3 CMP R0,#+0 \ 00000288 1100001A BNE ??contactlist_menu_onkey_19 \ ??contactlist_menu_onkey_20: \ 0000028C 005095E5 LDR R5,[R5, #+0] \ 00000290 000055E3 CMP R5,#+0 \ 00000294 F9FFFF1A BNE ??contactlist_menu_onkey_21 \ 00000298 340198E5 LDR R0,[R8, #+308] \ 0000029C 905088E2 ADD R5,R8,#+144 \ 000002A0 000050E3 CMP R0,#+0 \ 000002A4 1000000A BEQ ??contactlist_menu_onkey_22 \ ??contactlist_menu_onkey_23: \ 000002A8 005095E5 LDR R5,[R5, #+0] \ 000002AC 000055E3 CMP R5,#+0 \ 000002B0 0D00000A BEQ ??contactlist_menu_onkey_22 \ 000002B4 080095E5 LDR R0,[R5, #+8] \ 000002B8 000050E3 CMP R0,#+0 \ 000002BC F9FFFF0A BEQ ??contactlist_menu_onkey_23 \ 000002C0 B405D5E1 LDRH R0,[R5, #+84] \ 000002C4 000050E3 CMP R0,#+0 \ 000002C8 F6FFFF1A BNE ??contactlist_menu_onkey_23 \ 000002CC B465C5E1 STRH R6,[R5, #+84] \ 000002D0 F4FFFFEA B ??contactlist_menu_onkey_23 \ ??contactlist_menu_onkey_19: \ 000002D4 100095E5 LDR R0,[R5, #+16] \ 000002D8 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000002DC 000050E3 CMP R0,#+0 \ 000002E0 B415D011 LDRHNE R1,[R0, #+84] \ 000002E4 00005113 CMPNE R1,#+0 \ 000002E8 B4A5C011 STRHNE R10,[R0, #+84] \ ??contactlist_menu_onkey_22: \ 000002EC 0110A0E3 MOV R1,#+1 \ 000002F0 0500A0E1 MOV R0,R5 \ 000002F4 ........ BL RecountMenu \ ??contactlist_menu_onkey_17: \ 000002F8 0A00E0E1 MVN R0,R10 \ 000002FC F08FBDE8 POP {R4-R11,PC} \ ??contactlist_menu_onkey_13: \ 00000300 2A0050E3 CMP R0,#+42 \ 00000304 0A00000A BEQ ??contactlist_menu_onkey_24 \ 00000308 230050E3 CMP R0,#+35 \ 0000030C 1600000A BEQ ??contactlist_menu_onkey_25 \ 00000310 0B0050E3 CMP R0,#+11 \ 00000314 9FFFFF1A BNE ??contactlist_menu_onkey_9 \ 00000318 180198E5 LDR R0,[R8, #+280] \ 0000031C 000050E3 CMP R0,#+0 \ 00000320 00B0A013 MOVNE R11,#+0 \ 00000324 1B0000EA B ??contactlist_menu_onkey_26 \ ??contactlist_menu_onkey_27: \ 00000328 5C0095E5 LDR R0,[R5, #+92] \ 0000032C 000050E3 CMP R0,#+0 \ 00000330 E7FFFF1A BNE ??contactlist_menu_onkey_19 \ ??contactlist_menu_onkey_24: \ 00000334 005095E5 LDR R5,[R5, #+0] \ 00000338 000055E3 CMP R5,#+0 \ 0000033C F9FFFF1A BNE ??contactlist_menu_onkey_27 \ 00000340 905088E2 ADD R5,R8,#+144 \ ??contactlist_menu_onkey_28: \ 00000344 005095E5 LDR R5,[R5, #+0] \ 00000348 000055E3 CMP R5,#+0 \ 0000034C 69FFFF0A BEQ ??contactlist_menu_onkey_3 \ 00000350 5C0095E5 LDR R0,[R5, #+92] \ 00000354 000050E3 CMP R0,#+0 \ 00000358 F9FFFF0A BEQ ??contactlist_menu_onkey_28 \ 0000035C DCFFFFEA B ??contactlist_menu_onkey_19 \ ??contactlist_menu_onkey_29: \ 00000360 7C0095E5 LDR R0,[R5, #+124] \ 00000364 000050E3 CMP R0,#+0 \ 00000368 D9FFFF1A BNE ??contactlist_menu_onkey_19 \ ??contactlist_menu_onkey_25: \ 0000036C 005095E5 LDR R5,[R5, #+0] \ 00000370 000055E3 CMP R5,#+0 \ 00000374 F9FFFF1A BNE ??contactlist_menu_onkey_29 \ 00000378 905088E2 ADD R5,R8,#+144 \ ??contactlist_menu_onkey_30: \ 0000037C 005095E5 LDR R5,[R5, #+0] \ 00000380 000055E3 CMP R5,#+0 \ 00000384 5BFFFF0A BEQ ??contactlist_menu_onkey_3 \ 00000388 7C0095E5 LDR R0,[R5, #+124] \ 0000038C 000050E3 CMP R0,#+0 \ 00000390 F9FFFF0A BEQ ??contactlist_menu_onkey_30 \ 00000394 CEFFFFEA B ??contactlist_menu_onkey_19 \ ??contactlist_menu_onkey_26: \ 00000398 18B188E5 STR R11,[R8, #+280] \ ??contactlist_menu_onkey_12: \ 0000039C 0110A0E3 MOV R1,#+1 \ 000003A0 0000A0E3 MOV R0,#+0 \ 000003A4 ........ BL RecountMenu \ 000003A8 0A00E0E1 MVN R0,R10 \ 000003AC F08FBDE8 POP {R4-R11,PC} 1514 if (msg->gbsmsg->submess=='*'){ \ ??contactlist_menu_onkey_15: \ 000003B0 2A0051E3 CMP R1,#+42 \ 000003B4 1000001A BNE ??contactlist_menu_onkey_14 1515 ClearContactT9Key(); \ 000003B8 2010A0E3 MOV R1,#+32 \ 000003BC 080087E0 ADD R0,R7,R8 \ 000003C0 1D0100EF SWI +285 1516 RecountMenu(NULL, 1); \ 000003C4 0110A0E3 MOV R1,#+1 \ 000003C8 0A00A0E1 MOV R0,R10 \ 000003CC ........ BL RecountMenu 1517 silenthide=1; \ 000003D0 20B188E5 STR R11,[R8, #+288] 1518 gipc.name_to=ipc_xtask_name; \ 000003D4 090086E0 ADD R0,R6,R9 \ 000003D8 740088E5 STR R0,[R8, #+116] 1519 gipc.name_from=ipc_my_name; \ 000003DC A20F89E2 ADD R0,R9,#+648 \ 000003E0 780088E5 STR R0,[R8, #+120] 1520 gipc.data=0; \ 000003E4 7CA088E5 STR R10,[R8, #+124] 1521 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 000003E8 743088E2 ADD R3,R8,#+116 \ 000003EC 0B20A0E1 MOV R2,R11 \ 000003F0 0510A0E1 MOV R1,R5 \ 000003F4 0400A0E1 MOV R0,R4 \ 000003F8 000100EF SWI +256 1522 } 1523 } 1524 return(0); \ ??contactlist_menu_onkey_14: \ 000003FC 0000A0E3 MOV R0,#+0 \ 00000400 F08FBDE8 POP {R4-R11,PC} ;; return 1525 } 1526 \ In segment CODE, align 4, keep-with-next 1527 void GetOnTotalContact(int group_id,int *_onlinetotal) 1528 { 1529 CLIST *t; 1530 t=(CLIST *)&cltop; \ GetOnTotalContact: \ 00000000 ........ LDR R2,??DataTable40 ;; S_ICONS + 144 \ 00000004 30002DE9 PUSH {R4,R5} 1531 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 1532 while((t=t->next)) 1533 { 1534 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 1535 { 1536 total++; 1537 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 1538 } 1539 } \ ??GetOnTotalContact_0: \ 00000040 002092E5 LDR R2,[R2, #+0] \ 00000044 000052E3 CMP R2,#+0 \ 00000048 F3FFFF1A BNE ??GetOnTotalContact_1 1540 _onlinetotal[0]=online; \ 0000004C 003081E5 STR R3,[R1, #+0] 1541 _onlinetotal[1]=total; \ 00000050 04C081E5 STR R12,[R1, #+4] 1542 } \ 00000054 3000BDE8 POP {R4,R5} \ 00000058 1EFF2FE1 BX LR ;; return 1543 1544 \ In segment CODE, align 4, keep-with-next 1545 void contactlist_menu_iconhndl(void *data, int curitem, void *unk) 1546 { \ contactlist_menu_iconhndl: \ 00000000 F24F2DE9 PUSH {R1,R4-R11,LR} \ 00000004 9CDF4DE2 SUB SP,SP,#+624 1547 CLIST *t; 1548 #ifdef USE_MLMENU 1549 void *item=AllocMLMenuItem(data); 1550 #else 1551 void *item=AllocMenuItem(data); 1552 #endif 1553 int icon; 1554 1555 WSHDR *ws2; 1556 #ifdef USE_MLMENU 1557 WSHDR *ws4; 1558 #endif 1559 WSHDR ws1loc, *ws1; 1560 unsigned short num[128]; 1561 ws1=CreateLocalWS(&ws1loc,num,128); 1562 #ifdef USE_MLMENU 1563 WSHDR ws3loc, *ws3; 1564 unsigned short num3[128]; 1565 ws3=CreateLocalWS(&ws3loc,num3,128); 1566 char s[64]; 1567 #endif 1568 t=FindContactByN(curitem); 1569 if (t) \ 00000008 ........ LDR R8,??DataTable41 ;; S_ICONS \ 0000000C ........ LDR R11,??DataTable42 ;; `?` \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 190200EF SWI +537 \ 00000018 0050A0E1 MOV R5,R0 \ 0000001C 8020A0E3 MOV R2,#+128 \ 00000020 08108DE2 ADD R1,SP,#+8 \ 00000024 920F8DE2 ADD R0,SP,#+584 \ 00000028 270100EF SWI +295 \ 0000002C 0060A0E1 MOV R6,R0 \ 00000030 8020A0E3 MOV R2,#+128 \ 00000034 421F8DE2 ADD R1,SP,#+264 \ 00000038 970F8DE2 ADD R0,SP,#+604 \ 0000003C 270100EF SWI +295 \ 00000040 0070A0E1 MOV R7,R0 \ 00000044 70029DE5 LDR R0,[SP, #+624] \ 00000048 ........ _BLF FindContactByN,??FindContactByN??rA \ 0000004C 00A0B0E1 MOVS R10,R0 \ 00000050 5500000A BEQ ??contactlist_menu_iconhndl_0 1570 { 1571 icon=GetIconIndex(t); \ 00000054 ........ BL GetIconIndex \ 00000058 0090A0E1 MOV R9,R0 1572 if (icon!=IS_GROUP) \ 0000005C 0F0059E3 CMP R9,#+15 \ 00000060 4000000A BEQ ??contactlist_menu_iconhndl_1 1573 { 1574 #ifdef EVILFOX 1575 if(t->just_now) \ 00000064 5C009AE5 LDR R0,[R10, #+92] \ 00000068 14208AE2 ADD R2,R10,#+20 \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 0300000A BEQ ??contactlist_menu_iconhndl_2 \ 00000074 88108BE2 ADD R1,R11,#+136 \ 00000078 C00F88E2 ADD R0,R8,#+768 1576 { 1577 // char *test=malloc(64); 1578 sprintf(upcoming, ">> %s <<", t->name); \ 0000007C 160000EF SWI +22 1579 wsprintf(ws1,percent_t,upcoming); \ 00000080 C02F88E2 ADD R2,R8,#+768 1580 // mfree(test); 1581 } 1582 else 1583 wsprintf(ws1,percent_t,t->name); \ ??contactlist_menu_iconhndl_2: \ 00000084 10108BE2 ADD R1,R11,#+16 \ 00000088 0600A0E1 MOV R0,R6 \ 0000008C 240100EF SWI +292 1584 if (t->just_now) \ 00000090 5C009AE5 LDR R0,[R10, #+92] \ 00000094 000050E3 CMP R0,#+0 \ 00000098 0900000A BEQ ??contactlist_menu_iconhndl_3 1585 { 1586 wsInsertChar(ws1,0x0004,1); \ 0000009C 0120A0E3 MOV R2,#+1 \ 000000A0 0410A0E3 MOV R1,#+4 \ 000000A4 0600A0E1 MOV R0,R6 \ 000000A8 1D0000EF SWI +29 1587 wsInsertChar(ws1,0xE008,1); \ 000000AC 0120A0E3 MOV R2,#+1 \ 000000B0 0810A0E3 MOV R1,#+8 \ 000000B4 E01C81E3 ORR R1,R1,#0xE000 \ 000000B8 0600A0E1 MOV R0,R6 \ 000000BC 1D0000EF SWI +29 \ 000000C0 190000EA B ??contactlist_menu_iconhndl_4 1588 } 1589 else 1590 #else 1591 wsprintf(ws1,percent_t,t->name); 1592 #endif 1593 /* if (t->isactive) 1594 { 1595 wsInsertChar(ws1,0x0002,1); 1596 wsInsertChar(ws1,0xE008,1); 1597 }*/ 1598 #ifdef USE_MLMENU 1599 if (t->xtext && t->xtext[0]!=0) \ ??contactlist_menu_iconhndl_3: \ 000000C4 84009AE5 LDR R0,[R10, #+132] \ 000000C8 000050E3 CMP R0,#+0 \ 000000CC 0000D015 LDRBNE R0,[R0, #+0] \ 000000D0 00005013 CMPNE R0,#+0 \ 000000D4 1000000A BEQ ??contactlist_menu_iconhndl_5 1600 { 1601 int i; 1602 zeromem(s,64); \ 000000D8 4010A0E3 MOV R1,#+64 \ 000000DC 820F8DE2 ADD R0,SP,#+520 \ 000000E0 1D0100EF SWI +285 1603 i=t->xtext[0]; \ 000000E4 84009AE5 LDR R0,[R10, #+132] \ 000000E8 0020D0E5 LDRB R2,[R0, #+0] 1604 if (i>63) i=63; 1605 strncpy(s,t->xtext+1,i); \ 000000EC 011080E2 ADD R1,R0,#+1 \ 000000F0 820F8DE2 ADD R0,SP,#+520 \ 000000F4 400052E3 CMP R2,#+64 \ 000000F8 3F20A0A3 MOVGE R2,#+63 \ 000000FC 160100EF SWI +278 1606 wsprintf(ws3,"%c%t",0xE012,s); \ 00000100 823F8DE2 ADD R3,SP,#+520 \ 00000104 1220A0E3 MOV R2,#+18 \ 00000108 E02C82E3 ORR R2,R2,#0xE000 \ 0000010C 94108BE2 ADD R1,R11,#+148 \ 00000110 0700A0E1 MOV R0,R7 \ 00000114 240100EF SWI +292 \ 00000118 030000EA B ??contactlist_menu_iconhndl_4 1607 } 1608 else 1609 wsprintf(ws3,percent_d,t->uin); \ ??contactlist_menu_iconhndl_5: \ 0000011C 0C209AE5 LDR R2,[R10, #+12] \ 00000120 13108BE2 ADD R1,R11,#+19 \ 00000124 0700A0E1 MOV R0,R7 \ 00000128 240100EF SWI +292 1610 if ((t->xstatexstate)) \ ??contactlist_menu_iconhndl_4: \ 0000012C B605DAE1 LDRH R0,[R10, #+86] \ 00000130 ........ LDR R2,??DataTable43 ;; total_xstatuses \ 00000134 0010A0E1 MOV R1,R0 \ 00000138 002092E5 LDR R2,[R2, #+0] \ 0000013C 020051E1 CMP R1,R2 \ 00000140 1C0000AA BGE ??contactlist_menu_iconhndl_6 \ 00000144 000050E3 CMP R0,#+0 \ 00000148 1A00000A BEQ ??contactlist_menu_iconhndl_6 1611 { 1612 wsInsertChar(ws3,FIRST_UCS2_BITMAP+t->xstate,1); \ 0000014C 0120A0E3 MOV R2,#+1 \ 00000150 2A00A0E3 MOV R0,#+42 \ 00000154 E10C80E3 ORR R0,R0,#0xE100 \ 00000158 011080E0 ADD R1,R0,R1 \ 0000015C 0700A0E1 MOV R0,R7 \ 00000160 1D0000EF SWI +29 \ 00000164 130000EA B ??contactlist_menu_iconhndl_6 1613 } 1614 #endif 1615 } 1616 else 1617 { 1618 int onlinetotal[2]; 1619 GetOnTotalContact(t->group,onlinetotal); \ ??contactlist_menu_iconhndl_1: \ 00000168 10009AE5 LDR R0,[R10, #+16] \ 0000016C 0D10A0E1 MOV R1,SP \ 00000170 ........ BL GetOnTotalContact 1620 #ifdef USE_MLMENU 1621 wsprintf(ws1,percent_t,t->name); \ 00000174 14208AE2 ADD R2,R10,#+20 \ 00000178 10108BE2 ADD R1,R11,#+16 \ 0000017C 0600A0E1 MOV R0,R6 \ 00000180 240100EF SWI +292 1622 wsprintf(ws3,"(%d/%d)",onlinetotal[0],onlinetotal[1]); \ 00000184 04309DE5 LDR R3,[SP, #+4] \ 00000188 00209DE5 LDR R2,[SP, #+0] \ 0000018C 9C108BE2 ADD R1,R11,#+156 \ 00000190 0700A0E1 MOV R0,R7 \ 00000194 240100EF SWI +292 1623 #else 1624 wsprintf(ws1,"%t%c%c(%d/%d)",t->name,0xE01D,0xE012,onlinetotal[0],onlinetotal[1]); 1625 #endif 1626 if (t->state) icon++; //Модификация иконки группы \ 00000198 B405DAE1 LDRH R0,[R10, #+84] \ 0000019C 000050E3 CMP R0,#+0 \ 000001A0 0400000A BEQ ??contactlist_menu_iconhndl_6 \ 000001A4 019089E2 ADD R9,R9,#+1 \ 000001A8 020000EA B ??contactlist_menu_iconhndl_6 1627 } 1628 } 1629 else 1630 { 1631 wsprintf(ws1, LG_CLERROR); \ ??contactlist_menu_iconhndl_0: \ 000001AC A4108BE2 ADD R1,R11,#+164 \ 000001B0 0600A0E1 MOV R0,R6 \ 000001B4 240100EF SWI +292 1632 } 1633 ws2=AllocMenuWS(data,ws1->wsbody[0]); \ ??contactlist_menu_iconhndl_6: \ 000001B8 000096E5 LDR R0,[R6, #+0] \ 000001BC B010D0E1 LDRH R1,[R0, #+0] \ 000001C0 0400A0E1 MOV R0,R4 \ 000001C4 980100EF SWI +408 \ 000001C8 00A0A0E1 MOV R10,R0 1634 wstrcpy(ws2,ws1); \ 000001CC 0610A0E1 MOV R1,R6 \ 000001D0 1F0100EF SWI +287 1635 1636 SetMenuItemIconArray(data, item, S_ICONS+icon); \ 000001D4 092188E0 ADD R2,R8,R9, LSL #+2 \ 000001D8 0510A0E1 MOV R1,R5 \ 000001DC 0400A0E1 MOV R0,R4 \ 000001E0 990100EF SWI +409 1637 #ifdef USE_MLMENU 1638 ws4=AllocMenuWS(data,ws3->wsbody[0]); \ 000001E4 000097E5 LDR R0,[R7, #+0] \ 000001E8 B010D0E1 LDRH R1,[R0, #+0] \ 000001EC 0400A0E1 MOV R0,R4 \ 000001F0 980100EF SWI +408 \ 000001F4 0060A0E1 MOV R6,R0 1639 wstrcpy(ws4,ws3); \ 000001F8 0710A0E1 MOV R1,R7 \ 000001FC 1F0100EF SWI +287 1640 SetMLMenuItemText(data, item, ws2, ws4, curitem); \ 00000200 70029DE5 LDR R0,[SP, #+624] \ 00000204 0630A0E1 MOV R3,R6 \ 00000208 01002DE9 PUSH {R0} \ 0000020C 0A20A0E1 MOV R2,R10 \ 00000210 0510A0E1 MOV R1,R5 \ 00000214 0400A0E1 MOV R0,R4 \ 00000218 180200EF SWI +536 1641 #else 1642 SetMenuItemText(data, item, ws2, curitem); 1643 #endif 1644 } \ 0000021C 9EDF8DE2 ADD SP,SP,#+632 \ 00000220 F08FBDE8 POP {R4-R11,PC} ;; return 1645 1646 //=============================================================================================== 1647 int DNR_ID=0; 1648 int DNR_TRIES=3; 1649 1650 extern const char NATICQ_HOST[]; 1651 extern const unsigned int NATICQ_PORT; 1652 1653 int host_counter = 0; 1654 1655 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 1656 const char *GetHost(int cnt, const char *str, char *buf) 1657 { 1658 const char *tmp = str, *begin, *end; \ GetHost: \ 00000000 0130A0E1 MOV R3,R1 1659 if(cnt) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0E00001A BNE ??GetHost_0 1660 { 1661 for(;cnt;cnt--) 1662 { 1663 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); 1664 if(!*str) str = tmp; 1665 for(;(*str==';' || *str==' ' || *str=='\x0D' || *str=='\x0A') && *str; str++); 1666 if(!*str) str = tmp; 1667 } 1668 } 1669 tmp = buf; \ ??GetHost_1: \ 0000000C 0200A0E1 MOV R0,R2 1670 begin = str; \ 00000010 0130A0E1 MOV R3,R1 \ 00000014 1B0000EA B ??GetHost_2 \ ??GetHost_3: \ 00000018 011081E2 ADD R1,R1,#+1 \ ??GetHost_4: \ 0000001C 00C0D1E5 LDRB R12,[R1, #+0] \ 00000020 3B005CE3 CMP R12,#+59 \ 00000024 20005C13 CMPNE R12,#+32 \ 00000028 0D005C13 CMPNE R12,#+13 \ 0000002C 0A005C13 CMPNE R12,#+10 \ 00000030 0100001A BNE ??GetHost_5 \ 00000034 00005CE3 CMP R12,#+0 \ 00000038 F6FFFF1A BNE ??GetHost_3 \ ??GetHost_5: \ 0000003C 00005CE3 CMP R12,#+0 \ 00000040 0310A001 MOVEQ R1,R3 \ 00000044 010040E2 SUB R0,R0,#+1 \ ??GetHost_0: \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0100001A BNE ??GetHost_6 \ 00000050 EDFFFFEA B ??GetHost_1 \ ??GetHost_7: \ 00000054 011081E2 ADD R1,R1,#+1 \ ??GetHost_6: \ 00000058 00C0D1E5 LDRB R12,[R1, #+0] \ 0000005C 3B005CE3 CMP R12,#+59 \ 00000060 20005C13 CMPNE R12,#+32 \ 00000064 0D005C13 CMPNE R12,#+13 \ 00000068 0A005C13 CMPNE R12,#+10 \ 0000006C 00005C13 CMPNE R12,#+0 \ 00000070 F7FFFF1A BNE ??GetHost_7 \ 00000074 00005CE3 CMP R12,#+0 \ 00000078 E7FFFF1A BNE ??GetHost_4 \ 0000007C 0310A0E1 MOV R1,R3 \ 00000080 E5FFFFEA B ??GetHost_4 1671 for(;*str!=';' && *str!=':' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetHost_8: \ 00000084 011081E2 ADD R1,R1,#+1 \ ??GetHost_2: \ 00000088 00C0D1E5 LDRB R12,[R1, #+0] \ 0000008C 3B005CE3 CMP R12,#+59 \ 00000090 3A005C13 CMPNE R12,#+58 \ 00000094 20005C13 CMPNE R12,#+32 \ 00000098 0D005C13 CMPNE R12,#+13 \ 0000009C 0A005C13 CMPNE R12,#+10 \ 000000A0 00005C13 CMPNE R12,#+0 \ 000000A4 F6FFFF1A BNE ??GetHost_8 1672 end = str; 1673 for(;begin0x2F && attr[k]<0x3A) {ret=ret*10+attr[k]-0x30;} else { if ( attr[k]=='-') {neg=-1;} else {return(ret*neg);}} \ ??atoi_1: \ 00000010 3A0053E3 CMP R3,#+58 \ 00000014 0800002A BCS ??atoi_2 \ 00000018 9C3121E0 MLA R1,R12,R1,R3 \ 0000001C 301041E2 SUB R1,R1,#+48 \ ??atoi_3: \ 00000020 010080E2 ADD R0,R0,#+1 \ ??atoi_0: \ 00000024 0030D0E5 LDRB R3,[R0, #+0] \ 00000028 300053E3 CMP R3,#+48 \ 0000002C F7FFFF2A BCS ??atoi_1 \ 00000030 2D0053E3 CMP R3,#+45 \ 00000034 0020E003 MVNEQ R2,#+0 \ 00000038 F8FFFF0A BEQ ??atoi_3 \ ??atoi_2: \ 0000003C 920100E0 MUL R0,R2,R1 \ 00000040 1EFF2FE1 BX LR ;; return 1685 } 1686 } 1687 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 1688 int GetPort(int cnt, const char *str) 1689 { \ GetPort: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 1690 const char *tmp = str; \ 00000008 01C0A0E1 MOV R12,R1 1691 char numbuf[6], numcnt = 0; \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 0030A0E3 MOV R3,#+0 1692 if(cnt) \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0C00001A BNE ??GetPort_0 \ 0000001C 1B0000EA B ??GetPort_1 1693 { 1694 for(;cnt;cnt--) 1695 { 1696 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); 1697 if(!*str) str = tmp; 1698 for(;(*str==';' || *str==' ' || *str=='\x0D' || *str=='\x0A') && *str; str++); \ ??GetPort_2: \ 00000020 011081E2 ADD R1,R1,#+1 \ ??GetPort_3: \ 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 0100001A BNE ??GetPort_4 \ 0000003C 000054E3 CMP R4,#+0 \ 00000040 F6FFFF1A BNE ??GetPort_2 1699 if(!*str) str = tmp; \ ??GetPort_4: \ 00000044 000054E3 CMP R4,#+0 \ 00000048 0C10A001 MOVEQ R1,R12 \ 0000004C 010040E2 SUB R0,R0,#+1 \ ??GetPort_0: \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0100001A BNE ??GetPort_5 \ 00000058 0C0000EA B ??GetPort_1 \ ??GetPort_6: \ 0000005C 011081E2 ADD R1,R1,#+1 \ ??GetPort_5: \ 00000060 0040D1E5 LDRB R4,[R1, #+0] \ 00000064 3B0054E3 CMP R4,#+59 \ 00000068 20005413 CMPNE R4,#+32 \ 0000006C 0D005413 CMPNE R4,#+13 \ 00000070 0A005413 CMPNE R4,#+10 \ 00000074 00005413 CMPNE R4,#+0 \ 00000078 F7FFFF1A BNE ??GetPort_6 \ 0000007C 000054E3 CMP R4,#+0 \ 00000080 E7FFFF1A BNE ??GetPort_3 \ 00000084 0C10A0E1 MOV R1,R12 \ 00000088 E5FFFFEA B ??GetPort_3 1700 } 1701 } 1702 for(;*str!=';' && *str!=':' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetPort_7: \ 0000008C 011081E2 ADD R1,R1,#+1 \ ??GetPort_1: \ 00000090 0000D1E5 LDRB R0,[R1, #+0] \ 00000094 3B0050E3 CMP R0,#+59 \ 00000098 3A005013 CMPNE R0,#+58 \ 0000009C 20005013 CMPNE R0,#+32 \ 000000A0 0D005013 CMPNE R0,#+13 \ 000000A4 0A005013 CMPNE R0,#+10 \ 000000A8 00005013 CMPNE R0,#+0 \ 000000AC F6FFFF1A BNE ??GetPort_7 1703 if(*str!=':') return NATICQ_PORT; \ 000000B0 ........ LDRB R0,[R1], #+1 \ 000000B4 3A0050E3 CMP R0,#+58 \ 000000B8 58009F15 LDRNE R0,??GetPort_8 ;; NATICQ_PORT \ 000000BC 00009015 LDRNE R0,[R0, #+0] \ 000000C0 1680BD18 POPNE {R1,R2,R4,PC} 1704 str++; 1705 numbuf[5] = 0; \ 000000C4 0520CDE5 STRB R2,[SP, #+5] \ 000000C8 030000EA B ??GetPort_9 1706 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str && numcnt<5; numbuf[numcnt] = *str, str++, numcnt++); \ ??GetPort_10: \ 000000CC ........ LDRB R4,[R1], #+1 \ 000000D0 013083E2 ADD R3,R3,#+1 \ 000000D4 FF3003E2 AND R3,R3,#0xFF \ 000000D8 0040C0E5 STRB R4,[R0, #+0] \ ??GetPort_9: \ 000000DC 0D40A0E1 MOV R4,SP \ 000000E0 040083E0 ADD R0,R3,R4 \ 000000E4 0040D1E5 LDRB R4,[R1, #+0] \ 000000E8 3B0054E3 CMP R4,#+59 \ 000000EC 20005413 CMPNE R4,#+32 \ 000000F0 0D005413 CMPNE R4,#+13 \ 000000F4 0A005413 CMPNE R4,#+10 \ 000000F8 00005413 CMPNE R4,#+0 \ 000000FC 0100000A BEQ ??GetPort_11 \ 00000100 050053E3 CMP R3,#+5 \ 00000104 F0FFFF3A BCC ??GetPort_10 1707 numbuf[numcnt] = 0; \ ??GetPort_11: \ 00000108 0020C0E5 STRB R2,[R0, #+0] 1708 return atoi(numbuf); \ 0000010C 0D00A0E1 MOV R0,SP \ 00000110 ........ BL atoi \ 00000114 1680BDE8 POP {R1,R2,R4,PC} ;; return \ ??GetPort_8: \ 00000118 ........ DC32 NATICQ_PORT 1709 1710 } 1711 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 1712 int GetHostsCount(const char *str) 1713 { 1714 char cnt = 1; \ GetHostsCount: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 000000EA B ??GetHostsCount_0 1715 for(;cnt;cnt++) 1716 { 1717 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 1718 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 1719 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 1720 if(!*str) return cnt; \ ??GetHostsCount_5: \ 0000005C 000052E3 CMP R2,#+0 \ 00000060 F2FFFF0A BEQ ??GetHostsCount_3 1721 } \ 00000064 011081E2 ADD R1,R1,#+1 \ 00000068 FF1011E2 ANDS R1,R1,#0xFF \ 0000006C E6FFFF1A BNE ??GetHostsCount_0 1722 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 1EFF2FE1 BX LR ;; return 1723 1724 } 1725 //--------------------------------------------------------------------------- 1726 \ In segment CODE, align 4, keep-with-next 1727 void create_connect(void) 1728 { \ create_connect: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 1729 char hostbuf[128]; 1730 int hostport; 1731 int ***p_res=NULL; 1732 void do_reconnect(void); 1733 SOCK_ADDR sa; 1734 //Устанавливаем соединение 1735 connect_state = 0; \ 00000004 ........ LDR R5,??DataTable55 ;; S_ICONS 1736 int err; 1737 unsigned int ip; 1738 GBS_DelTimer(&reconnect_tmr); 1739 if (!IsGPRSEnabled()) \ 00000008 74829FE5 LDR R8,??create_connect_0 ;; `?` \ 0000000C 94D04DE2 SUB SP,SP,#+148 \ 00000010 0040A0E3 MOV R4,#+0 \ 00000014 00408DE5 STR R4,[SP, #+0] \ 00000018 544185E5 STR R4,[R5, #+340] \ 0000001C 0400A0E3 MOV R0,#+4 \ 00000020 540D80E3 ORR R0,R0,#0x1500 \ 00000024 056080E0 ADD R6,R0,R5 \ 00000028 0600A0E1 MOV R0,R6 \ 0000002C 8C0100EF SWI +396 \ 00000030 E400A0E3 MOV R0,#+228 \ 00000034 4C0D80E3 ORR R0,R0,#0x1300 \ 00000038 057080E0 ADD R7,R0,R5 \ 0000003C A70000EF SWI +167 \ 00000040 000050E3 CMP R0,#+0 \ 00000044 0400001A BNE ??create_connect_1 1740 { 1741 is_gprs_online=0; \ 00000048 744185E5 STR R4,[R5, #+372] 1742 strcpy(logmsg,LG_GRWAITFORGPRS); \ 0000004C 0810A0E1 MOV R1,R8 \ 00000050 0700A0E1 MOV R0,R7 \ 00000054 1A0000EF SWI +26 1743 SMART_REDRAW(); \ 00000058 6A0000EA B ??create_connect_2 1744 return; 1745 } 1746 DNR_ID=0; 1747 *socklasterr()=0; 1748 1749 if(host_counter > GetHostsCount(NATICQ_HOST)-1) host_counter = 0; \ ??create_connect_1: \ 0000005C 24929FE5 LDR R9,??create_connect_0+0x4 ;; NATICQ_HOST 1750 GetHost(host_counter, NATICQ_HOST, hostbuf); 1751 hostport = GetPort(host_counter, NATICQ_HOST); 1752 host_counter++; 1753 1754 // sprintf(hostname, "%s:%d", hostbuf, hostport); 1755 strcpy(hostname, hostbuf); 1756 1757 SMART_REDRAW(); 1758 1759 ip=str2ip(hostbuf); 1760 if (ip!=0xFFFFFFFF) \ 00000060 ........ LDR R10,??DataTable45 ;; do_reconnect \ 00000064 8C4185E5 STR R4,[R5, #+396] \ 00000068 7C8100EF SWI +33148 \ 0000006C 004080E5 STR R4,[R0, #+0] \ 00000070 0900A0E1 MOV R0,R9 \ 00000074 ........ BL GetHostsCount \ 00000078 941195E5 LDR R1,[R5, #+404] \ 0000007C 010040E2 SUB R0,R0,#+1 \ 00000080 010050E1 CMP R0,R1 \ 00000084 944185B5 STRLT R4,[R5, #+404] \ 00000088 940195E5 LDR R0,[R5, #+404] \ 0000008C 14208DE2 ADD R2,SP,#+20 \ 00000090 0910A0E1 MOV R1,R9 \ 00000094 ........ BL GetHost \ 00000098 940195E5 LDR R0,[R5, #+404] \ 0000009C 0910A0E1 MOV R1,R9 \ 000000A0 ........ BL GetPort \ 000000A4 0090A0E1 MOV R9,R0 \ 000000A8 940195E5 LDR R0,[R5, #+404] \ 000000AC 14108DE2 ADD R1,SP,#+20 \ 000000B0 010080E2 ADD R0,R0,#+1 \ 000000B4 940185E5 STR R0,[R5, #+404] \ 000000B8 6400A0E3 MOV R0,#+100 \ 000000BC 4C0D80E3 ORR R0,R0,#0x1300 \ 000000C0 050080E0 ADD R0,R0,R5 \ 000000C4 1A0000EF SWI +26 \ 000000C8 ........ BL SMART_REDRAW \ 000000CC 14008DE2 ADD R0,SP,#+20 \ 000000D0 B70100EF SWI +439 \ 000000D4 04B0E0E1 MVN R11,R4 \ 000000D8 0B0050E1 CMP R0,R11 \ 000000DC 0500000A BEQ ??create_connect_3 1761 { 1762 sa.ip=ip; \ 000000E0 08008DE5 STR R0,[SP, #+8] 1763 strcpy(logmsg,"\nConnect by IP!"); \ 000000E4 181088E2 ADD R1,R8,#+24 \ 000000E8 0700A0E1 MOV R0,R7 \ 000000EC 1A0000EF SWI +26 1764 SMART_REDRAW(); \ 000000F0 ........ BL SMART_REDRAW 1765 goto L_CONNECT; \ 000000F4 2D0000EA B ??create_connect_4 1766 } 1767 strcpy(logmsg,LG_GRSENDDNR); \ ??create_connect_3: \ 000000F8 281088E2 ADD R1,R8,#+40 \ 000000FC 0700A0E1 MOV R0,R7 \ 00000100 1A0000EF SWI +26 1768 SMART_REDRAW(); \ 00000104 ........ BL SMART_REDRAW 1769 err=async_gethostbyname(hostbuf,&p_res,&DNR_ID); //03461351 3<70<19<81 \ 00000108 632F85E2 ADD R2,R5,#+396 \ 0000010C 0D10A0E1 MOV R1,SP \ 00000110 14008DE2 ADD R0,SP,#+20 \ 00000114 B60100EF SWI +438 \ 00000118 0030B0E1 MOVS R3,R0 1770 if (err) \ 0000011C 1300000A BEQ ??create_connect_5 1771 { 1772 if ((err==0xC9)||(err==0xD6)) \ 00000120 C90053E3 CMP R3,#+201 \ 00000124 D6005313 CMPNE R3,#+214 \ 00000128 0600001A BNE ??create_connect_6 1773 { 1774 if (DNR_ID) \ 0000012C 8C0195E5 LDR R0,[R5, #+396] \ 00000130 000050E3 CMP R0,#+0 \ 00000134 0D00000A BEQ ??create_connect_5 1775 { 1776 host_counter--; \ 00000138 940195E5 LDR R0,[R5, #+404] \ 0000013C 010040E2 SUB R0,R0,#+1 \ 00000140 940185E5 STR R0,[R5, #+404] 1777 return; //Ждем готовности DNR \ 00000144 300000EA B ??create_connect_7 1778 } 1779 } 1780 else 1781 { 1782 snprintf(logmsg,255,LG_GRDNRERROR,err); \ ??create_connect_6: \ 00000148 342088E2 ADD R2,R8,#+52 \ 0000014C FF10A0E3 MOV R1,#+255 \ 00000150 0700A0E1 MOV R0,R7 \ 00000154 1B0100EF SWI +283 1783 SMART_REDRAW(); \ 00000158 ........ BL SMART_REDRAW 1784 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*10,do_reconnect); \ ??create_connect_8: \ 0000015C 0A20A0E1 MOV R2,R10 \ 00000160 871EA0E3 MOV R1,#+2160 \ 00000164 0600A0E1 MOV R0,R6 \ 00000168 4D0000EF SWI +77 1785 return; \ 0000016C 260000EA B ??create_connect_7 1786 } 1787 } 1788 if (p_res) \ ??create_connect_5: \ 00000170 00009DE5 LDR R0,[SP, #+0] \ 00000174 000050E3 CMP R0,#+0 \ 00000178 3700000A BEQ ??create_connect_9 1789 { 1790 if (p_res[3]) \ 0000017C 0C0090E5 LDR R0,[R0, #+12] \ 00000180 000050E3 CMP R0,#+0 \ 00000184 3C00000A BEQ ??create_connect_10 1791 { 1792 strcpy(logmsg,LG_GRDNROK); \ 00000188 441088E2 ADD R1,R8,#+68 \ 0000018C 0700A0E1 MOV R0,R7 \ 00000190 1A0000EF SWI +26 1793 SMART_REDRAW(); \ 00000194 ........ BL SMART_REDRAW 1794 DNR_TRIES=0; \ 00000198 904185E5 STR R4,[R5, #+400] 1795 sa.ip=p_res[3][0][0]; \ 0000019C 00109DE5 LDR R1,[SP, #+0] \ 000001A0 0C1091E5 LDR R1,[R1, #+12] \ 000001A4 001091E5 LDR R1,[R1, #+0] \ 000001A8 001091E5 LDR R1,[R1, #+0] \ 000001AC 08108DE5 STR R1,[SP, #+8] 1796 L_CONNECT: 1797 sock=socket(1,1,0); \ ??create_connect_4: \ 000001B0 0020A0E3 MOV R2,#+0 \ 000001B4 0110A0E3 MOV R1,#+1 \ 000001B8 0100A0E1 MOV R0,R1 \ 000001BC 730100EF SWI +371 \ 000001C0 580185E5 STR R0,[R5, #+344] 1798 if (sock!=-1) \ 000001C4 0B0050E1 CMP R0,R11 \ 000001C8 1A00000A BEQ ??create_connect_11 1799 { 1800 sa.family=1; \ 000001CC 0170A0E3 MOV R7,#+1 \ 000001D0 B470CDE1 STRH R7,[SP, #+4] 1801 sa.port=htons(hostport); \ 000001D4 0908A0E1 MOV R0,R9, LSL #+16 \ 000001D8 2008A0E1 MOV R0,R0, LSR #+16 \ 000001DC 7A0100EF SWI +378 \ 000001E0 B600CDE1 STRH R0,[SP, #+6] 1802 // sa.ip=htonl(IP_ADDR(82,207,89,182)); 1803 if (connect(sock,&sa,sizeof(sa))!=-1) \ 000001E4 580195E5 LDR R0,[R5, #+344] \ 000001E8 1020A0E3 MOV R2,#+16 \ 000001EC 04108DE2 ADD R1,SP,#+4 \ 000001F0 740100EF SWI +372 \ 000001F4 0B0050E1 CMP R0,R11 \ 000001F8 0500000A BEQ ??create_connect_12 1804 { 1805 connect_state=1; \ 000001FC 547185E5 STR R7,[R5, #+340] 1806 TOTALRECEIVED=0; \ 00000200 5C4185E5 STR R4,[R5, #+348] 1807 TOTALSENDED=0; \ 00000204 604185E5 STR R4,[R5, #+352] 1808 SMART_REDRAW(); \ ??create_connect_2: \ 00000208 ........ BL SMART_REDRAW \ ??create_connect_7: \ 0000020C 94D08DE2 ADD SP,SP,#+148 \ 00000210 F08FBDE8 POP {R4-R11,PC} 1809 } 1810 else 1811 { 1812 closesocket(sock); \ ??create_connect_12: \ 00000214 580195E5 LDR R0,[R5, #+344] \ 00000218 760100EF SWI +374 1813 sock=-1; \ 0000021C 58B185E5 STR R11,[R5, #+344] 1814 LockSched(); \ 00000220 460100EF SWI +326 1815 ShowMSG(1,(int)LG_MSGCANTCONN); \ 00000224 5C1088E2 ADD R1,R8,#+92 \ 00000228 0100A0E3 MOV R0,#+1 \ 0000022C 480100EF SWI +328 1816 UnlockSched(); \ 00000230 470100EF SWI +327 1817 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*10,do_reconnect); \ 00000234 C8FFFFEA B ??create_connect_8 1818 } 1819 } 1820 else 1821 { 1822 LockSched(); \ ??create_connect_11: \ 00000238 460100EF SWI +326 1823 ShowMSG(1,(int)LG_MSGCANTCRSC); \ 0000023C 781088E2 ADD R1,R8,#+120 \ 00000240 0100A0E3 MOV R0,#+1 \ 00000244 480100EF SWI +328 1824 UnlockSched(); \ 00000248 470100EF SWI +327 1825 //Не осилили создания сокета, закрываем GPRS-сессию 1826 GPRS_OnOff(0,1); \ 0000024C 0110A0E3 MOV R1,#+1 \ 00000250 0000A0E3 MOV R0,#+0 \ 00000254 8E0100EF SWI +398 \ 00000258 EBFFFFEA B ??create_connect_7 1827 } 1828 } 1829 } 1830 else 1831 { 1832 DNR_TRIES--; \ ??create_connect_9: \ 0000025C 900195E5 LDR R0,[R5, #+400] \ 00000260 010040E2 SUB R0,R0,#+1 \ 00000264 900185E5 STR R0,[R5, #+400] 1833 LockSched(); \ 00000268 460100EF SWI +326 1834 ShowMSG(1,(int)LG_MSGHOSTNFND); \ 0000026C A41088E2 ADD R1,R8,#+164 \ 00000270 0100A0E3 MOV R0,#+1 \ 00000274 480100EF SWI +328 1835 UnlockSched(); \ 00000278 470100EF SWI +327 \ ??create_connect_10: \ 0000027C 94D08DE2 ADD SP,SP,#+148 ;; stack cleaning \ 00000280 F08FBDE8 POP {R4-R11,PC} ;; return \ ??create_connect_0: \ 00000284 ........ DC32 `?` \ 00000288 ........ DC32 NATICQ_HOST 1836 } 1837 } 1838 1839 #ifdef SEND_TIMER 1840 GBSTMR send_tmr; 1841 #endif 1842 \ In segment CODE, align 4, keep-with-next 1843 void ClearSendQ(void) 1844 { \ ClearSendQ: \ 00000000 10402DE9 PUSH {R4,LR} 1845 mfree((void *)sendq_p); \ 00000004 ........ LDR R4,??DataTable55 ;; S_ICONS \ 00000008 700194E5 LDR R0,[R4, #+368] \ 0000000C 150000EF SWI +21 1846 sendq_p=NULL; \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 700184E5 STR R0,[R4, #+368] 1847 sendq_l=NULL; \ 00000018 6C0184E5 STR R0,[R4, #+364] 1848 #ifdef SEND_TIMER 1849 GBS_DelTimer(&send_tmr); 1850 #endif 1851 } \ 0000001C 1080BDE8 POP {R4,PC} ;; return 1852 \ In segment CODE, align 4, keep-with-next 1853 void end_socket(void) 1854 { \ end_socket: \ 00000000 10402DE9 PUSH {R4,LR} 1855 if (sock>=0) \ 00000004 ........ LDR R4,??DataTable55 ;; S_ICONS \ 00000008 580194E5 LDR R0,[R4, #+344] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD48 POPMI {R4,PC} 1856 { 1857 shutdown(sock,2); \ 00000014 0210A0E3 MOV R1,#+2 \ 00000018 770100EF SWI +375 1858 closesocket(sock); \ 0000001C 580194E5 LDR R0,[R4, #+344] \ 00000020 760100EF SWI +374 1859 } 1860 #ifdef SEND_TIMER 1861 GBS_DelTimer(&send_tmr); 1862 #endif 1863 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 1864 1865 #ifdef SEND_TIMER 1866 static void resend(void) 1867 { 1868 void SendAnswer(int dummy, TPKT *p); 1869 SUBPROC((void*)SendAnswer,0,0); 1870 } 1871 #endif 1872 \ In segment CODE, align 4, keep-with-next 1873 void SendAnswer(int dummy, TPKT *p) 1874 { \ SendAnswer: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 1875 int i; 1876 int j; 1877 if (connect_state<2) \ 00000004 ........ LDR R4,??DataTable55 ;; S_ICONS \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 540194E5 LDR R0,[R4, #+340] \ 00000010 020050E3 CMP R0,#+2 \ 00000014 020000AA BGE ??SendAnswer_0 1878 { 1879 mfree(p); \ 00000018 0600A0E1 MOV R0,R6 \ 0000001C 150000EF SWI +21 1880 return; \ 00000020 F083BDE8 POP {R4-R9,PC} 1881 } 1882 if (p) \ ??SendAnswer_0: \ 00000024 000056E3 CMP R6,#+0 \ 00000028 2600000A BEQ ??SendAnswer_1 1883 { 1884 j=sizeof(PKT)+p->pkt.data_len; //Размер пакета \ 0000002C B600D6E1 LDRH R0,[R6, #+6] \ 00000030 085080E2 ADD R5,R0,#+8 1885 TOTALSENDED+=j; \ 00000034 600194E5 LDR R0,[R4, #+352] \ 00000038 000085E0 ADD R0,R5,R0 \ 0000003C 600184E5 STR R0,[R4, #+352] 1886 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000040 680194E5 LDR R0,[R4, #+360] \ 00000044 000085E0 ADD R0,R5,R0 \ 00000048 680184E5 STR R0,[R4, #+360] 1887 //Проверяем, не надо ли добавить в очередь 1888 if (sendq_p) \ 0000004C 700194E5 LDR R0,[R4, #+368] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0F00000A BEQ ??SendAnswer_2 1889 { 1890 //Есть очередь, добавляем в нее 1891 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 00000058 6C1194E5 LDR R1,[R4, #+364] \ 0000005C 011085E0 ADD R1,R5,R1 \ 00000060 BA0000EF SWI +186 \ 00000064 700184E5 STR R0,[R4, #+368] 1892 memcpy((char *)sendq_p+sendq_l,p,j); \ 00000068 6C0194E5 LDR R0,[R4, #+364] \ 0000006C 703194E5 LDR R3,[R4, #+368] \ 00000070 0520A0E1 MOV R2,R5 \ 00000074 0610A0E1 MOV R1,R6 \ 00000078 030080E0 ADD R0,R0,R3 \ 0000007C 1E0100EF SWI +286 1893 mfree(p); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 150000EF SWI +21 1894 sendq_l+=j; \ 00000088 6C0194E5 LDR R0,[R4, #+364] \ 0000008C 000085E0 ADD R0,R5,R0 \ 00000090 6C0184E5 STR R0,[R4, #+364] 1895 return; \ 00000094 F083BDE8 POP {R4-R9,PC} 1896 } 1897 sendq_p=p; \ ??SendAnswer_2: \ 00000098 706184E5 STR R6,[R4, #+368] 1898 sendq_l=j; \ 0000009C 6C5184E5 STR R5,[R4, #+364] \ 000000A0 080000EA B ??SendAnswer_1 1899 } 1900 //Отправляем уже существующее в очереди 1901 while((i=sendq_l)!=0) 1902 { 1903 if (i>0x400) i=0x400; 1904 j=send(sock,(void *)sendq_p,i,0); 1905 snprintf(logmsg,255,"send res %d",j); 1906 SMART_REDRAW(); 1907 if (j<0) 1908 { 1909 j=*socklasterr(); 1910 if ((j==0xC9)||(j==0xD6)) 1911 { 1912 //Передали что хотели 1913 strcpy(logmsg,"Send delayed..."); 1914 return; //Видимо, надо ждать сообщения ENIP_BUFFER_FREE 1915 } 1916 else 1917 { 1918 //Ошибка 1919 LockSched(); 1920 ShowMSG(1,(int)"Send error!"); 1921 UnlockSched(); 1922 end_socket(); 1923 return; 1924 } 1925 } 1926 memcpy((void *)sendq_p,(char *)sendq_p+j,sendq_l-=j); //Удалили переданное \ ??SendAnswer_3: \ 000000A4 6C0194E5 LDR R0,[R4, #+364] \ 000000A8 052040E0 SUB R2,R0,R5 \ 000000AC 6C2184E5 STR R2,[R4, #+364] \ 000000B0 700194E5 LDR R0,[R4, #+368] \ 000000B4 001085E0 ADD R1,R5,R0 \ 000000B8 1E0100EF SWI +286 1927 if (j` \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 400E80E3 ORR R0,R0,#0x400 \ 000000E8 000057E1 CMP R7,R0 \ 000000EC 580194E5 LDR R0,[R4, #+344] \ 000000F0 407EA0A3 MOVGE R7,#+1024 \ 000000F4 0030A0E3 MOV R3,#+0 \ 000000F8 0720A0E1 MOV R2,R7 \ 000000FC 790100EF SWI +377 \ 00000100 0050A0E1 MOV R5,R0 \ 00000104 E400A0E3 MOV R0,#+228 \ 00000108 4C0D80E3 ORR R0,R0,#0x1300 \ 0000010C 048080E0 ADD R8,R0,R4 \ 00000110 0530A0E1 MOV R3,R5 \ 00000114 0920A0E1 MOV R2,R9 \ 00000118 FF10A0E3 MOV R1,#+255 \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 1B0100EF SWI +283 \ 00000124 ........ BL SMART_REDRAW \ 00000128 000055E3 CMP R5,#+0 \ 0000012C DCFFFF5A BPL ??SendAnswer_3 \ 00000130 7C8100EF SWI +33148 \ 00000134 005090E5 LDR R5,[R0, #+0] \ 00000138 C90055E3 CMP R5,#+201 \ 0000013C D6005513 CMPNE R5,#+214 \ 00000140 0300001A BNE ??SendAnswer_6 \ 00000144 0C1089E2 ADD R1,R9,#+12 \ 00000148 0800A0E1 MOV R0,R8 \ 0000014C 1A0000EF SWI +26 \ 00000150 F083BDE8 POP {R4-R9,PC} \ ??SendAnswer_6: \ 00000154 460100EF SWI +326 \ 00000158 1C1089E2 ADD R1,R9,#+28 \ 0000015C 0100A0E3 MOV R0,#+1 \ 00000160 480100EF SWI +328 \ 00000164 470100EF SWI +327 \ 00000168 ........ BL end_socket \ 0000016C F083BDE8 POP {R4-R9,PC} 1936 } 1937 mfree((void *)sendq_p); \ ??SendAnswer_4: \ 00000170 0100A0E1 MOV R0,R1 \ 00000174 150000EF SWI +21 1938 sendq_p=NULL; \ 00000178 706184E5 STR R6,[R4, #+368] 1939 } \ 0000017C F083BDE8 POP {R4-R9,PC} ;; return \ ??SendAnswer_5: \ 00000180 ........ DC32 `?` 1940 \ In segment CODE, align 4, keep-with-next 1941 void send_login(int dummy, TPKT *p) 1942 { 1943 connect_state=2; 1944 char rev[16]; 1945 //Кто будет менять в этом месте идентификатор клиента, буду банить на уровне сервера!!! 1946 //А Вова будет банить на форуме! 1947 snprintf(rev,9,"Sie_%04d",__SVN_REVISION__); \ send_login: \ 00000000 88209FE5 LDR R2,??send_login_0 ;; `?` \ 00000004 F0402DE9 PUSH {R4-R7,LR} \ 00000008 ........ LDR R6,??DataTable55 ;; S_ICONS \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C 540186E5 STR R0,[R6, #+340] \ 00000020 3830A0E3 MOV R3,#+56 \ 00000024 703E83E3 ORR R3,R3,#0x700 \ 00000028 0910A0E3 MOV R1,#+9 \ 0000002C 0D00A0E1 MOV R0,SP \ 00000030 1B0100EF SWI +283 1948 1949 TPKT *p2=malloc(sizeof(PKT)+8); \ 00000034 1000A0E3 MOV R0,#+16 \ 00000038 140000EF SWI +20 \ 0000003C 0070A0E1 MOV R7,R0 1950 p2->pkt.uin=UIN; \ 00000040 ........ LDR R0,??DataTable51 ;; UIN 1951 p2->pkt.type=T_SETCLIENT_ID; 1952 p2->pkt.data_len=8; 1953 memcpy(p2->data,rev,8); \ 00000044 0820A0E3 MOV R2,#+8 \ 00000048 000090E5 LDR R0,[R0, #+0] \ 0000004C 0D10A0E1 MOV R1,SP \ 00000050 000087E5 STR R0,[R7, #+0] \ 00000054 2000A0E3 MOV R0,#+32 \ 00000058 B400C7E1 STRH R0,[R7, #+4] \ 0000005C 0800A0E3 MOV R0,#+8 \ 00000060 B600C7E1 STRH R0,[R7, #+6] \ 00000064 080087E2 ADD R0,R7,#+8 \ 00000068 1E0100EF SWI +286 1954 SendAnswer(0,p2); \ 0000006C 0710A0E1 MOV R1,R7 \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 ........ BL SendAnswer 1955 SendAnswer(dummy,p); \ 00000078 0510A0E1 MOV R1,R5 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 ........ BL SendAnswer 1956 RXstate=-(int)sizeof(PKT); \ 00000084 0700E0E3 MVN R0,#+7 \ 00000088 500186E5 STR R0,[R6, #+336] 1957 } \ 0000008C FF80BDE8 POP {R0-R7,PC} ;; return \ ??send_login_0: \ 00000090 ........ DC32 `?` 1958 \ In segment CODE, align 4, keep-with-next 1959 void do_ping(void) 1960 { \ do_ping: \ 00000000 00402DE9 PUSH {LR} 1961 TPKT *pingp=malloc(sizeof(PKT)); \ 00000004 0800A0E3 MOV R0,#+8 \ 00000008 140000EF SWI +20 1962 pingp->pkt.uin=UIN; \ 0000000C ........ LDR R1,??DataTable51 ;; UIN \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 1963 pingp->pkt.type=0; \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C B410C0E1 STRH R1,[R0, #+4] 1964 pingp->pkt.data_len=0; \ 00000020 B610C0E1 STRH R1,[R0, #+6] 1965 SendAnswer(0,pingp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 0040BDE8 POP {LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 1966 } 1967 \ In segment CODE, align 4, keep-with-next 1968 void SendMSGACK(int i) 1969 { \ SendMSGACK: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 1970 TPKT *ackp=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 1971 ackp->pkt.uin=i; \ 00000010 004080E5 STR R4,[R0, #+0] 1972 ackp->pkt.type=T_MSGACK; \ 00000014 1710A0E3 MOV R1,#+23 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 1973 ackp->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 1974 SendAnswer(0,ackp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 1040BDE8 POP {R4,LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 1975 } 1976 \ In segment CODE, align 4, keep-with-next 1977 void RequestXText(unsigned int uin) 1978 { \ RequestXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 1979 TPKT *p=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 1980 p->pkt.uin=uin; \ 00000010 004080E5 STR R4,[R0, #+0] 1981 p->pkt.type=T_XTEXT_REQ; \ 00000014 1810A0E3 MOV R1,#+24 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 1982 p->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 1983 SUBPROC((void *)SendAnswer,0,p); \ 00000024 0020A0E1 MOV R2,R0 \ 00000028 ........ LDR R0,??DataTable82 ;; SendAnswer \ 0000002C 710100EF SWI +369 1984 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 1985 \ In segment CODE, align 4, keep-with-next 1986 void get_answer(void) 1987 { \ get_answer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 1988 void *p; 1989 int i=RXstate; \ 00000004 ........ LDR R5,??DataTable55 ;; S_ICONS \ 00000008 14D04DE2 SUB SP,SP,#+20 \ 0000000C 40DE4DE2 SUB SP,SP,#+1024 1990 int j; 1991 int n; 1992 char rb[1024]; 1993 char *rp=rb; 1994 if (connect_state<2) return; \ 00000010 540195E5 LDR R0,[R5, #+340] \ 00000014 509195E5 LDR R9,[R5, #+336] \ 00000018 14108DE2 ADD R1,SP,#+20 \ 0000001C 00108DE5 STR R1,[SP, #+0] \ 00000020 020050E3 CMP R0,#+2 \ 00000024 020100BA BLT ??get_answer_1 \ 00000028 0A0079E3 CMN R9,#+10 \ 0000002C 0001000A BEQ ??get_answer_1 1995 if (i==EOP) return; 1996 j=recv(sock,rb,sizeof(rb),0); \ 00000030 580195E5 LDR R0,[R5, #+344] \ 00000034 08649FE5 LDR R6,??get_answer_2+0x4 ;; RXbuf \ 00000038 0030A0E3 MOV R3,#+0 \ 0000003C 402EA0E3 MOV R2,#+1024 \ 00000040 780100EF SWI +376 \ 00000044 0080A0E1 MOV R8,R0 \ 00000048 AEA0A0E3 MOV R10,#+174 \ 0000004C DEAC8AE3 ORR R10,R10,#0xDE00 \ 00000050 0E0000EA B ??get_answer_3 1997 while(j>0) 1998 { 1999 if (i<0) 2000 { 2001 //Принимаем заголовок 2002 n=-i; //Требуемое количество байт 2003 if (j=0) 2010 { 2011 //Принимаем тельце ;) 2012 n=RXbuf.pkt.data_len; //Всего в тельце 2013 if (n>16383) 2014 { 2015 //Слишком много 2016 strcpy(logmsg,LG_GRBADPACKET); 2017 end_socket(); 2018 RXstate=EOP; 2019 return; 2020 } 2021 n-=i; //Количество требуемых байт (общая длинна тельца-текущая позиция) 2022 if (n>0) 2023 { 2024 if (jhour*3600+pt->min*60+pt->sec; 2120 s1-=s2; 2121 if (s1<0) s1+=86400; 2122 snprintf(logmsg,255,"Ping %d-%d seconds!",s1,s1+1); 2123 sprintf(ping_txt, "Ping: %dsec",s1); 2124 LockSched(); 2125 if (show_ping==1) 2126 { 2127 ShowMSG(1,(int)logmsg); 2128 show_ping=0; 2129 } 2130 UnlockSched(); 2131 } 2132 break; 2133 case T_LASTPRIVACY: 2134 n=i+sizeof(PKT); \ ??get_answer_4: \ 00000054 0040A0E1 MOV R4,R0 2135 p=malloc(n); \ ??get_answer_5: \ 00000058 140000EF SWI +20 \ 0000005C 00B0A0E1 MOV R11,R0 2136 memcpy(p,&RXbuf,n); \ 00000060 0420A0E1 MOV R2,R4 \ ??get_answer_6: \ 00000064 0610A0E1 MOV R1,R6 \ 00000068 1E0100EF SWI +286 2137 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 0000006C 580195E5 LDR R0,[R5, #+344] \ 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 \ ??get_answer_7: \ 00000088 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning 2138 break; 2139 } 2140 i=-(int)sizeof(PKT); //А может еще есть данные \ ??get_answer_8: \ 0000008C 0790E0E3 MVN R9,#+7 \ ??get_answer_3: \ 00000090 010058E3 CMP R8,#+1 \ 00000094 E50000BA BLT ??get_answer_9 \ 00000098 000059E3 CMP R9,#+0 \ 0000009C 0C00005A BPL ??get_answer_10 \ 000000A0 00109DE5 LDR R1,[SP, #+0] \ 000000A4 004069E2 RSB R4,R9,#+0 \ 000000A8 040058E1 CMP R8,R4 \ 000000AC 0840A0B1 MOVLT R4,R8 \ 000000B0 0420A0E1 MOV R2,R4 \ 000000B4 060089E0 ADD R0,R9,R6 \ 000000B8 080080E2 ADD R0,R0,#+8 \ 000000BC 1E0100EF SWI +286 \ 000000C0 00109DE5 LDR R1,[SP, #+0] \ 000000C4 099084E0 ADD R9,R4,R9 \ 000000C8 048048E0 SUB R8,R8,R4 \ 000000CC 011084E0 ADD R1,R4,R1 \ 000000D0 00108DE5 STR R1,[SP, #+0] \ ??get_answer_10: \ 000000D4 000059E3 CMP R9,#+0 \ 000000D8 ECFFFF4A BMI ??get_answer_3 \ 000000DC B640D6E1 LDRH R4,[R6, #+6] \ 000000E0 E400A0E3 MOV R0,#+228 \ 000000E4 4C0D80E3 ORR R0,R0,#0x1300 \ 000000E8 057080E0 ADD R7,R0,R5 \ 000000EC 400C54E3 CMP R4,#+16384 \ 000000F0 080000BA BLT ??get_answer_11 \ 000000F4 4C139FE5 LDR R1,??get_answer_2+0x8 ;; `?` \ 000000F8 0700A0E1 MOV R0,R7 \ 000000FC 1A0000EF SWI +26 \ 00000100 ........ BL end_socket \ 00000104 0900E0E3 MVN R0,#+9 \ 00000108 500185E5 STR R0,[R5, #+336] \ 0000010C 14D08DE2 ADD SP,SP,#+20 \ 00000110 40DE8DE2 ADD SP,SP,#+1024 \ 00000114 F08FBDE8 POP {R4-R11,PC} \ ??get_answer_11: \ 00000118 094044E0 SUB R4,R4,R9 \ 0000011C 010054E3 CMP R4,#+1 \ 00000120 0B0000BA BLT ??get_answer_12 \ 00000124 00109DE5 LDR R1,[SP, #+0] \ 00000128 040058E1 CMP R8,R4 \ 0000012C 0840A0B1 MOVLT R4,R8 \ 00000130 0420A0E1 MOV R2,R4 \ 00000134 060089E0 ADD R0,R9,R6 \ 00000138 080080E2 ADD R0,R0,#+8 \ 0000013C 1E0100EF SWI +286 \ 00000140 00109DE5 LDR R1,[SP, #+0] \ 00000144 099084E0 ADD R9,R4,R9 \ 00000148 048048E0 SUB R8,R8,R4 \ 0000014C 011084E0 ADD R1,R4,R1 \ 00000150 00108DE5 STR R1,[SP, #+0] \ ??get_answer_12: \ 00000154 B600D6E1 LDRH R0,[R6, #+6] \ 00000158 090050E1 CMP R0,R9 \ 0000015C CBFFFF1A BNE ??get_answer_3 \ 00000160 5C1195E5 LDR R1,[R5, #+348] \ 00000164 080089E2 ADD R0,R9,#+8 \ 00000168 011080E0 ADD R1,R0,R1 \ 0000016C 5C1185E5 STR R1,[R5, #+348] \ 00000170 641195E5 LDR R1,[R5, #+356] \ 00000174 00B0A0E3 MOV R11,#+0 \ 00000178 011080E0 ADD R1,R0,R1 \ 0000017C 641185E5 STR R1,[R5, #+356] \ 00000180 061089E0 ADD R1,R9,R6 \ 00000184 08B0C1E5 STRB R11,[R1, #+8] \ 00000188 B410D6E1 LDRH R1,[R6, #+4] \ 0000018C 094089E2 ADD R4,R9,#+9 \ 00000190 0990A0E3 MOV R9,#+9 \ 00000194 429C89E3 ORR R9,R9,#0x4200 \ 00000198 031041E2 SUB R1,R1,#+3 \ 0000019C 1C0051E3 CMP R1,#+28 \ 000001A0 B9FFFF8A BHI ??get_answer_8 \ 000001A4 012F8FE2 ADR R2,??get_answer_0 \ 000001A8 D12092E1 LDRSB R2,[R2, R1] \ 000001AC 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??get_answer_0: \ 000001B0 4107B63A DC8 +65,+7,+182,+58 \ 000001B4 22B624B6 DC8 +34,+182,+36,+182 \ 000001B8 B6B662B6 DC8 +182,+182,+98,+182 \ 000001BC B6686EB6 DC8 +182,+104,+110,+182 \ 000001C0 732222B6 DC8 +115,+34,+34,+182 \ 000001C4 B6B622B6 DC8 +182,+182,+34,+182 \ 000001C8 B6B6B6B6 DC8 +182,+182,+182,+182 \ 000001CC A8000000 DC8 +168,+0,+0,+0 \ ??get_answer_13: \ 000001D0 0400A0E1 MOV R0,R4 \ 000001D4 140000EF SWI +20 \ 000001D8 00B0A0E1 MOV R11,R0 \ 000001DC 0420A0E1 MOV R2,R4 \ 000001E0 0610A0E1 MOV R1,R6 \ 000001E4 1E0100EF SWI +286 \ 000001E8 580195E5 LDR R0,[R5, #+344] \ 000001EC 0B30A0E1 MOV R3,R11 \ 000001F0 01002DE9 PUSH {R0} \ 000001F4 0020A0E3 MOV R2,#+0 \ 000001F8 0A10A0E1 MOV R1,R10 \ 000001FC 0900A0E1 MOV R0,R9 \ 00000200 000100EF SWI +256 \ 00000204 40029FE5 LDR R0,??get_answer_2+0xC ;; sndStartup \ 00000208 ........ BL Play \ 0000020C 083086E2 ADD R3,R6,#+8 \ 00000210 8A2F8FE2 ADR R2,??get_answer_2 ;; "%s" \ 00000214 FF10A0E3 MOV R1,#+255 \ 00000218 0700A0E1 MOV R0,R7 \ 0000021C 1B0100EF SWI +283 \ 00000220 0300A0E3 MOV R0,#+3 \ 00000224 540185E5 STR R0,[R5, #+340] \ 00000228 940195E5 LDR R0,[R5, #+404] \ 0000022C 010040E2 SUB R0,R0,#+1 \ 00000230 940185E5 STR R0,[R5, #+404] \ 00000234 ........ BL SMART_REDRAW \ 00000238 92FFFFEA B ??get_answer_7 \ ??get_answer_14: \ 0000023C 0400A0E1 MOV R0,R4 \ 00000240 84FFFFEA B ??get_answer_5 \ ??get_answer_15: \ 00000244 0040A0E1 MOV R4,R0 \ 00000248 140000EF SWI +20 \ 0000024C 00B0A0E1 MOV R11,R0 \ 00000250 0420A0E1 MOV R2,R4 \ 00000254 0610A0E1 MOV R1,R6 \ 00000258 1E0100EF SWI +286 \ 0000025C B800D6E1 LDRH R0,[R6, #+8] \ 00000260 E8219FE5 LDR R2,??get_answer_2+0x10 ;; `?` + 12 \ 00000264 FF10A0E3 MOV R1,#+255 \ 00000268 01002DE9 PUSH {R0} \ 0000026C 003096E5 LDR R3,[R6, #+0] \ 00000270 0700A0E1 MOV R0,R7 \ 00000274 1B0100EF SWI +283 \ 00000278 580195E5 LDR R0,[R5, #+344] \ 0000027C 0B30A0E1 MOV R3,R11 \ 00000280 01002DE9 PUSH {R0} \ 00000284 0020A0E3 MOV R2,#+0 \ 00000288 0A10A0E1 MOV R1,R10 \ 0000028C 0900A0E1 MOV R0,R9 \ 00000290 000100EF SWI +256 \ ??get_answer_16: \ 00000294 08D08DE2 ADD SP,SP,#+8 ;; stack cleaning \ 00000298 7BFFFFEA B ??get_answer_8 \ ??get_answer_17: \ 0000029C B0219FE5 LDR R2,??get_answer_2+0x14 ;; `?` + 24 \ 000002A0 083086E2 ADD R3,R6,#+8 \ 000002A4 FF10A0E3 MOV R1,#+255 \ 000002A8 0700A0E1 MOV R0,R7 \ 000002AC 1B0100EF SWI +283 \ 000002B0 ........ BL SMART_REDRAW \ 000002B4 74FFFFEA B ??get_answer_8 \ ??get_answer_18: \ 000002B8 0400A0E1 MOV R0,R4 \ 000002BC 140000EF SWI +20 \ 000002C0 00B0A0E1 MOV R11,R0 \ 000002C4 0420A0E1 MOV R2,R4 \ 000002C8 0610A0E1 MOV R1,R6 \ 000002CC 1E0100EF SWI +286 \ 000002D0 08008BE2 ADD R0,R11,#+8 \ 000002D4 030000EA B ??get_answer_19 \ ??get_answer_20: \ 000002D8 030051E3 CMP R1,#+3 \ 000002DC 2010A0B3 MOVLT R1,#+32 \ 000002E0 0010C0B5 STRBLT R1,[R0, #+0] \ 000002E4 010080E2 ADD R0,R0,#+1 \ ??get_answer_19: \ 000002E8 0010D0E5 LDRB R1,[R0, #+0] \ 000002EC 000051E3 CMP R1,#+0 \ 000002F0 F8FFFF1A BNE ??get_answer_20 \ 000002F4 5C219FE5 LDR R2,??get_answer_2+0x18 ;; `?` + 32 \ 000002F8 080086E2 ADD R0,R6,#+8 \ 000002FC 01002DE9 PUSH {R0} \ 00000300 003096E5 LDR R3,[R6, #+0] \ 00000304 FF10A0E3 MOV R1,#+255 \ 00000308 0700A0E1 MOV R0,R7 \ 0000030C 1B0100EF SWI +283 \ 00000310 5C0195E5 LDR R0,[R5, #+348] \ 00000314 ........ BL SendMSGACK \ 00000318 580195E5 LDR R0,[R5, #+344] \ 0000031C 0B30A0E1 MOV R3,R11 \ 00000320 01002DE9 PUSH {R0} \ 00000324 0020A0E3 MOV R2,#+0 \ 00000328 0A10A0E1 MOV R1,R10 \ 0000032C 0900A0E1 MOV R0,R9 \ 00000330 000100EF SWI +256 \ 00000334 ........ BL SMART_REDRAW \ 00000338 D5FFFFEA B ??get_answer_16 \ ??get_answer_21: \ 0000033C 460100EF SWI +326 \ 00000340 081086E2 ADD R1,R6,#+8 \ 00000344 0100A0E3 MOV R0,#+1 \ 00000348 480100EF SWI +328 \ ??get_answer_22: \ 0000034C 470100EF SWI +327 \ 00000350 4DFFFFEA B ??get_answer_8 \ ??get_answer_23: \ 00000354 0600A0E1 MOV R0,R6 \ 00000358 ........ BL FindContactLOGQByAck \ 0000035C 000050E3 CMP R0,#+0 \ 00000360 0100000A BEQ ??get_answer_24 \ 00000364 F0009FE5 LDR R0,??get_answer_2+0x1C ;; sndMsgSent \ 00000368 ........ BL Play \ ??get_answer_24: \ 0000036C 0A00A0E3 MOV R0,#+10 \ 00000370 140000EF SWI +20 \ 00000374 00B0A0E1 MOV R11,R0 \ 00000378 0A20A0E3 MOV R2,#+10 \ 0000037C 38FFFFEA B ??get_answer_6 \ ??get_answer_25: \ 00000380 04108DE2 ADD R1,SP,#+4 \ 00000384 0C008DE2 ADD R0,SP,#+12 \ 00000388 B40000EF SWI +180 \ 0000038C 0400DDE5 LDRB R0,[SP, #+4] \ 00000390 0520DDE5 LDRB R2,[SP, #+5] \ 00000394 E11EA0E3 MOV R1,#+3600 \ 00000398 3C30A0E3 MOV R3,#+60 \ 0000039C 930202E0 MUL R2,R3,R2 \ 000003A0 912020E0 MLA R0,R1,R0,R2 \ 000003A4 0610DDE5 LDRB R1,[SP, #+6] \ 000003A8 E12EA0E3 MOV R2,#+3600 \ 000003AC 000081E0 ADD R0,R1,R0 \ 000003B0 0810D6E5 LDRB R1,[R6, #+8] \ 000003B4 920101E0 MUL R1,R2,R1 \ 000003B8 A0209FE5 LDR R2,??get_answer_2+0x20 ;; `?` + 44 \ 000003BC 010040E0 SUB R0,R0,R1 \ 000003C0 0910D6E5 LDRB R1,[R6, #+9] \ 000003C4 930101E0 MUL R1,R3,R1 \ 000003C8 010040E0 SUB R0,R0,R1 \ 000003CC 0A10D6E5 LDRB R1,[R6, #+10] \ 000003D0 014050E0 SUBS R4,R0,R1 \ 000003D4 500BA043 MOVMI R0,#+81920 \ 000003D8 460D8043 ORRMI R0,R0,#0x1180 \ 000003DC 04408040 ADDMI R4,R0,R4 \ 000003E0 010084E2 ADD R0,R4,#+1 \ 000003E4 01002DE9 PUSH {R0} \ 000003E8 0430A0E1 MOV R3,R4 \ 000003EC FF10A0E3 MOV R1,#+255 \ 000003F0 0700A0E1 MOV R0,R7 \ 000003F4 1B0100EF SWI +283 \ 000003F8 64109FE5 LDR R1,??get_answer_2+0x24 ;; `?` + 64 \ 000003FC 0420A0E1 MOV R2,R4 \ 00000400 DD0F85E2 ADD R0,R5,#+884 \ 00000404 160000EF SWI +22 \ 00000408 460100EF SWI +326 \ 0000040C C00095E5 LDR R0,[R5, #+192] \ 00000410 04D08DE2 ADD SP,SP,#+4 \ 00000414 010050E3 CMP R0,#+1 \ 00000418 CBFFFF1A BNE ??get_answer_22 \ 0000041C 0710A0E1 MOV R1,R7 \ 00000420 0100A0E3 MOV R0,#+1 \ 00000424 480100EF SWI +328 \ 00000428 C0B085E5 STR R11,[R5, #+192] \ 0000042C C6FFFFEA B ??get_answer_22 2141 } 2142 } 2143 } 2144 RXstate=i; \ ??get_answer_9: \ 00000430 509185E5 STR R9,[R5, #+336] 2145 // GBS_StartTimerProc(&tmr_dorecv,3000,dorecv); 2146 // SMART_REDRAW(); 2147 } \ ??get_answer_1: \ 00000434 14D08DE2 ADD SP,SP,#+20 \ 00000438 40DE8DE2 ADD SP,SP,#+1024 \ 0000043C F08FBDE8 POP {R4-R11,PC} ;; return \ ??get_answer_2: \ 00000440 25730000 DC8 "%s",+0 \ 00000444 ........ DC32 RXbuf \ 00000448 ........ DC32 `?` \ 0000044C ........ DC32 sndStartup \ 00000450 ........ DC32 `?` + 12 \ 00000454 ........ DC32 `?` + 24 \ 00000458 ........ DC32 `?` + 32 \ 0000045C ........ DC32 sndMsgSent \ 00000460 ........ DC32 `?` + 44 \ 00000464 ........ DC32 `?` + 64 2148 \ In segment CODE, align 4, keep-with-next 2149 void AddStringToLog(CLIST *t, int code, char *s, const char *name, unsigned int IDforACK) 2150 { \ AddStringToLog: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 90D04DE2 SUB SP,SP,#+144 \ 00000008 AC809DE5 LDR R8,[SP, #+172] \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0150A0E1 MOV R5,R1 \ 00000014 0270A0E1 MOV R7,R2 \ 00000018 0360A0E1 MOV R6,R3 2151 char hs[128], *lastX; 2152 TTime tt; 2153 TDate d; 2154 GetDateTime(&d,&tt); \ 0000001C 0D10A0E1 MOV R1,SP \ 00000020 08008DE2 ADD R0,SP,#+8 \ 00000024 B40000EF SWI +180 2155 int i; 2156 2157 if (code==3 && NOT_LOG_SAME_XTXT) \ 00000028 030055E3 CMP R5,#+3 \ 0000002C 1600001A BNE ??AddStringToLog_0 \ 00000030 E0019FE5 LDR R0,??AddStringToLog_1 ;; NOT_LOG_SAME_XTXT \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 1200000A BEQ ??AddStringToLog_0 2158 { 2159 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<` \ 00000090 0600A0E1 MOV R0,R6 \ 00000094 01002DE9 PUSH {R0} \ 00000098 1000DDE5 LDRB R0,[SP, #+16] \ 0000009C 0920A0E1 MOV R2,R9 \ 000000A0 7F10A0E3 MOV R1,#+127 \ 000000A4 01002DE9 PUSH {R0} \ 000000A8 1500DDE5 LDRB R0,[SP, #+21] \ 000000AC 01002DE9 PUSH {R0} \ 000000B0 0D00DDE5 LDRB R0,[SP, #+13] \ 000000B4 01002DE9 PUSH {R0} \ 000000B8 1030DDE5 LDRB R3,[SP, #+16] \ 000000BC 20008DE2 ADD R0,SP,#+32 \ 000000C0 1B0100EF SWI +283 2166 if(code != 3 || LOG_XTXT) //Нужно сохранять иксстатус \ 000000C4 030055E3 CMP R5,#+3 \ 000000C8 10D08DE2 ADD SP,SP,#+16 \ 000000CC 0300001A BNE ??AddStringToLog_4 \ 000000D0 48019FE5 LDR R0,??AddStringToLog_1+0x8 ;; LOG_XTXT \ 000000D4 000090E5 LDR R0,[R0, #+0] \ 000000D8 000050E3 CMP R0,#+0 \ 000000DC 0400000A BEQ ??AddStringToLog_5 2167 Add2History(t, hs, s, code); // Запись хистори \ ??AddStringToLog_4: \ 000000E0 0530A0E1 MOV R3,R5 \ 000000E4 0720A0E1 MOV R2,R7 \ 000000E8 10108DE2 ADD R1,SP,#+16 \ 000000EC 0400A0E1 MOV R0,R4 \ 000000F0 ........ _BLF Add2History,??Add2History??rA 2168 LOGQ *p=NewLOGQ(s); \ ??AddStringToLog_5: \ 000000F4 0700A0E1 MOV R0,R7 \ 000000F8 ........ BL NewLOGQ \ 000000FC 0070A0E1 MOV R7,R0 2169 snprintf(p->hdr,79,"%02d:%02d %02d-%02d %s:",tt.hour,tt.min,d.day,d.month,name); \ 00000100 40002DE9 PUSH {R6} \ 00000104 1000DDE5 LDRB R0,[SP, #+16] \ 00000108 1C2089E2 ADD R2,R9,#+28 \ 0000010C 4F10A0E3 MOV R1,#+79 \ 00000110 01002DE9 PUSH {R0} \ 00000114 1500DDE5 LDRB R0,[SP, #+21] \ 00000118 01002DE9 PUSH {R0} \ 0000011C 0D00DDE5 LDRB R0,[SP, #+13] \ 00000120 01002DE9 PUSH {R0} \ 00000124 1030DDE5 LDRB R3,[SP, #+16] \ 00000128 100087E2 ADD R0,R7,#+16 \ 0000012C 1B0100EF SWI +283 2170 p->type=code; \ 00000130 0C5087E5 STR R5,[R7, #+12] 2171 p->ID=IDforACK; //0-32767 \ 00000134 088087E5 STR R8,[R7, #+8] 2172 i=AddLOGQ(&t->log,p); \ 00000138 0710A0E1 MOV R1,R7 \ 0000013C 700084E2 ADD R0,R4,#+112 \ 00000140 ........ BL AddLOGQ \ 00000144 0060A0E1 MOV R6,R0 \ 00000148 150056E3 CMP R6,#+21 \ 0000014C 10D08DE2 ADD SP,SP,#+16 \ 00000150 090000BA BLT ??AddStringToLog_6 2173 while(i>MAXLOGMSG) 2174 { 2175 if (t->log==t->last_log) t->last_log=t->last_log->next; \ ??AddStringToLog_7: \ 00000154 780094E5 LDR R0,[R4, #+120] \ 00000158 701094E5 LDR R1,[R4, #+112] 2176 RemoveLOGQ(&t->log,t->log); 2177 i--; \ 0000015C 016046E2 SUB R6,R6,#+1 \ 00000160 000051E1 CMP R1,R0 \ 00000164 00009005 LDREQ R0,[R0, #+0] \ 00000168 78008405 STREQ R0,[R4, #+120] \ 0000016C 700084E2 ADD R0,R4,#+112 \ 00000170 ........ BL RemoveLOGQ 2178 } \ 00000174 150056E3 CMP R6,#+21 \ 00000178 F5FFFFAA BGE ??AddStringToLog_7 2179 t->msg_count=i; \ ??AddStringToLog_6: \ 0000017C 806084E5 STR R6,[R4, #+128] 2180 if (!t->last_log) t->last_log=p; \ 00000180 780094E5 LDR R0,[R4, #+120] 2181 if (code==3) \ 00000184 ........ LDR R6,??DataTable55 ;; S_ICONS \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 78708405 STREQ R7,[R4, #+120] \ 00000190 0170A0E3 MOV R7,#+1 \ 00000194 030055E3 CMP R5,#+3 \ 00000198 0D00001A BNE ??AddStringToLog_8 2182 { 2183 if (edchat_id) \ 0000019C 800196E5 LDR R0,[R6, #+384] \ 000001A0 000050E3 CMP R0,#+0 \ 000001A4 1600000A BEQ ??AddStringToLog_9 2184 { 2185 void *data=FindGUIbyId(edchat_id,NULL); \ 000001A8 800196E5 LDR R0,[R6, #+384] \ 000001AC 0010A0E3 MOV R1,#+0 \ 000001B0 090200EF SWI +521 2186 if (data) \ 000001B4 000050E3 CMP R0,#+0 \ 000001B8 1100000A BEQ ??AddStringToLog_9 2187 { 2188 EDCHAT_STRUCT *ed_struct; 2189 ed_struct=EDIT_GetUserPointer(data); \ 000001BC DF0100EF SWI +479 2190 if (ed_struct) \ 000001C0 000050E3 CMP R0,#+0 \ 000001C4 0E00000A BEQ ??AddStringToLog_9 2191 { 2192 if (ed_struct->ed_contact==t) \ 000001C8 000090E5 LDR R0,[R0, #+0] \ 000001CC 040050E1 CMP R0,R4 \ 000001D0 0B00001A BNE ??AddStringToLog_9 2193 { 2194 goto L_INC; 2195 } 2196 } 2197 } 2198 } 2199 goto L_NOINC; 2200 } 2201 L_INC: 2202 if (!t->isunread) total_unread++; \ ??AddStringToLog_8: \ 000001D4 580094E5 LDR R0,[R4, #+88] \ 000001D8 000050E3 CMP R0,#+0 \ 000001DC 8C009605 LDREQ R0,[R6, #+140] \ 000001E0 01008002 ADDEQ R0,R0,#+1 \ 000001E4 8C008605 STREQ R0,[R6, #+140] 2203 #ifdef EVILFOX 2204 t->unread_msg++; \ 000001E8 640094E5 LDR R0,[R4, #+100] \ 000001EC 010080E2 ADD R0,R0,#+1 \ 000001F0 640084E5 STR R0,[R4, #+100] 2205 total_unread2++; \ 000001F4 940096E5 LDR R0,[R6, #+148] \ 000001F8 010080E2 ADD R0,R0,#+1 \ 000001FC 940086E5 STR R0,[R6, #+148] 2206 #endif 2207 t->isunread=1; \ 00000200 587084E5 STR R7,[R4, #+88] 2208 L_NOINC: 2209 ChangeContactPos(t); \ ??AddStringToLog_9: \ 00000204 0400A0E1 MOV R0,R4 \ 00000208 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2210 time_draw=1; \ 0000020C B87086E5 STR R7,[R6, #+184] 2211 } \ ??AddStringToLog_3: \ 00000210 90D08DE2 ADD SP,SP,#+144 ;; stack cleaning \ 00000214 F083BDE8 POP {R4-R9,PC} ;; return \ ??AddStringToLog_1: \ 00000218 ........ DC32 NOT_LOG_SAME_XTXT \ 0000021C ........ DC32 `?` \ 00000220 ........ DC32 LOG_XTXT 2212 2213 void ParseAnswer(WSHDR *ws, const char *s); 2214 2215 int time_to_stop_t9; 2216 \ In segment CODE, align 4, keep-with-next 2217 void ParseXStatusText(WSHDR *ws, const char *s, int color) 2218 { \ ParseXStatusText: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 2219 int c; 2220 int flag=0; \ 00000010 0070A0E3 MOV R7,#+0 2221 CutWSTR(ws,0); \ 00000014 0010A0E3 MOV R1,#+0 \ 00000018 260100EF SWI +294 2222 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} 2223 wsAppendChar(ws,0xE008); \ 0000002C 0810A0E3 MOV R1,#+8 \ 00000030 E01C81E3 ORR R1,R1,#0xE000 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1C0000EF SWI +28 2224 wsAppendChar(ws,color); \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1C0000EF SWI +28 2225 wsAppendChar(ws,0xE013); \ 00000048 1310A0E3 MOV R1,#+19 \ 0000004C E01C81E3 ORR R1,R1,#0xE000 \ 00000050 0A0000EA B ??ParseXStatusText_0 2226 while((c=*s++)) 2227 { 2228 if (c==13) \ ??ParseXStatusText_1: \ 00000054 0D0050E3 CMP R0,#+13 2229 { 2230 if (!flag) \ 00000058 00005703 CMPEQ R7,#+0 \ 0000005C 0500001A BNE ??ParseXStatusText_2 2231 { 2232 flag=1; \ 00000060 0170A0E3 MOV R7,#+1 2233 wsAppendChar(ws,0xE012); \ 00000064 1210A0E3 MOV R1,#+18 \ 00000068 E01C81E3 ORR R1,R1,#0xE000 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 1C0000EF SWI +28 2234 c=' '; \ 00000074 2000A0E3 MOV R0,#+32 2235 } 2236 } 2237 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 2238 } \ 00000088 ........ LDRB R0,[R5], #+1 \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 EFFFFF1A BNE ??ParseXStatusText_1 \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return 2239 } 2240 //Добавление итемов в чат при получении нового сообщения \ In segment CODE, align 4, keep-with-next 2241 void AddMsgToChat(void *data) 2242 { \ AddMsgToChat: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 40D04DE2 SUB SP,SP,#+64 2243 LOGQ *p; 2244 EDITCONTROL ec; 2245 EDITC_OPTIONS ec_options; 2246 EDCHAT_STRUCT *ed_struct; 2247 int j; 2248 int color, font, type; 2249 int zc; 2250 if (!data) return; \ 00000008 000050E3 CMP R0,#+0 \ 0000000C C900000A BEQ ??AddMsgToChat_0 2251 ed_struct=EDIT_GetUserPointer(data); \ 00000010 DF0100EF SWI +479 \ 00000014 0060B0E1 MOVS R6,R0 2252 if (!ed_struct) return; \ 00000018 C600000A BEQ ??AddMsgToChat_0 2253 if (!ed_struct->ed_contact->isunread) return; \ 0000001C 000096E5 LDR R0,[R6, #+0] \ 00000020 581090E5 LDR R1,[R0, #+88] \ 00000024 000051E3 CMP R1,#+0 \ 00000028 C200000A BEQ ??AddMsgToChat_0 2254 2255 2256 p=ed_struct->ed_contact->last_log; \ 0000002C 787090E5 LDR R7,[R0, #+120] 2257 if (p) \ 00000030 ........ LDR R8,??DataTable86 ;; S_ICONS \ 00000034 000057E3 CMP R7,#+0 \ 00000038 A800000A BEQ ??AddMsgToChat_1 2258 { 2259 while(p) 2260 { 2261 font = ED_H_FONT_SIZE; 2262 if ((zc=p->acked&3)) \ ??AddMsgToChat_2: \ 0000003C ........ LDR R2,??DataTable57 ;; ED_X_FONT_SIZE \ 00000040 ........ LDR R0,??DataTable78 ;; ED_H_FONT_SIZE \ 00000044 002092E5 LDR R2,[R2, #+0] \ 00000048 ........ LDR R1,??DataTable59 ;; 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,??DataTable60 ;; O_ED_X_FONT_SIZE \ 00000060 030010E2 ANDS R0,R0,#0x3 \ 00000064 009091E5 LDR R9,[R1, #+0] \ 00000068 ........ LDR R1,??DataTable61 ;; O_X_COLOR \ 0000006C 005091E5 LDR R5,[R1, #+0] \ 00000070 ........ LDR R1,??DataTable76 ;; I_COLOR \ 00000074 00B091E5 LDR R11,[R1, #+0] \ 00000078 0300000A BEQ ??AddMsgToChat_3 2263 { 2264 if (zc==1) \ 0000007C 010050E3 CMP R0,#+1 \ 00000080 1E00001A BNE ??AddMsgToChat_4 2265 color=ACK_COLOR; //Зеленый \ 00000084 ........ LDR R0,??DataTable72 ;; ACK_COLOR \ 00000088 1B0000EA B ??AddMsgToChat_5 2266 else 2267 color=I_COLOR; 2268 } 2269 else 2270 { 2271 if (p->ID==0xFFFFFFFF) \ ??AddMsgToChat_3: \ 0000008C 080097E5 LDR R0,[R7, #+8] \ 00000090 010070E3 CMN R0,#+1 \ 00000094 1700001A BNE ??AddMsgToChat_6 2272 { 2273 type = p->type&0x0F; \ 00000098 0C0097E5 LDR R0,[R7, #+12] \ 0000009C 0F1000E2 AND R1,R0,#0xF 2274 if(p->type&0x10) \ 000000A0 100010E3 TST R0,#0x10 \ 000000A4 0B00000A BEQ ??AddMsgToChat_7 2275 { 2276 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 000000A8 010051E3 CMP R1,#+1 \ 000000AC ........ LDREQ R0,??DataTable74 ;; O_I_COLOR \ 000000B0 0400000A BEQ ??AddMsgToChat_8 \ 000000B4 030051E3 CMP R1,#+3 \ 000000B8 05B0A001 MOVEQ R11,R5 \ 000000BC 09A0A001 MOVEQ R10,R9 \ 000000C0 0E00000A BEQ ??AddMsgToChat_4 \ 000000C4 ........ LDR R0,??DataTable73 ;; O_TO_COLOR \ ??AddMsgToChat_8: \ 000000C8 00B090E5 LDR R11,[R0, #+0] \ 000000CC ........ LDR R0,??DataTable79 ;; O_ED_H_FONT_SIZE \ 000000D0 00A090E5 LDR R10,[R0, #+0] \ 000000D4 090000EA B ??AddMsgToChat_4 2277 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 2278 } 2279 else 2280 { 2281 color = (type==1)?I_COLOR:((type==3)?X_COLOR:TO_COLOR); \ ??AddMsgToChat_7: \ 000000D8 010051E3 CMP R1,#+1 \ 000000DC 0700000A BEQ ??AddMsgToChat_4 \ 000000E0 030051E3 CMP R1,#+3 \ 000000E4 04B0A001 MOVEQ R11,R4 \ 000000E8 02A0A001 MOVEQ R10,R2 \ 000000EC 0300000A BEQ ??AddMsgToChat_4 \ 000000F0 ........ LDR R0,??DataTable75 ;; TO_COLOR \ 000000F4 000000EA B ??AddMsgToChat_5 2282 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 2283 } 2284 } 2285 else 2286 color=UNACK_COLOR; //Серый \ ??AddMsgToChat_6: \ 000000F8 ........ LDR R0,??DataTable77 ;; UNACK_COLOR \ ??AddMsgToChat_5: \ 000000FC 00B090E5 LDR R11,[R0, #+0] 2287 } 2288 PrepareEditControl(&ec); \ ??AddMsgToChat_4: \ 00000100 14008DE2 ADD R0,SP,#+20 \ 00000104 640100EF SWI +356 2289 if ((p->type&0x0F)!=3) \ 00000108 0C0097E5 LDR R0,[R7, #+12] \ 0000010C 0F0000E2 AND R0,R0,#0xF \ 00000110 030050E3 CMP R0,#+3 \ 00000114 0800000A BEQ ??AddMsgToChat_9 2290 { 2291 ascii2ws(ews,p->hdr); \ 00000118 1C0198E5 LDR R0,[R8, #+284] \ 0000011C 101087E2 ADD R1,R7,#+16 \ 00000120 ........ _BLF ascii2ws,??ascii2ws??rA 2292 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000124 1C3198E5 LDR R3,[R8, #+284] \ 00000128 4020A0E3 MOV R2,#+64 \ 0000012C 000093E5 LDR R0,[R3, #+0] \ 00000130 B000D0E1 LDRH R0,[R0, #+0] \ 00000134 01002DE9 PUSH {R0} \ 00000138 030000EA B ??AddMsgToChat_10 2293 } 2294 else 2295 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??AddMsgToChat_9: \ 0000013C 0000A0E3 MOV R0,#+0 \ 00000140 01002DE9 PUSH {R0} \ 00000144 1C3198E5 LDR R3,[R8, #+284] \ 00000148 2020A0E3 MOV R2,#+32 \ ??AddMsgToChat_10: \ 0000014C 0110A0E3 MOV R1,#+1 \ 00000150 18008DE2 ADD R0,SP,#+24 \ 00000154 650100EF SWI +357 \ 00000158 04D08DE2 ADD SP,SP,#+4 2296 PrepareEditCOptions(&ec_options); \ 0000015C 04008DE2 ADD R0,SP,#+4 \ 00000160 C80100EF SWI +456 2297 SetPenColorToEditCOptions(&ec_options,color); \ 00000164 0B10A0E1 MOV R1,R11 \ 00000168 04008DE2 ADD R0,SP,#+4 \ 0000016C CC0100EF SWI +460 2298 SetFontToEditCOptions(&ec_options,font); \ 00000170 0A10A0E1 MOV R1,R10 \ 00000174 04008DE2 ADD R0,SP,#+4 \ 00000178 CA0100EF SWI +458 2299 CopyOptionsToEditControl(&ec,&ec_options); \ 0000017C 04108DE2 ADD R1,SP,#+4 \ 00000180 14008DE2 ADD R0,SP,#+20 \ 00000184 CE0100EF SWI +462 2300 //AddEditControlToEditQend(eq,&ec,ma); 2301 EDIT_InsertEditControl(data,ed_struct->ed_answer-1,&ec); \ 00000188 080096E5 LDR R0,[R6, #+8] \ 0000018C 14208DE2 ADD R2,SP,#+20 \ 00000190 011040E2 SUB R1,R0,#+1 \ 00000194 40009DE5 LDR R0,[SP, #+64] \ 00000198 D20100EF SWI +466 2302 ed_struct->ed_answer++; \ 0000019C 080096E5 LDR R0,[R6, #+8] \ 000001A0 010080E2 ADD R0,R0,#+1 \ 000001A4 080086E5 STR R0,[R6, #+8] 2303 if ((p->type&0x0F)!=3) \ 000001A8 0C0097E5 LDR R0,[R7, #+12] \ 000001AC 0F1000E2 AND R1,R0,#0xF \ 000001B0 030051E3 CMP R1,#+3 \ 000001B4 0300000A BEQ ??AddMsgToChat_11 2304 { 2305 ParseAnswer(ews,p->text); \ 000001B8 1C0198E5 LDR R0,[R8, #+284] \ 000001BC 601087E2 ADD R1,R7,#+96 \ 000001C0 ........ BL ParseAnswer \ 000001C4 050000EA B ??AddMsgToChat_12 2306 } 2307 else 2308 { 2309 ParseXStatusText(ews, p->text, (p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_11: \ 000001C8 100010E3 TST R0,#0x10 \ 000001CC 1C0198E5 LDR R0,[R8, #+284] \ 000001D0 0520A011 MOVNE R2,R5 \ 000001D4 0420A001 MOVEQ R2,R4 \ 000001D8 601087E2 ADD R1,R7,#+96 \ 000001DC ........ BL ParseXStatusText 2310 } 2311 PrepareEditControl(&ec); \ ??AddMsgToChat_12: \ 000001E0 14008DE2 ADD R0,SP,#+20 \ 000001E4 640100EF SWI +356 2312 ConstructEditControl(&ec, 2313 ECT_NORMAL_TEXT, 2314 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 2315 ews,ews->wsbody[0]); \ 000001E8 1C3198E5 LDR R3,[R8, #+284] \ 000001EC 000093E5 LDR R0,[R3, #+0] \ 000001F0 B010D0E1 LDRH R1,[R0, #+0] \ 000001F4 000051E3 CMP R1,#+0 \ 000001F8 0100A0E1 MOV R0,R1 \ 000001FC 01002DE9 PUSH {R0} \ 00000200 812DA013 MOVNE R2,#+8256 \ 00000204 2020A003 MOVEQ R2,#+32 \ 00000208 0310A0E3 MOV R1,#+3 \ 0000020C 18008DE2 ADD R0,SP,#+24 \ 00000210 650100EF SWI +357 2316 PrepareEditCOptions(&ec_options); \ 00000214 08008DE2 ADD R0,SP,#+8 \ 00000218 C80100EF SWI +456 2317 //#ifdef M75 2318 if ((p->type&0x0F)!=3) \ 0000021C 0C0097E5 LDR R0,[R7, #+12] \ 00000220 04D08DE2 ADD SP,SP,#+4 \ 00000224 0F1000E2 AND R1,R0,#0xF \ 00000228 030051E3 CMP R1,#+3 \ 0000022C 0400000A BEQ ??AddMsgToChat_13 2319 { 2320 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000230 100010E3 TST R0,#0x10 \ 00000234 ........ LDRNE R0,??DataTable69 ;; O_ED_FONT_SIZE \ 00000238 ........ LDREQ R0,??DataTable70 ;; ED_FONT_SIZE \ 0000023C 001090E5 LDR R1,[R0, #+0] \ 00000240 080000EA B ??AddMsgToChat_14 2321 } 2322 else 2323 { 2324 SetPenColorToEditCOptions(&ec_options,(p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_13: \ 00000244 100010E3 TST R0,#0x10 \ 00000248 0510A011 MOVNE R1,R5 \ 0000024C 0410A001 MOVEQ R1,R4 \ 00000250 04008DE2 ADD R0,SP,#+4 \ 00000254 CC0100EF SWI +460 2325 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_X_FONT_SIZE:ED_X_FONT_SIZE); \ 00000258 0C0097E5 LDR R0,[R7, #+12] \ 0000025C 100010E3 TST R0,#0x10 \ 00000260 00109D05 LDREQ R1,[SP, #+0] \ 00000264 0910A011 MOVNE R1,R9 \ ??AddMsgToChat_14: \ 00000268 04008DE2 ADD R0,SP,#+4 \ 0000026C CA0100EF SWI +458 2326 } 2327 //#else 2328 // SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 2329 //#endif 2330 CopyOptionsToEditControl(&ec,&ec_options); \ 00000270 04108DE2 ADD R1,SP,#+4 \ 00000274 14008DE2 ADD R0,SP,#+20 \ 00000278 CE0100EF SWI +462 2331 EDIT_InsertEditControl(data,ed_struct->ed_answer-1,&ec); \ 0000027C 080096E5 LDR R0,[R6, #+8] \ 00000280 14208DE2 ADD R2,SP,#+20 \ 00000284 011040E2 SUB R1,R0,#+1 \ 00000288 40009DE5 LDR R0,[SP, #+64] \ 0000028C D20100EF SWI +466 2332 ed_struct->ed_answer++; \ 00000290 080096E5 LDR R0,[R6, #+8] \ 00000294 010080E2 ADD R0,R0,#+1 \ 00000298 080086E5 STR R0,[R6, #+8] 2333 p=p->next; \ 0000029C 007097E5 LDR R7,[R7, #+0] 2334 } \ 000002A0 000057E3 CMP R7,#+0 \ 000002A4 64FFFF1A BNE ??AddMsgToChat_2 2335 j=((ed_struct->ed_contact->msg_count+1)*2); //Ожидаемый ed_answer \ 000002A8 001096E5 LDR R1,[R6, #+0] \ 000002AC 801091E5 LDR R1,[R1, #+128] \ 000002B0 011081E2 ADD R1,R1,#+1 \ 000002B4 8140A0E1 LSL R4,R1,#+1 \ 000002B8 000054E1 CMP R4,R0 \ 000002BC 070000AA BGE ??AddMsgToChat_1 2336 while(jed_answer) 2337 { 2338 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??AddMsgToChat_15: \ 000002C0 040096E5 LDR R0,[R6, #+4] \ 000002C4 0110A0E3 MOV R1,#+1 \ 000002C8 D10100EF SWI +465 2339 ed_struct->ed_answer--; \ 000002CC 080096E5 LDR R0,[R6, #+8] \ 000002D0 010040E2 SUB R0,R0,#+1 \ 000002D4 080086E5 STR R0,[R6, #+8] 2340 } \ 000002D8 000054E1 CMP R4,R0 \ 000002DC F7FFFFBA BLT ??AddMsgToChat_15 2341 } 2342 ed_struct->ed_contact->last_log=NULL; \ ??AddMsgToChat_1: \ 000002E0 000096E5 LDR R0,[R6, #+0] \ 000002E4 0040A0E3 MOV R4,#+0 \ 000002E8 784080E5 STR R4,[R0, #+120] 2343 if (IsGuiOnTop(edchat_id)) \ 000002EC 800198E5 LDR R0,[R8, #+384] \ 000002F0 350100EF SWI +309 \ 000002F4 000050E3 CMP R0,#+0 \ 000002F8 0300000A BEQ ??AddMsgToChat_16 2344 total_unread--; \ 000002FC 8C0098E5 LDR R0,[R8, #+140] \ 00000300 010040E2 SUB R0,R0,#+1 \ 00000304 8C0088E5 STR R0,[R8, #+140] \ 00000308 020000EA B ??AddMsgToChat_17 2345 else 2346 ed_struct->requested_decrement_total_unread++; \ ??AddMsgToChat_16: \ 0000030C 0C0096E5 LDR R0,[R6, #+12] \ 00000310 010080E2 ADD R0,R0,#+1 \ 00000314 0C0086E5 STR R0,[R6, #+12] 2347 ed_struct->ed_contact->isunread=0; \ ??AddMsgToChat_17: \ 00000318 000096E5 LDR R0,[R6, #+0] \ 0000031C 584080E5 STR R4,[R0, #+88] 2348 #ifdef EVILFOX 2349 total_unread2=total_unread2-ed_struct->ed_contact->unread_msg; \ 00000320 941098E5 LDR R1,[R8, #+148] \ 00000324 642090E5 LDR R2,[R0, #+100] \ 00000328 021041E0 SUB R1,R1,R2 \ 0000032C 941088E5 STR R1,[R8, #+148] 2350 ed_struct->ed_contact->unread_msg=0; \ 00000330 644080E5 STR R4,[R0, #+100] 2351 #endif 2352 ChangeContactPos(ed_struct->ed_contact); \ 00000334 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2353 // EDIT_SetFocus(data,ed_struct->ed_answer); 2354 } \ ??AddMsgToChat_0: \ 00000338 44D08DE2 ADD SP,SP,#+68 ;; stack cleaning \ 0000033C F08FBDE8 POP {R4-R11,PC} ;; return 2355 2356 //Рисуем подтверждения непосредственно \ In segment CODE, align 4, keep-with-next 2357 void DrawAck(void *data) 2358 { \ DrawAck: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 2359 LOGQ *p; 2360 EDITCONTROL ec; 2361 EDITC_OPTIONS ec_options; 2362 EDCHAT_STRUCT *ed_struct; 2363 int j; 2364 int color; 2365 int dorefresh=0; \ 0000000C 0070A0E3 MOV R7,#+0 2366 if (!data) return; \ 00000010 4C00000A BEQ ??DrawAck_0 2367 ed_struct=EDIT_GetUserPointer(data); \ 00000014 DF0100EF SWI +479 2368 if (!ed_struct) return; \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 4900000A BEQ ??DrawAck_0 2369 p=ed_struct->ed_contact->log; \ 00000020 001090E5 LDR R1,[R0, #+0] 2370 j=ed_struct->ed_answer; 2371 j-=(ed_struct->ed_contact->msg_count*2)+1; //Номер собственно хедера верхнего итема \ 00000024 080090E5 LDR R0,[R0, #+8] \ 00000028 705091E5 LDR R5,[R1, #+112] \ 0000002C 801091E5 LDR R1,[R1, #+128] \ 00000030 810040E0 SUB R0,R0,R1, LSL #+1 \ 00000034 016040E2 SUB R6,R0,#+1 \ 00000038 0F0000EA B ??DrawAck_1 2372 while(p) 2373 { 2374 if (j>=1) //Пока возможно лишнее 2375 { 2376 if (!(p->acked&4)) 2377 { 2378 ExtractEditControl(data,j,&ec); 2379 PrepareEditCOptions(&ec_options); 2380 if (p->acked) 2381 { 2382 if (p->acked==1) 2383 color=ACK_COLOR; //Зеленый 2384 else 2385 color=I_COLOR; 2386 } 2387 else 2388 { 2389 if (p->ID==0xFFFFFFFF) 2390 color=(p->type&0x10)?(((p->type&0x0F)==1)?O_I_COLOR:O_TO_COLOR):(((p->type&0x0F)==1)?I_COLOR:TO_COLOR); 2391 else 2392 color=UNACK_COLOR; //Серый 2393 } 2394 SetPenColorToEditCOptions(&ec_options,color/*p->type==1?I_COLOR:TO_COLOR*/); 2395 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_H_FONT_SIZE:ED_H_FONT_SIZE); \ ??DrawAck_2: \ 0000003C 001090E5 LDR R1,[R0, #+0] \ 00000040 0D00A0E1 MOV R0,SP \ 00000044 CA0100EF SWI +458 2396 CopyOptionsToEditControl(&ec,&ec_options); \ 00000048 0D10A0E1 MOV R1,SP \ 0000004C 10008DE2 ADD R0,SP,#+16 \ 00000050 CE0100EF SWI +462 2397 StoreEditControl(data,j,&ec); \ 00000054 10208DE2 ADD R2,SP,#+16 \ 00000058 0610A0E1 MOV R1,R6 \ 0000005C 0400A0E1 MOV R0,R4 \ 00000060 6A0100EF SWI +362 2398 p->acked|=4; //Обработали \ 00000064 040095E5 LDR R0,[R5, #+4] 2399 dorefresh=1; \ 00000068 0170A0E3 MOV R7,#+1 \ 0000006C 040080E3 ORR R0,R0,#0x4 \ 00000070 040085E5 STR R0,[R5, #+4] 2400 } 2401 } 2402 j+=2; 2403 p=p->next; \ ??DrawAck_3: \ 00000074 005095E5 LDR R5,[R5, #+0] \ 00000078 026086E2 ADD R6,R6,#+2 \ ??DrawAck_1: \ 0000007C 000055E3 CMP R5,#+0 \ 00000080 2900000A BEQ ??DrawAck_4 \ 00000084 010056E3 CMP R6,#+1 \ 00000088 F9FFFFBA BLT ??DrawAck_3 \ 0000008C 040095E5 LDR R0,[R5, #+4] \ 00000090 040010E3 TST R0,#0x4 \ 00000094 F6FFFF1A BNE ??DrawAck_3 \ 00000098 10208DE2 ADD R2,SP,#+16 \ 0000009C 0610A0E1 MOV R1,R6 \ 000000A0 0400A0E1 MOV R0,R4 \ 000000A4 690100EF SWI +361 \ 000000A8 0D00A0E1 MOV R0,SP \ 000000AC C80100EF SWI +456 \ 000000B0 040095E5 LDR R0,[R5, #+4] \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 0300000A BEQ ??DrawAck_5 \ 000000BC 010050E3 CMP R0,#+1 \ 000000C0 ........ LDRNE R0,??DataTable76 ;; I_COLOR \ 000000C4 ........ LDREQ R0,??DataTable72 ;; ACK_COLOR \ 000000C8 0F0000EA B ??DrawAck_6 \ ??DrawAck_5: \ 000000CC 080095E5 LDR R0,[R5, #+8] \ 000000D0 010070E3 CMN R0,#+1 \ 000000D4 0B00001A BNE ??DrawAck_7 \ 000000D8 0C0095E5 LDR R0,[R5, #+12] \ 000000DC 100010E3 TST R0,#0x10 \ 000000E0 0F0000E2 AND R0,R0,#0xF \ 000000E4 0300000A BEQ ??DrawAck_8 \ 000000E8 010050E3 CMP R0,#+1 \ 000000EC ........ LDRNE R0,??DataTable73 ;; O_TO_COLOR \ 000000F0 ........ LDREQ R0,??DataTable74 ;; O_I_COLOR \ 000000F4 040000EA B ??DrawAck_6 \ ??DrawAck_8: \ 000000F8 010050E3 CMP R0,#+1 \ 000000FC ........ LDRNE R0,??DataTable75 ;; TO_COLOR \ 00000100 ........ LDREQ R0,??DataTable76 ;; I_COLOR \ 00000104 000000EA B ??DrawAck_6 \ ??DrawAck_7: \ 00000108 ........ LDR R0,??DataTable77 ;; UNACK_COLOR \ ??DrawAck_6: \ 0000010C 001090E5 LDR R1,[R0, #+0] \ 00000110 0D00A0E1 MOV R0,SP \ 00000114 CC0100EF SWI +460 \ 00000118 0C0095E5 LDR R0,[R5, #+12] \ 0000011C 100010E3 TST R0,#0x10 \ 00000120 ........ LDREQ R0,??DataTable78 ;; ED_H_FONT_SIZE \ 00000124 ........ LDRNE R0,??DataTable79 ;; O_ED_H_FONT_SIZE \ 00000128 C3FFFFEA B ??DrawAck_2 2404 } 2405 if (IsGuiOnTop(edchat_id)&&dorefresh) RefreshGUI(); \ ??DrawAck_4: \ 0000012C 1C009FE5 LDR R0,??DrawAck_9 ;; S_ICONS + 384 \ 00000130 000090E5 LDR R0,[R0, #+0] \ 00000134 350100EF SWI +309 \ 00000138 000050E3 CMP R0,#+0 \ 0000013C 00005713 CMPNE R7,#+0 \ 00000140 0000000A BEQ ??DrawAck_0 \ 00000144 960100EF SWI +406 \ ??DrawAck_0: \ 00000148 3CD08DE2 ADD SP,SP,#+60 ;; stack cleaning \ 0000014C F080BDE8 POP {R4-R7,PC} ;; return \ ??DrawAck_9: \ 00000150 ........ DC32 S_ICONS + 384 2406 } 2407 \ In segment CODE, align 4, keep-with-next 2408 void ask_my_info(void) 2409 { 2410 /* TPKT *p; 2411 CLIST *t; 2412 p=malloc(sizeof(PKT)); 2413 p->pkt.uin=UIN; 2414 p->pkt.type=T_REQINFOSHORT; 2415 p->pkt.data_len=0; 2416 // AddStringToLog(t,0x01,"Request info...",I_str); 2417 SUBPROC((void *)SendAnswer,0,p);*/ 2418 } \ ask_my_info: \ 00000000 1EFF2FE1 BX LR ;; return 2419 \ In segment CODE, align 4, keep-with-next 2420 void set_my_status(void) 2421 { \ set_my_status: \ 00000000 00402DE9 PUSH {LR} 2422 TPKT *p; 2423 p=malloc(sizeof(PKT)+1); \ 00000004 0900A0E3 MOV R0,#+9 \ 00000008 140000EF SWI +20 2424 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] 2425 p->pkt.type=T_MY_STATUS_CH; // Тип пакета: изменение статуса \ 00000014 0F10A0E3 MOV R1,#+15 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2426 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000001C 0110A0E3 MOV R1,#+1 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2427 p->data[0]=CurrentStatus; \ 00000024 18109FE5 LDR R1,??set_my_status_0 ;; S_ICONS + 312 2428 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,??DataTable82 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 2429 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 S_ICONS + 312 2430 \ In segment CODE, align 4, keep-with-next 2431 void set_my_xstatus(void) 2432 { \ set_my_xstatus: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 2433 TPKT *p; 2434 char *s1; 2435 char *s2; 2436 int l1; 2437 int l2; 2438 p=malloc(sizeof(PKT)+1); 2439 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 2440 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 2441 p->pkt.data_len=1; // Длина пакета: 1 байт 2442 p->data[0]=CurrentXStatus; \ 00000004 ........ LDR R8,??DataTable86 ;; S_ICONS 2443 SUBPROC((void *)SendAnswer,0,p); \ 00000008 ........ LDR R6,??DataTable82 ;; 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 3C0198E5 LDR R0,[R8, #+316] \ 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 2444 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 0000004C 3C0198E5 LDR R0,[R8, #+316] \ 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 2445 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000064 3C0198E5 LDR R0,[R8, #+316] \ 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 2446 if ((!s1)||(!s2)) return; \ 0000007C 000057E3 CMP R7,#+0 \ 00000080 00005813 CMPNE R8,#+0 \ 00000084 F781BD08 POPEQ {R0-R2,R4-R8,PC} 2447 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 2448 p->pkt.uin=0; \ 000000A0 005084E5 STR R5,[R4, #+0] 2449 p->pkt.type=T_XTEXT_SET; \ 000000A4 1A00A0E3 MOV R0,#+26 \ 000000A8 B400C4E1 STRH R0,[R4, #+4] 2450 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] 2451 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 2452 p->data[l1]=0; \ 000000D0 00009DE5 LDR R0,[SP, #+0] 2453 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 2454 SUBPROC((void *)SendAnswer,0,p); \ 000000F4 0420A0E1 MOV R2,R4 \ 000000F8 0010A0E3 MOV R1,#+0 \ 000000FC 0600A0E1 MOV R0,R6 \ 00000100 710100EF SWI +369 2455 } \ 00000104 F781BDE8 POP {R0-R2,R4-R8,PC} ;; return 2456 \ In segment CODE, align 4, keep-with-next 2457 void to_develop(void) 2458 { 2459 if (silenthide) return; \ to_develop: \ 00000000 ........ LDR R0,??DataTable86 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 201190E5 LDR R1,[R0, #+288] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 2460 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable99 ;; `?` 2461 gipc.name_from=ipc_my_name; 2462 gipc.data=(void *)maincsm_id; 2463 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 00000018 743080E2 ADD R3,R0,#+116 \ 0000001C AA2F81E2 ADD R2,R1,#+680 \ 00000020 A21F81E2 ADD R1,R1,#+648 \ 00000024 781080E5 STR R1,[R0, #+120] \ 00000028 0C1190E5 LDR R1,[R0, #+268] \ 0000002C 742080E5 STR R2,[R0, #+116] \ 00000030 7C1080E5 STR R1,[R0, #+124] \ 00000034 0220A0E3 MOV R2,#+2 \ 00000038 B010A0E3 MOV R1,#+176 \ 0000003C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000040 0900A0E3 MOV R0,#+9 \ 00000044 420C80E3 ORR R0,R0,#0x4200 \ 00000048 000100EF SWI +256 2464 } \ 0000004C 0080BDE8 POP {PC} ;; return 2465 \ In segment CODE, align 4, keep-with-next 2466 void ReqAddMsgToChat(CLIST *t) 2467 { \ ReqAddMsgToChat: \ 00000000 70402DE9 PUSH {R4-R6,LR} 2468 if (edchat_id) \ 00000004 ........ LDR R5,??DataTable86 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 800195E5 LDR R0,[R5, #+384] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 2469 { 2470 void *data=FindGUIbyId(edchat_id,NULL); \ 00000018 800195E5 LDR R0,[R5, #+384] \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 090200EF SWI +521 \ 00000024 0060A0E1 MOV R6,R0 2471 { 2472 EDCHAT_STRUCT *ed_struct; 2473 ed_struct=EDIT_GetUserPointer(data); \ 00000028 DF0100EF SWI +479 2474 if (ed_struct) \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 7080BD08 POPEQ {R4-R6,PC} 2475 { 2476 if (ed_struct->ed_contact==t) \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 040050E1 CMP R0,R4 \ 0000003C 7080BD18 POPNE {R4-R6,PC} 2477 { 2478 if (EDIT_IsBusy(data)) \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 1C0200EF SWI +540 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0400000A BEQ ??ReqAddMsgToChat_0 2479 { 2480 t->req_add=1; \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 680084E5 STR R0,[R4, #+104] 2481 time_to_stop_t9=3; \ 00000058 0300A0E3 MOV R0,#+3 \ 0000005C 980185E5 STR R0,[R5, #+408] \ 00000060 7080BDE8 POP {R4-R6,PC} 2482 } 2483 else 2484 { 2485 AddMsgToChat(data); \ ??ReqAddMsgToChat_0: \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 ........ BL AddMsgToChat 2486 DirectRedrawGUI_ID(edchat_id); \ 0000006C 800195E5 LDR R0,[R5, #+384] \ 00000070 400100EF SWI +320 2487 } 2488 } 2489 } 2490 } 2491 } 2492 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 2493 \ In segment CODE, align 4, keep-with-next 2494 void CheckComand(char *txt, CLIST *t, char *ddd) 2495 { \ CheckComand: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 2496 comanda=1; \ 00000004 ........ LDR R5,??DataTable86 ;; S_ICONS 2497 if(!strcmp(txt, "GET_ONLINE_TIME")) \ 00000008 A0829FE5 LDR R8,??CheckComand_0 ;; `?` \ 0000000C ........ LDR R6,??DataTable98 ;; SendAnswer \ 00000010 04D04DE2 SUB SP,SP,#+4 \ 00000014 0090A0E1 MOV R9,R0 \ 00000018 0140A0E1 MOV R4,R1 \ 0000001C 0100A0E3 MOV R0,#+1 \ 00000020 E80085E5 STR R0,[R5, #+232] \ 00000024 0270A0E3 MOV R7,#+2 \ 00000028 00A0A0E3 MOV R10,#+0 \ 0000002C 241088E2 ADD R1,R8,#+36 \ 00000030 0900A0E1 MOV R0,R9 \ 00000034 190000EF SWI +25 \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 1900001A BNE ??CheckComand_1 2498 { 2499 comanda=0; \ 00000040 E8A085E5 STR R10,[R5, #+232] 2500 TPKT *p; 2501 sprintf(online_txt, "online: %02d:%02d:%02d \nServer: %s", hours, minutes, seconds, hostname); \ 00000044 6400A0E3 MOV R0,#+100 \ 00000048 4C0D80E3 ORR R0,R0,#0x1300 \ 0000004C 050080E0 ADD R0,R0,R5 \ 00000050 01002DE9 PUSH {R0} \ 00000054 A40095E5 LDR R0,[R5, #+164] \ 00000058 D89FA0E3 MOV R9,#+864 \ 0000005C 01002DE9 PUSH {R0} \ 00000060 A83095E5 LDR R3,[R5, #+168] \ 00000064 AC2095E5 LDR R2,[R5, #+172] \ 00000068 0810A0E1 MOV R1,R8 \ 0000006C 050089E0 ADD R0,R9,R5 \ 00000070 160000EF SWI +22 2502 p=malloc(sizeof(PKT)+strlen(online_txt)+1); \ 00000074 050089E0 ADD R0,R9,R5 \ 00000078 1B0000EF SWI +27 \ 0000007C 090080E2 ADD R0,R0,#+9 \ 00000080 140000EF SWI +20 \ 00000084 0080A0E1 MOV R8,R0 2503 p->pkt.uin=t->uin; \ 00000088 0C0094E5 LDR R0,[R4, #+12] \ 0000008C 000088E5 STR R0,[R8, #+0] 2504 p->pkt.type=T_SENDMSG; \ 00000090 B470C8E1 STRH R7,[R8, #+4] 2505 p->pkt.data_len=strlen(online_txt); \ 00000094 050089E0 ADD R0,R9,R5 \ 00000098 1B0000EF SWI +27 \ 0000009C B600C8E1 STRH R0,[R8, #+6] 2506 strcpy(p->data,online_txt); \ 000000A0 051089E0 ADD R1,R9,R5 \ 000000A4 760000EA B ??CheckComand_2 2507 SENDMSGCOUNT++; 2508 SUBPROC((void *)SendAnswer,0,p); 2509 return; 2510 } 2511 if(!strcmp(txt, "GET_MSG_INFO")) \ ??CheckComand_1: \ 000000A8 4C1088E2 ADD R1,R8,#+76 \ 000000AC 0900A0E1 MOV R0,R9 \ 000000B0 190000EF SWI +25 \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 0B00001A BNE ??CheckComand_3 2512 { 2513 comanda=0; \ 000000BC E8A085E5 STR R10,[R5, #+232] 2514 TPKT *p; 2515 char *send_txt=malloc(64); \ 000000C0 4000A0E3 MOV R0,#+64 \ 000000C4 140000EF SWI +20 2516 sprintf(send_txt, "sent: %d \n" 2517 "recieved: %d" 2518 , out_count, in_count); \ 000000C8 E03095E5 LDR R3,[R5, #+224] \ 000000CC E42095E5 LDR R2,[R5, #+228] \ 000000D0 0090A0E1 MOV R9,R0 \ 000000D4 341088E2 ADD R1,R8,#+52 \ 000000D8 160000EF SWI +22 2519 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000000DC 0900A0E1 MOV R0,R9 \ 000000E0 1B0000EF SWI +27 \ 000000E4 090080E2 ADD R0,R0,#+9 \ 000000E8 340000EA B ??CheckComand_4 2520 p->pkt.uin=t->uin; 2521 p->pkt.type=T_SENDMSG; 2522 p->pkt.data_len=strlen(send_txt); 2523 strcpy(p->data,send_txt); 2524 SENDMSGCOUNT++; 2525 SUBPROC((void *)SendAnswer,0,p); 2526 mfree(send_txt); 2527 return; 2528 } 2529 if(!strcmp(txt, "GET_MOD_INFO")) \ ??CheckComand_3: \ 000000EC 5C1088E2 ADD R1,R8,#+92 \ 000000F0 0900A0E1 MOV R0,R9 \ 000000F4 190000EF SWI +25 \ 000000F8 000050E3 CMP R0,#+0 \ 000000FC 2000001A BNE ??CheckComand_5 2530 { 2531 comanda=0; \ 00000100 E8A085E5 STR R10,[R5, #+232] 2532 TPKT *p; 2533 char *send_txt=malloc(256); \ 00000104 400FA0E3 MOV R0,#+256 \ 00000108 140000EF SWI +20 \ 0000010C 0080A0E1 MOV R8,R0 2534 strcpy(send_txt, mod_info); \ 00000110 DC00A0E3 MOV R0,#+220 \ 00000114 440D80E3 ORR R0,R0,#0x1100 \ 00000118 051080E0 ADD R1,R0,R5 \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 1A0000EF SWI +26 2535 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 00000124 0800A0E1 MOV R0,R8 \ 00000128 1B0000EF SWI +27 \ 0000012C 090080E2 ADD R0,R0,#+9 \ 00000130 140000EF SWI +20 \ 00000134 0090A0E1 MOV R9,R0 2536 p->pkt.uin=t->uin; \ 00000138 0C0094E5 LDR R0,[R4, #+12] \ 0000013C 000089E5 STR R0,[R9, #+0] 2537 p->pkt.type=T_SENDMSG; \ 00000140 B470C9E1 STRH R7,[R9, #+4] 2538 p->pkt.data_len=strlen(send_txt); \ 00000144 0800A0E1 MOV R0,R8 \ 00000148 1B0000EF SWI +27 \ 0000014C B600C9E1 STRH R0,[R9, #+6] 2539 strcpy(p->data,send_txt); \ 00000150 0810A0E1 MOV R1,R8 \ 00000154 080089E2 ADD R0,R9,#+8 \ 00000158 1A0000EF SWI +26 2540 SENDMSGCOUNT++; \ 0000015C 140195E5 LDR R0,[R5, #+276] 2541 SUBPROC((void *)SendAnswer,0,p); \ 00000160 0920A0E1 MOV R2,R9 \ 00000164 010080E2 ADD R0,R0,#+1 \ 00000168 140185E5 STR R0,[R5, #+276] \ 0000016C 0010A0E3 MOV R1,#+0 \ 00000170 0600A0E1 MOV R0,R6 \ 00000174 710100EF SWI +369 2542 mfree(send_txt); \ 00000178 0800A0E1 MOV R0,R8 \ 0000017C 150000EF SWI +21 \ 00000180 F187BDE8 POP {R0,R4-R10,PC} 2543 return; 2544 } 2545 if(!strcmp(txt, "GET_BAT_INFO")) \ ??CheckComand_5: \ 00000184 841088E2 ADD R1,R8,#+132 \ 00000188 0900A0E1 MOV R0,R9 \ 0000018C 190000EF SWI +25 \ 00000190 000050E3 CMP R0,#+0 \ 00000194 1E00001A BNE ??CheckComand_6 2546 { 2547 comanda=0; \ 00000198 E8A085E5 STR R10,[R5, #+232] 2548 TPKT *p; 2549 int bat; 2550 bat=*RamCap(); \ 0000019C C88000EF SWI +32968 \ 000001A0 B0A0D0E1 LDRH R10,[R0, #+0] 2551 char *send_txt=malloc(64); \ 000001A4 4000A0E3 MOV R0,#+64 \ 000001A8 140000EF SWI +20 \ 000001AC 0090A0E1 MOV R9,R0 2552 sprintf(send_txt, "battery: %d percents", bat); \ 000001B0 0A20A0E1 MOV R2,R10 \ 000001B4 6C1088E2 ADD R1,R8,#+108 \ 000001B8 160000EF SWI +22 2553 p=malloc(sizeof(PKT)+21+1); \ 000001BC 1E00A0E3 MOV R0,#+30 \ ??CheckComand_4: \ 000001C0 140000EF SWI +20 \ 000001C4 0080A0E1 MOV R8,R0 2554 p->pkt.uin=t->uin; \ 000001C8 0C0094E5 LDR R0,[R4, #+12] \ 000001CC 000088E5 STR R0,[R8, #+0] 2555 p->pkt.type=T_SENDMSG; \ 000001D0 B470C8E1 STRH R7,[R8, #+4] 2556 p->pkt.data_len=strlen(send_txt); \ 000001D4 0900A0E1 MOV R0,R9 \ 000001D8 1B0000EF SWI +27 \ 000001DC B600C8E1 STRH R0,[R8, #+6] 2557 strcpy(p->data,send_txt); \ 000001E0 0910A0E1 MOV R1,R9 \ 000001E4 080088E2 ADD R0,R8,#+8 \ 000001E8 1A0000EF SWI +26 2558 SENDMSGCOUNT++; \ 000001EC 140195E5 LDR R0,[R5, #+276] 2559 SUBPROC((void *)SendAnswer,0,p); \ 000001F0 0820A0E1 MOV R2,R8 \ 000001F4 010080E2 ADD R0,R0,#+1 \ 000001F8 140185E5 STR R0,[R5, #+276] \ 000001FC 0010A0E3 MOV R1,#+0 \ 00000200 0600A0E1 MOV R0,R6 \ 00000204 710100EF SWI +369 2560 mfree(send_txt); \ 00000208 0900A0E1 MOV R0,R9 \ 0000020C 150000EF SWI +21 2561 return; \ 00000210 F187BDE8 POP {R0,R4-R10,PC} 2562 } 2563 if(away_m==1) \ ??CheckComand_6: \ 00000214 F80095E5 LDR R0,[R5, #+248] \ 00000218 010050E3 CMP R0,#+1 \ 0000021C F187BD18 POPNE {R0,R4-R10,PC} 2564 { 2565 TPKT *p; 2566 sprintf(away_msg, "AutoMsg: %s %s! im not here! %s %s",away_msg1, t->name, away_msg2, away_msg_time); \ 00000220 8C209FE5 LDR R2,??CheckComand_0+0x4 ;; away_msg1 \ 00000224 2400A0E3 MOV R0,#+36 \ 00000228 400D80E3 ORR R0,R0,#0x1000 \ 0000022C 059080E0 ADD R9,R0,R5 \ 00000230 400040E2 SUB R0,R0,#+64 \ 00000234 050080E0 ADD R0,R0,R5 \ 00000238 01002DE9 PUSH {R0} \ 0000023C 74009FE5 LDR R0,??CheckComand_0+0x8 ;; away_msg2 \ 00000240 143084E2 ADD R3,R4,#+20 \ 00000244 01002DE9 PUSH {R0} \ 00000248 941088E2 ADD R1,R8,#+148 \ 0000024C 0900A0E1 MOV R0,R9 \ 00000250 160000EF SWI +22 2567 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 00000254 0900A0E1 MOV R0,R9 \ 00000258 1B0000EF SWI +27 \ 0000025C 090080E2 ADD R0,R0,#+9 \ 00000260 140000EF SWI +20 \ 00000264 0080A0E1 MOV R8,R0 2568 p->pkt.uin=t->uin; \ 00000268 0C0094E5 LDR R0,[R4, #+12] \ 0000026C 000088E5 STR R0,[R8, #+0] 2569 p->pkt.type=T_SENDMSG; \ 00000270 B470C8E1 STRH R7,[R8, #+4] 2570 p->pkt.data_len=strlen(away_msg); \ 00000274 0900A0E1 MOV R0,R9 \ 00000278 1B0000EF SWI +27 \ 0000027C B600C8E1 STRH R0,[R8, #+6] 2571 strcpy(p->data,away_msg); \ 00000280 0910A0E1 MOV R1,R9 \ ??CheckComand_2: \ 00000284 080088E2 ADD R0,R8,#+8 \ 00000288 1A0000EF SWI +26 2572 SENDMSGCOUNT++; \ 0000028C 140195E5 LDR R0,[R5, #+276] 2573 SUBPROC((void *)SendAnswer,0,p); \ 00000290 0820A0E1 MOV R2,R8 \ 00000294 010080E2 ADD R0,R0,#+1 \ 00000298 140185E5 STR R0,[R5, #+276] \ 0000029C 0010A0E3 MOV R1,#+0 \ 000002A0 0600A0E1 MOV R0,R6 \ 000002A4 710100EF SWI +369 \ 000002A8 08D08DE2 ADD SP,SP,#+8 \ 000002AC F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??CheckComand_0: \ 000002B0 ........ DC32 `?` \ 000002B4 ........ DC32 away_msg1 \ 000002B8 ........ DC32 away_msg2 2574 } 2575 } 2576 \ In segment CODE, align 4, keep-with-next 2577 ProcessPacket(TPKT *p) 2578 { \ ProcessPacket: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 43DF4DE2 SUB SP,SP,#+268 2579 extern const int VIBR_TYPE, VIBR_ON_CONNECT; 2580 CLIST *t; 2581 LOGQ *q; 2582 char s[256]; 2583 switch(p->pkt.type) \ 00000008 ........ LDR R8,??DataTable99 ;; `?` \ 0000000C ........ LDR R6,??DataTable107 ;; S_ICONS \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 B410D4E1 LDRH R1,[R4, #+4] \ 00000018 000094E5 LDR R0,[R4, #+0] \ 0000001C 0270A0E3 MOV R7,#+2 \ 00000020 01B0A0E3 MOV R11,#+1 \ 00000024 0090A0E3 MOV R9,#+0 \ 00000028 031041E2 SUB R1,R1,#+3 \ 0000002C 1C0051E3 CMP R1,#+28 \ 00000030 1302008A BHI ??ProcessPacket_1 \ 00000034 022F8FE2 ADR R2,??ProcessPacket_0 \ 00000038 8110A0E1 MOV R1,R1, LSL #+1 \ 0000003C B12092E1 LDRH R2,[R2, R1] \ 00000040 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??ProcessPacket_0: \ 00000044 C7000E000F02 DC16 +199,+14,+527,+527 \ 0F02 \ 0000004C 11000F024600 DC16 +17,+527,+70,+527 \ 0F02 \ 00000054 0F020F020F02 DC16 +527,+527,+527,+527 \ 0F02 \ 0000005C 0F0273017301 DC16 +527,+371,+371,+527 \ 0F02 \ 00000064 0F0236004400 DC16 +527,+54,+68,+527 \ 0F02 \ 0000006C 0F020F02A901 DC16 +527,+527,+425,+527 \ 0F02 \ 00000074 0F020F020F02 DC16 +527,+527,+527,+527 \ 0F02 \ 0000007C 0D020000 DC16 +525,+0 2584 { 2585 case T_LOGIN: 2586 set_my_status(); \ ??ProcessPacket_2: \ 00000080 ........ BL set_my_status 2587 set_my_xstatus(); \ 00000084 ........ BL set_my_xstatus \ 00000088 FD0100EA B ??ProcessPacket_1 2588 break; 2589 case T_CLENTRY: 2590 if (p->pkt.uin) \ ??ProcessPacket_3: \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 1300000A BEQ ??ProcessPacket_4 2591 { 2592 if ((t=FindContactByUin(p->pkt.uin))) \ 00000094 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000098 0050B0E1 MOVS R5,R0 \ 0000009C 0B00000A BEQ ??ProcessPacket_5 2593 { 2594 // t->state=0xFFFF; 2595 strncpy(t->name,p->data,63); \ 000000A0 3F20A0E3 MOV R2,#+63 \ 000000A4 081084E2 ADD R1,R4,#+8 \ 000000A8 140085E2 ADD R0,R5,#+20 \ 000000AC 160100EF SWI +278 2596 t->group=GROUP_CACHE; \ 000000B0 780196E5 LDR R0,[R6, #+376] \ 000000B4 100085E5 STR R0,[R5, #+16] 2597 ChangeContactPos(t); \ ??ProcessPacket_6: \ 000000B8 0500A0E1 MOV R0,R5 \ 000000BC ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2598 RecountMenu(t, 1); \ 000000C0 0110A0E3 MOV R1,#+1 \ 000000C4 0500A0E1 MOV R0,R5 \ ??ProcessPacket_7: \ 000000C8 ........ BL RecountMenu \ 000000CC EC0100EA B ??ProcessPacket_1 2599 } 2600 else 2601 { 2602 RecountMenu(AddContact(p->pkt.uin,p->data), 1); \ ??ProcessPacket_5: \ 000000D0 000094E5 LDR R0,[R4, #+0] \ 000000D4 081084E2 ADD R1,R4,#+8 \ 000000D8 ........ _BLF AddContact,??AddContact??rA \ 000000DC 0110A0E3 MOV R1,#+1 \ 000000E0 F8FFFFEA B ??ProcessPacket_7 2603 } 2604 } 2605 else 2606 { 2607 if(VIBR_ON_CONNECT) \ ??ProcessPacket_4: \ 000000E4 ........ LDR R0,??DataTable90 ;; VIBR_ON_CONNECT \ 000000E8 000090E5 LDR R0,[R0, #+0] \ 000000EC 000050E3 CMP R0,#+0 \ 000000F0 0100000A BEQ ??ProcessPacket_8 2608 { 2609 vibra_count=1; \ 000000F4 44B186E5 STR R11,[R6, #+324] 2610 start_vibra(); \ 000000F8 ........ BL start_vibra 2611 } 2612 GROUP_CACHE=0; \ ??ProcessPacket_8: \ 000000FC 789186E5 STR R9,[R6, #+376] 2613 ask_my_info(); 2614 if (contactlist_menu_id) \ 00000100 7C0196E5 LDR R0,[R6, #+380] \ 00000104 000050E3 CMP R0,#+0 \ 00000108 0200000A BEQ ??ProcessPacket_9 2615 { 2616 RecountMenu(NULL, 1); \ 0000010C 0110A0E3 MOV R1,#+1 \ 00000110 0900A0E1 MOV R0,R9 \ ??ProcessPacket_10: \ 00000114 EBFFFFEA B ??ProcessPacket_7 2617 } 2618 else 2619 create_contactlist_menu(); \ ??ProcessPacket_9: \ 00000118 ........ BL create_contactlist_menu \ 0000011C D80100EA B ??ProcessPacket_1 2620 } 2621 break; 2622 case T_GROUPID: 2623 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_11: \ 00000120 780186E5 STR R0,[R6, #+376] \ 00000124 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000128 0050B0E1 MOVS R5,R0 \ 0000012C 0400000A BEQ ??ProcessPacket_12 2624 { 2625 strncpy(t->name,p->data,63); \ 00000130 3F20A0E3 MOV R2,#+63 \ 00000134 081084E2 ADD R1,R4,#+8 \ 00000138 140085E2 ADD R0,R5,#+20 \ 0000013C 160100EF SWI +278 2626 ChangeContactPos(t); \ 00000140 DCFFFFEA B ??ProcessPacket_6 2627 RecountMenu(t, 1); 2628 } 2629 else 2630 { 2631 RecountMenu(AddGroup(p->pkt.uin,p->data), 1); \ ??ProcessPacket_12: \ 00000144 000094E5 LDR R0,[R4, #+0] \ 00000148 081084E2 ADD R1,R4,#+8 \ 0000014C ........ _BLF AddGroup,??AddGroup??rA \ 00000150 0110A0E3 MOV R1,#+1 \ 00000154 DBFFFFEA B ??ProcessPacket_7 2632 } 2633 break; 2634 case T_GROUPFOLLOW: 2635 GROUP_CACHE=p->pkt.uin; \ ??ProcessPacket_13: \ 00000158 780186E5 STR R0,[R6, #+376] \ 0000015C C80100EA B ??ProcessPacket_1 2636 break; 2637 case T_STATUSCHANGE: 2638 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_14: \ 00000160 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000164 0050B0E1 MOVS R5,R0 2639 if (t) \ 00000168 6E00000A BEQ ??ProcessPacket_15 2640 { 2641 int i=t->state; \ 0000016C B415D5E1 LDRH R1,[R5, #+84] 2642 CLIST *oldt=NULL; \ 00000170 00A0A0E3 MOV R10,#+0 \ 00000174 08108DE5 STR R1,[SP, #+8] \ 00000178 0A00D4E5 LDRB R0,[R4, #+10] \ 0000017C B615D5E1 LDRH R1,[R5, #+86] \ 00000180 000051E1 CMP R1,R0 \ 00000184 1D00000A BEQ ??ProcessPacket_16 2643 if (t->xstate!=p->data[2]) // Если картинка икс статуса сменилась 2644 { 2645 t->xstate=p->data[2]; \ 00000188 B605C5E1 STRH R0,[R5, #+86] 2646 FreeXText(t); \ 0000018C 0500A0E1 MOV R0,R5 \ 00000190 ........ _BLF FreeXText,??FreeXText??rA 2647 if (t->xstate && ENA_AUTO_XTXT) // Если установлен икс статус и можно запрашивать по смене икс статуса :) \ 00000194 B605D5E1 LDRH R0,[R5, #+86] \ 00000198 000050E3 CMP R0,#+0 \ 0000019C 1600000A BEQ ??ProcessPacket_17 \ 000001A0 F0069FE5 LDR R0,??ProcessPacket_18+0x4 ;; ENA_AUTO_XTXT \ 000001A4 000090E5 LDR R0,[R0, #+0] \ 000001A8 000050E3 CMP R0,#+0 \ 000001AC 1200000A BEQ ??ProcessPacket_17 2648 { 2649 t->req_xtext=1; \ 000001B0 88B085E5 STR R11,[R5, #+136] 2650 if (edchat_id) // Если открыт чат \ 000001B4 800196E5 LDR R0,[R6, #+384] \ 000001B8 000050E3 CMP R0,#+0 \ 000001BC 0F00000A BEQ ??ProcessPacket_16 2651 { 2652 void *data=FindGUIbyId(edchat_id,NULL); \ 000001C0 800196E5 LDR R0,[R6, #+384] \ 000001C4 0010A0E3 MOV R1,#+0 \ 000001C8 090200EF SWI +521 2653 if (data) \ 000001CC 000050E3 CMP R0,#+0 \ 000001D0 0A00000A BEQ ??ProcessPacket_16 2654 { 2655 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 000001D4 DF0100EF SWI +479 2656 if (ed_struct) \ 000001D8 000050E3 CMP R0,#+0 \ 000001DC 0700000A BEQ ??ProcessPacket_16 2657 { 2658 if (ed_struct->ed_contact==t) // Если наш чат то запрашиваем текст статуса \ 000001E0 000090E5 LDR R0,[R0, #+0] \ 000001E4 050050E1 CMP R0,R5 \ 000001E8 0400001A BNE ??ProcessPacket_16 2659 { 2660 t->req_xtext=0; \ 000001EC 889085E5 STR R9,[R5, #+136] 2661 RequestXText(t->uin); \ 000001F0 0C0095E5 LDR R0,[R5, #+12] \ 000001F4 ........ BL RequestXText \ 000001F8 000000EA B ??ProcessPacket_16 2662 } 2663 } 2664 } 2665 } 2666 } 2667 else // Если икс статус не установлен то на всякий случай снимаем флаг получения текста 2668 { 2669 t->req_xtext=0; \ ??ProcessPacket_17: \ 000001FC 889085E5 STR R9,[R5, #+136] 2670 } 2671 } 2672 if (contactlist_menu_id) \ ??ProcessPacket_16: \ 00000200 7C0196E5 LDR R0,[R6, #+380] \ 00000204 000050E3 CMP R0,#+0 \ 00000208 0500000A BEQ ??ProcessPacket_19 2673 { 2674 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 0000020C 7C0196E5 LDR R0,[R6, #+380] \ 00000210 0010A0E3 MOV R1,#+0 \ 00000214 090200EF SWI +521 \ 00000218 8F0100EF SWI +399 \ 0000021C ........ _BLF FindContactByN,??FindContactByN??rA \ 00000220 00A0A0E1 MOV R10,R0 2675 } 2676 t->state=*((unsigned short *)(p->data)); \ ??ProcessPacket_19: \ 00000224 B800D4E1 LDRH R0,[R4, #+8] \ 00000228 B405C5E1 STRH R0,[R5, #+84] 2677 LogStatusChange(t); \ 0000022C 0500A0E1 MOV R0,R5 \ 00000230 ........ _BLF LogStatusChange,??LogStatusChange??rA 2678 ChangeContactPos(t); \ 00000234 0500A0E1 MOV R0,R5 \ 00000238 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2679 RecountMenu(oldt, 1); \ 0000023C 0110A0E3 MOV R1,#+1 \ 00000240 0A00A0E1 MOV R0,R10 \ 00000244 ........ BL RecountMenu 2680 if ((t->state!=0xFFFF)&&(i==0xFFFF))//Звук \ 00000248 B405D5E1 LDRH R0,[R5, #+84] \ 0000024C FF10A0E3 MOV R1,#+255 \ 00000250 FF1C81E3 ORR R1,R1,#0xFF00 \ 00000254 010050E1 CMP R0,R1 \ 00000258 2B00000A BEQ ??ProcessPacket_20 \ 0000025C 08209DE5 LDR R2,[SP, #+8] \ 00000260 010052E1 CMP R2,R1 \ 00000264 2800001A BNE ??ProcessPacket_20 2681 { 2682 #ifdef EVILFOX 2683 if(!t->just_now) \ 00000268 5C0095E5 LDR R0,[R5, #+92] \ 0000026C 000050E3 CMP R0,#+0 \ 00000270 0800001A BNE ??ProcessPacket_21 2684 { 2685 total_c_online++; \ 00000274 980096E5 LDR R0,[R6, #+152] \ 00000278 010080E2 ADD R0,R0,#+1 \ 0000027C 980086E5 STR R0,[R6, #+152] 2686 UpdateCLheader(); \ 00000280 ........ BL UpdateCLheader 2687 if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); \ 00000284 7C0196E5 LDR R0,[R6, #+380] \ 00000288 350100EF SWI +309 \ 0000028C 000050E3 CMP R0,#+0 \ 00000290 0000000A BEQ ??ProcessPacket_21 \ 00000294 960100EF SWI +406 2688 } 2689 if(Is_INC_On) \ ??ProcessPacket_21: \ 00000298 CC0096E5 LDR R0,[R6, #+204] \ 0000029C 000050E3 CMP R0,#+0 \ 000002A0 1600000A BEQ ??ProcessPacket_22 2690 { 2691 strcpy(show_nick, t->name); \ 000002A4 141085E2 ADD R1,R5,#+20 \ 000002A8 E50F86E2 ADD R0,R6,#+916 \ 000002AC 1A0000EF SWI +26 2692 #ifdef NEWSGOLD 2693 if(!IsIdleUiOnTop()) \ 000002B0 C50000EF SWI +197 \ 000002B4 000050E3 CMP R0,#+0 \ 000002B8 1000001A BNE ??ProcessPacket_22 2694 #else 2695 #define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 2696 CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); 2697 if (!IsGuiOnTop(idlegui_id)) 2698 #endif 2699 { 2700 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; \ 000002BC 068100EF SWI +33030 \ 000002C0 080090E5 LDR R0,[R0, #+8] 2701 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 000002C4 0C0098E8 LDM R8,{R2,R3} \ 000002C8 0C0090E5 LDR R0,[R0, #+12] \ 000002CC 0D10A0E1 MOV R1,SP \ 000002D0 080090E5 LDR R0,[R0, #+8] \ 000002D4 040090E5 LDR R0,[R0, #+4] \ 000002D8 0C0081E8 STM R1,{R2,R3} \ 000002DC 010040E2 SUB R0,R0,#+1 2702 if (memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8)) \ 000002E0 0820A0E3 MOV R2,#+8 \ 000002E4 1C0100EF SWI +284 \ 000002E8 000050E3 CMP R0,#+0 \ 000002EC 0300000A BEQ ??ProcessPacket_22 2703 { 2704 INC_show=15; \ 000002F0 0F00A0E3 MOV R0,#+15 \ 000002F4 C80086E5 STR R0,[R6, #+200] 2705 pp_color=2; \ 000002F8 D47086E5 STR R7,[R6, #+212] 2706 show_pp_sender(); \ 000002FC ........ BL show_pp_sender 2707 } 2708 } 2709 } 2710 t->just_now=2; 2711 2712 #endif 2713 Play(sndGlobal); \ ??ProcessPacket_22: \ 00000300 94059FE5 LDR R0,??ProcessPacket_18+0x8 ;; sndGlobal \ 00000304 5C7085E5 STR R7,[R5, #+92] \ 00000308 050000EA B ??ProcessPacket_23 2714 } 2715 if ((i!=0xFFFF)&&(t->state==0xFFFF))//Звук \ ??ProcessPacket_20: \ 0000030C 08209DE5 LDR R2,[SP, #+8] \ 00000310 010052E1 CMP R2,R1 \ 00000314 0300000A BEQ ??ProcessPacket_15 \ 00000318 010050E1 CMP R0,R1 \ 0000031C 0100001A BNE ??ProcessPacket_15 2716 { 2717 Play(sndSrvMsg); \ 00000320 78059FE5 LDR R0,??ProcessPacket_18+0xC ;; sndSrvMsg \ ??ProcessPacket_23: \ 00000324 ........ BL Play 2718 } 2719 } 2720 if (edchat_id) \ ??ProcessPacket_15: \ 00000328 800196E5 LDR R0,[R6, #+384] \ 0000032C 000050E3 CMP R0,#+0 \ 00000330 5301000A BEQ ??ProcessPacket_1 2721 { 2722 void *data=FindGUIbyId(edchat_id,NULL); \ 00000334 800196E5 LDR R0,[R6, #+384] \ 00000338 0010A0E3 MOV R1,#+0 \ 0000033C 090200EF SWI +521 2723 { 2724 EDCHAT_STRUCT *ed_struct; 2725 ed_struct=EDIT_GetUserPointer(data); \ 00000340 DF0100EF SWI +479 2726 if (ed_struct) \ 00000344 000050E3 CMP R0,#+0 \ 00000348 4D01000A BEQ ??ProcessPacket_1 2727 { 2728 if (ed_struct->ed_contact==t) \ 0000034C 000090E5 LDR R0,[R0, #+0] \ 00000350 050050E1 CMP R0,R5 \ 00000354 4A01001A BNE ??ProcessPacket_1 2729 { 2730 DirectRedrawGUI_ID(edchat_id); \ 00000358 800196E5 LDR R0,[R6, #+384] \ 0000035C 400100EF SWI +320 \ 00000360 470100EA B ??ProcessPacket_1 2731 } 2732 } 2733 } 2734 } 2735 break; 2736 case T_RECVMSG: 2737 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_24: \ 00000364 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000368 0050B0E1 MOVS R5,R0 2738 if (!t) \ 0000036C 0700001A BNE ??ProcessPacket_25 2739 { 2740 sprintf(s,percent_d,p->pkt.uin); \ 00000370 002094E5 LDR R2,[R4, #+0] \ 00000374 131088E2 ADD R1,R8,#+19 \ 00000378 0C008DE2 ADD R0,SP,#+12 \ 0000037C 160000EF SWI +22 2741 t=AddContact(p->pkt.uin,s); \ 00000380 000094E5 LDR R0,[R4, #+0] \ 00000384 0C108DE2 ADD R1,SP,#+12 \ 00000388 ........ _BLF AddContact,??AddContact??rA \ 0000038C 0050A0E1 MOV R5,R0 2742 } 2743 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<isactive=ACTIVE_TIME; \ ??ProcessPacket_26: \ 000003BC 1E00A0E3 MOV R0,#+30 \ 000003C0 7C0085E5 STR R0,[R5, #+124] 2745 #ifdef EVILFOX 2746 if(t->ext_snd) \ 000003C4 600095E5 LDR R0,[R5, #+96] \ 000003C8 000050E3 CMP R0,#+0 \ 000003CC 0900000A BEQ ??ProcessPacket_27 2747 { 2748 sprintf(ext_sound, "%s%d.wav", sndMsg2, t->uin); \ 000003D0 0C3095E5 LDR R3,[R5, #+12] \ 000003D4 ........ LDR R2,??DataTable92 ;; sndMsg2 \ 000003D8 3C00A0E3 MOV R0,#+60 \ 000003DC 440D80E3 ORR R0,R0,#0x1100 \ 000003E0 06A080E0 ADD R10,R0,R6 \ 000003E4 181088E2 ADD R1,R8,#+24 \ 000003E8 0A00A0E1 MOV R0,R10 \ 000003EC 160000EF SWI +22 2749 Play(ext_sound); \ 000003F0 0A00A0E1 MOV R0,R10 \ 000003F4 000000EA B ??ProcessPacket_28 2750 } 2751 else 2752 Play(sndMsg); \ ??ProcessPacket_27: \ 000003F8 A4049FE5 LDR R0,??ProcessPacket_18+0x10 ;; sndMsg \ ??ProcessPacket_28: \ 000003FC ........ BL Play 2753 #endif 2754 #ifdef ELKA 2755 SLI_Timer(); \ 00000400 ........ BL SLI_Timer 2756 #endif 2757 if(VIBR_TYPE) \ 00000404 ........ LDR R0,??DataTable93 ;; VIBR_TYPE \ 00000408 000090E5 LDR R0,[R0, #+0] \ 0000040C 000050E3 CMP R0,#+0 2758 vibra_count=2; \ 00000410 44718615 STRNE R7,[R6, #+324] 2759 else 2760 vibra_count=1; \ 00000414 44B18605 STREQ R11,[R6, #+324] 2761 start_vibra(); \ 00000418 ........ BL start_vibra 2762 #ifdef EVILFOX 2763 if(Is_ILU_On) \ 0000041C A00096E5 LDR R0,[R6, #+160] \ 00000420 000050E3 CMP R0,#+0 \ 00000424 0800000A BEQ ??ProcessPacket_29 2764 #endif 2765 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 00000428 78049FE5 LDR R0,??ProcessPacket_18+0x14 ;; ILL_RECV_FADE \ 0000042C 003090E5 LDR R3,[R0, #+0] \ 00000430 74049FE5 LDR R0,??ProcessPacket_18+0x18 ;; ILL_RECV_TMR \ 00000434 002090E5 LDR R2,[R0, #+0] \ 00000438 70049FE5 LDR R0,??ProcessPacket_18+0x1C ;; ILL_KEYS_RECV \ 0000043C 001090E5 LDR R1,[R0, #+0] \ 00000440 6C049FE5 LDR R0,??ProcessPacket_18+0x20 ;; ILL_DISP_RECV \ 00000444 000090E5 LDR R0,[R0, #+0] \ 00000448 ........ BL IlluminationOn 2766 if (t->name[0]=='#') \ ??ProcessPacket_29: \ 0000044C 1400D5E5 LDRB R0,[R5, #+20] \ 00000450 230050E3 CMP R0,#+35 \ 00000454 1500001A BNE ??ProcessPacket_30 2767 { 2768 //Если это конференция, патчим имя 2769 char *s=strchr(p->data,'>'); \ 00000458 3E10A0E3 MOV R1,#+62 \ 0000045C 080084E2 ADD R0,R4,#+8 \ 00000460 180000EF SWI +24 2770 //Если нашли символ > и после него пробел и ник короче 16 символов 2771 if (s) \ 00000464 000050E3 CMP R0,#+0 \ 00000468 1000000A BEQ ??ProcessPacket_30 2772 { 2773 if ((s[1]==' ')&&((s-p->data)<16)) \ 0000046C 0110D0E5 LDRB R1,[R0, #+1] \ 00000470 200051E3 CMP R1,#+32 \ 00000474 0D00001A BNE ??ProcessPacket_30 \ 00000478 081084E2 ADD R1,R4,#+8 \ 0000047C 011040E0 SUB R1,R0,R1 \ 00000480 100051E3 CMP R1,#+16 \ 00000484 090000AA BGE ??ProcessPacket_30 2774 { 2775 *s=0; //Режем строку \ 00000488 0090C0E5 STRB R9,[R0, #+0] 2776 AddStringToLog(t,0x02,s+2,p->data,0xFFFFFFFF); //Добавляем имя из текста сообщения \ 0000048C 0910E0E1 MVN R1,R9 \ 00000490 02002DE9 PUSH {R1} \ 00000494 083084E2 ADD R3,R4,#+8 \ 00000498 022080E2 ADD R2,R0,#+2 \ 0000049C 0500A0E1 MOV R0,R5 \ 000004A0 0210A0E3 MOV R1,#+2 \ 000004A4 ........ BL AddStringToLog 2777 goto L1; \ 000004A8 04D08DE2 ADD SP,SP,#+4 \ 000004AC 330000EA B ??ProcessPacket_31 2778 } 2779 } 2780 } 2781 #ifdef EVILFOX 2782 CheckComand(p->data, t, t->name); \ ??ProcessPacket_30: \ 000004B0 142085E2 ADD R2,R5,#+20 \ 000004B4 0510A0E1 MOV R1,R5 \ 000004B8 080084E2 ADD R0,R4,#+8 \ 000004BC ........ BL CheckComand 2783 if(comanda) \ 000004C0 E80096E5 LDR R0,[R6, #+232] \ 000004C4 000050E3 CMP R0,#+0 \ 000004C8 2C00000A BEQ ??ProcessPacket_31 2784 { 2785 #endif 2786 AddStringToLog(t,0x02,p->data,t->name,0xFFFFFFFF); \ 000004CC 0900E0E1 MVN R0,R9 \ 000004D0 01002DE9 PUSH {R0} \ 000004D4 143085E2 ADD R3,R5,#+20 \ 000004D8 082084E2 ADD R2,R4,#+8 \ 000004DC 0210A0E3 MOV R1,#+2 \ 000004E0 0500A0E1 MOV R0,R5 \ 000004E4 ........ BL AddStringToLog 2787 in_count++; \ 000004E8 E00096E5 LDR R0,[R6, #+224] \ 000004EC 010080E2 ADD R0,R0,#+1 \ 000004F0 E00086E5 STR R0,[R6, #+224] 2788 #ifdef EVILFOX 2789 if(Is_INC_On) \ 000004F4 CC0096E5 LDR R0,[R6, #+204] \ 000004F8 04D08DE2 ADD SP,SP,#+4 \ 000004FC 000050E3 CMP R0,#+0 \ 00000500 1700000A BEQ ??ProcessPacket_32 2790 { 2791 strcpy(show_nick, t->name); \ 00000504 141085E2 ADD R1,R5,#+20 \ 00000508 E50F86E2 ADD R0,R6,#+916 \ 0000050C 1A0000EF SWI +26 2792 #ifdef NEWSGOLD 2793 if(!IsIdleUiOnTop()) \ 00000510 C50000EF SWI +197 \ 00000514 000050E3 CMP R0,#+0 \ 00000518 1100001A BNE ??ProcessPacket_32 2794 #else 2795 #define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 2796 CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); 2797 if (!IsGuiOnTop(idlegui_id)) 2798 #endif 2799 { 2800 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; \ 0000051C 068100EF SWI +33030 \ 00000520 080090E5 LDR R0,[R0, #+8] 2801 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000524 8C239FE5 LDR R2,??ProcessPacket_18+0x24 ;; `?_1` \ 00000528 0C0090E5 LDR R0,[R0, #+12] \ 0000052C 880092E8 LDM R2,{R3,R7} \ 00000530 080090E5 LDR R0,[R0, #+8] \ 00000534 0D10A0E1 MOV R1,SP \ 00000538 040090E5 LDR R0,[R0, #+4] \ 0000053C 880081E8 STM R1,{R3,R7} \ 00000540 010040E2 SUB R0,R0,#+1 2802 if (memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8)) \ 00000544 0820A0E3 MOV R2,#+8 \ 00000548 1C0100EF SWI +284 \ 0000054C 000050E3 CMP R0,#+0 \ 00000550 0300000A BEQ ??ProcessPacket_32 2803 { 2804 INC_show=15; \ 00000554 0F00A0E3 MOV R0,#+15 \ 00000558 C80086E5 STR R0,[R6, #+200] 2805 pp_color=0; \ 0000055C D49086E5 STR R9,[R6, #+212] 2806 show_pp_sender(); \ 00000560 ........ BL show_pp_sender 2807 } 2808 } 2809 } 2810 if(Is_DRAWMAIN_On) \ ??ProcessPacket_32: \ 00000564 ........ LDR R0,??DataTable94 ;; Is_DRAWMAIN_On \ 00000568 000090E5 LDR R0,[R0, #+0] \ 0000056C 000050E3 CMP R0,#+0 \ 00000570 0200000A BEQ ??ProcessPacket_31 2811 AddToMain(t->name,p->data); \ 00000574 081084E2 ADD R1,R4,#+8 \ 00000578 140085E2 ADD R0,R5,#+20 \ 0000057C ........ BL AddToMain 2812 } 2813 #endif 2814 L1: 2815 //Разворачиваем группу, в которой пришло сообщение 2816 { 2817 CLIST *g=FindGroupByID(t->group); \ ??ProcessPacket_31: \ 00000580 100095E5 LDR R0,[R5, #+16] \ 00000584 ........ _BLF FindGroupByID,??FindGroupByID??rA 2818 if (g) \ 00000588 000050E3 CMP R0,#+0 2819 { 2820 if (g->state) \ 0000058C B415D011 LDRHNE R1,[R0, #+84] \ 00000590 00005113 CMPNE R1,#+0 2821 { 2822 g->state=0; \ 00000594 B495C011 STRHNE R9,[R0, #+84] 2823 } 2824 } 2825 } 2826 ReqAddMsgToChat(t); \ 00000598 0500A0E1 MOV R0,R5 \ 0000059C ........ BL ReqAddMsgToChat 2827 RecountMenu(t, 1); \ 000005A0 0110A0E3 MOV R1,#+1 \ 000005A4 0500A0E1 MOV R0,R5 \ 000005A8 ........ BL RecountMenu 2828 extern const int DEVELOP_IF; 2829 switch (DEVELOP_IF) \ 000005AC 08039FE5 LDR R0,??ProcessPacket_18+0x28 ;; DEVELOP_IF \ 000005B0 000090E5 LDR R0,[R0, #+0] \ 000005B4 000050E3 CMP R0,#+0 \ 000005B8 0200000A BEQ ??ProcessPacket_33 \ 000005BC 010050E2 SUBS R0,R0,#+1 \ 000005C0 0900000A BEQ ??ProcessPacket_34 \ 000005C4 AE0000EA B ??ProcessPacket_1 2830 { 2831 case 0: 2832 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) to_develop(); \ ??ProcessPacket_33: \ 000005C8 068100EF SWI +33030 \ 000005CC 080090E5 LDR R0,[R0, #+8] \ 000005D0 0C1196E5 LDR R1,[R6, #+268] \ 000005D4 0C0090E5 LDR R0,[R0, #+12] \ 000005D8 0C0090E5 LDR R0,[R0, #+12] \ 000005DC 010050E1 CMP R0,R1 \ ??ProcessPacket_35: \ 000005E0 A700000A BEQ ??ProcessPacket_1 \ 000005E4 ........ BL to_develop \ 000005E8 A50000EA B ??ProcessPacket_1 2833 break; 2834 case 1: 2835 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) to_develop(); \ ??ProcessPacket_34: \ 000005EC 068100EF SWI +33030 \ 000005F0 080090E5 LDR R0,[R0, #+8] \ 000005F4 0C1196E5 LDR R1,[R6, #+268] \ 000005F8 0C0090E5 LDR R0,[R0, #+12] \ 000005FC 0C0090E5 LDR R0,[R0, #+12] \ 00000600 010050E1 CMP R0,R1 \ 00000604 9E00000A BEQ ??ProcessPacket_1 \ 00000608 430000EF SWI +67 \ 0000060C 000050E3 CMP R0,#+0 \ 00000610 F2FFFFEA B ??ProcessPacket_35 2836 break; 2837 case 2: 2838 break; 2839 } 2840 break; 2841 case T_SRV_ACK: 2842 case T_CLIENT_ACK: 2843 q=FindContactLOGQByAck(p); \ ??ProcessPacket_36: \ 00000614 0400A0E1 MOV R0,R4 \ 00000618 ........ BL FindContactLOGQByAck \ 0000061C 0050B0E1 MOVS R5,R0 2844 if (q&&(p->pkt.type==T_SRV_ACK)&&Is_ILU_On) IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 00000620 9700000A BEQ ??ProcessPacket_1 \ 00000624 B400D4E1 LDRH R0,[R4, #+4] \ 00000628 100050E3 CMP R0,#+16 \ 0000062C 0B00001A BNE ??ProcessPacket_37 \ 00000630 A00096E5 LDR R0,[R6, #+160] \ 00000634 000050E3 CMP R0,#+0 \ 00000638 0B00000A BEQ ??ProcessPacket_38 \ 0000063C 64029FE5 LDR R0,??ProcessPacket_18+0x14 ;; ILL_RECV_FADE \ 00000640 003090E5 LDR R3,[R0, #+0] \ 00000644 74029FE5 LDR R0,??ProcessPacket_18+0x2C ;; ILL_SEND_TMR \ 00000648 002090E5 LDR R2,[R0, #+0] \ 0000064C 70029FE5 LDR R0,??ProcessPacket_18+0x30 ;; ILL_KEYS_SEND \ 00000650 001090E5 LDR R1,[R0, #+0] \ 00000654 6C029FE5 LDR R0,??ProcessPacket_18+0x34 ;; ILL_DISP_SEND \ 00000658 000090E5 LDR R0,[R0, #+0] \ 0000065C ........ BL IlluminationOn 2845 /* if (( 2846 IsGuiOnTop(contactlist_menu_id)|| 2847 IsGuiOnTop(edchat_id) 2848 )&&(q)) 2849 { 2850 DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 2851 GetPaletteAdrByColorIndex(0), 2852 GetPaletteAdrByColorIndex(p->pkt.type==T_SRV_ACK?3:4)); 2853 }*/ 2854 if (q) 2855 { 2856 q->acked=p->pkt.type==T_SRV_ACK?1:2; \ ??ProcessPacket_37: \ 00000660 B400D4E1 LDRH R0,[R4, #+4] \ 00000664 100050E3 CMP R0,#+16 \ 00000668 0100001A BNE ??ProcessPacket_39 \ ??ProcessPacket_38: \ 0000066C 0100A0E3 MOV R0,#+1 \ 00000670 000000EA B ??ProcessPacket_40 \ ??ProcessPacket_39: \ 00000674 0200A0E3 MOV R0,#+2 \ ??ProcessPacket_40: \ 00000678 040085E5 STR R0,[R5, #+4] 2857 t=FindContactByUin(p->pkt.uin); \ 0000067C 000094E5 LDR R0,[R4, #+0] \ 00000680 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000684 0050A0E1 MOV R5,R0 2858 if (edchat_id) \ 00000688 800196E5 LDR R0,[R6, #+384] \ 0000068C 000050E3 CMP R0,#+0 \ 00000690 7B00000A BEQ ??ProcessPacket_1 2859 { 2860 void *data=FindGUIbyId(edchat_id,NULL); \ 00000694 800196E5 LDR R0,[R6, #+384] \ 00000698 0010A0E3 MOV R1,#+0 \ 0000069C 090200EF SWI +521 \ 000006A0 0070B0E1 MOVS R7,R0 2861 if (data) \ 000006A4 7600000A BEQ ??ProcessPacket_1 2862 { 2863 EDCHAT_STRUCT *ed_struct; 2864 ed_struct=EDIT_GetUserPointer(data); \ 000006A8 DF0100EF SWI +479 2865 if (ed_struct) \ 000006AC 000050E3 CMP R0,#+0 \ 000006B0 7300000A BEQ ??ProcessPacket_1 2866 { 2867 if (ed_struct->ed_contact==t) \ 000006B4 000090E5 LDR R0,[R0, #+0] \ 000006B8 050050E1 CMP R0,R5 \ 000006BC 7000001A BNE ??ProcessPacket_1 2868 { 2869 if (EDIT_IsBusy(data)) \ 000006C0 0700A0E1 MOV R0,R7 \ 000006C4 1C0200EF SWI +540 \ 000006C8 000050E3 CMP R0,#+0 \ 000006CC 0300000A BEQ ??ProcessPacket_41 2870 { 2871 t->req_drawack=1; \ 000006D0 6CB085E5 STR R11,[R5, #+108] 2872 time_to_stop_t9=3; \ 000006D4 0300A0E3 MOV R0,#+3 \ 000006D8 980186E5 STR R0,[R6, #+408] \ 000006DC 680000EA B ??ProcessPacket_1 2873 } 2874 else 2875 DrawAck(data); \ ??ProcessPacket_41: \ 000006E0 0700A0E1 MOV R0,R7 \ 000006E4 ........ BL DrawAck \ 000006E8 650000EA B ??ProcessPacket_1 2876 } 2877 } 2878 } 2879 } 2880 } 2881 break; 2882 case T_XTEXT_ACK: 2883 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_42: \ 000006EC ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000006F0 0050B0E1 MOVS R5,R0 2884 if (t) \ 000006F4 6200000A BEQ ??ProcessPacket_1 2885 { 2886 int i; 2887 int j; 2888 FreeXText(t); \ 000006F8 ........ _BLF FreeXText,??FreeXText??rA 2889 i=p->pkt.data_len; \ 000006FC B660D4E1 LDRH R6,[R4, #+6] 2890 memcpy(t->xtext=malloc(i),p->data,i); \ 00000700 0600A0E1 MOV R0,R6 \ 00000704 140000EF SWI +20 \ 00000708 840085E5 STR R0,[R5, #+132] \ 0000070C 0620A0E1 MOV R2,R6 \ 00000710 081084E2 ADD R1,R4,#+8 \ 00000714 1E0100EF SWI +286 2891 zeromem(s,256); \ 00000718 401FA0E3 MOV R1,#+256 \ 0000071C 0C008DE2 ADD R0,SP,#+12 \ 00000720 1D0100EF SWI +285 2892 strcpy(s,t->name); \ 00000724 141085E2 ADD R1,R5,#+20 \ 00000728 0C008DE2 ADD R0,SP,#+12 \ 0000072C 1A0000EF SWI +26 2893 strcat(s,":\n"); \ 00000730 571F8FE2 ADR R1,??ProcessPacket_18 ;; ":\n" \ 00000734 0C008DE2 ADD R0,SP,#+12 \ 00000738 170000EF SWI +23 2894 i=strlen(s); \ 0000073C 0C008DE2 ADD R0,SP,#+12 \ 00000740 1B0000EF SWI +27 2895 j=p->data[0]; \ 00000744 0860D4E5 LDRB R6,[R4, #+8] \ 00000748 0070A0E1 MOV R7,R0 2896 if (j>(255-i)) j=255-i; \ 0000074C FF0067E2 RSB R0,R7,#+255 \ 00000750 060050E1 CMP R0,R6 \ 00000754 0060A0B1 MOVLT R6,R0 2897 strncpy(s+i,p->data+1,j); \ 00000758 0620A0E1 MOV R2,R6 \ 0000075C 091084E2 ADD R1,R4,#+9 \ 00000760 0C008DE2 ADD R0,SP,#+12 \ 00000764 000087E0 ADD R0,R7,R0 \ 00000768 160100EF SWI +278 2898 i+=j; \ 0000076C 070086E0 ADD R0,R6,R7 2899 if (i<255) \ 00000770 FF0050E3 CMP R0,#+255 \ 00000774 100000AA BGE ??ProcessPacket_43 2900 { 2901 s[i]='\n'; \ 00000778 0C108DE2 ADD R1,SP,#+12 \ 0000077C 0A20A0E3 MOV R2,#+10 \ 00000780 0120C0E7 STRB R2,[R0, +R1] 2902 i++; \ 00000784 0810D4E5 LDRB R1,[R4, #+8] \ 00000788 B620D4E1 LDRH R2,[R4, #+6] \ 0000078C 010080E2 ADD R0,R0,#+1 2903 j=p->pkt.data_len-p->data[0]-1; 2904 if (j>(255-i)) j=255-i; 2905 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000790 0C308DE2 ADD R3,SP,#+12 \ 00000794 012042E0 SUB R2,R2,R1 \ 00000798 016042E2 SUB R6,R2,#+1 \ 0000079C FF2060E2 RSB R2,R0,#+255 \ 000007A0 060052E1 CMP R2,R6 \ 000007A4 0260A0B1 MOVLT R6,R2 \ 000007A8 0620A0E1 MOV R2,R6 \ 000007AC 041081E0 ADD R1,R1,R4 \ 000007B0 091081E2 ADD R1,R1,#+9 \ 000007B4 030080E0 ADD R0,R0,R3 \ 000007B8 160100EF SWI +278 2906 } 2907 #ifdef EVILFOX 2908 #else 2909 // if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); 2910 if (!edchat_id && // Только если редактор не наверху 2911 strlen(p->data)) // и x-status не пустой 2912 ShowMSG(0,(int)s); 2913 #endif 2914 zeromem(s,256); \ ??ProcessPacket_43: \ 000007BC 401FA0E3 MOV R1,#+256 \ 000007C0 0C008DE2 ADD R0,SP,#+12 \ 000007C4 1D0100EF SWI +285 2915 i=0; 2916 j=p->data[0]; \ 000007C8 0860D4E5 LDRB R6,[R4, #+8] 2917 if (j>(255-i)) j=255-i; 2918 strncpy(s,p->data+1,j); \ 000007CC 091084E2 ADD R1,R4,#+9 \ 000007D0 0C008DE2 ADD R0,SP,#+12 \ 000007D4 400F56E3 CMP R6,#+256 \ 000007D8 FF60A0A3 MOVGE R6,#+255 \ 000007DC 0620A0E1 MOV R2,R6 \ 000007E0 160100EF SWI +278 2919 i+=j; 2920 if (i<255) \ 000007E4 FF0056E3 CMP R6,#+255 \ 000007E8 100000AA BGE ??ProcessPacket_44 2921 { 2922 s[i++]=13; \ 000007EC 0C108DE2 ADD R1,SP,#+12 \ 000007F0 0D20A0E3 MOV R2,#+13 \ 000007F4 0120C6E7 STRB R2,[R6, +R1] \ 000007F8 0810D4E5 LDRB R1,[R4, #+8] \ 000007FC B620D4E1 LDRH R2,[R4, #+6] \ 00000800 010086E2 ADD R0,R6,#+1 2923 j=p->pkt.data_len-p->data[0]-1; 2924 if (j>(255-i)) j=255-i; 2925 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000804 0C308DE2 ADD R3,SP,#+12 \ 00000808 012042E0 SUB R2,R2,R1 \ 0000080C 016042E2 SUB R6,R2,#+1 \ 00000810 FF2060E2 RSB R2,R0,#+255 \ 00000814 060052E1 CMP R2,R6 \ 00000818 0260A0B1 MOVLT R6,R2 \ 0000081C 0620A0E1 MOV R2,R6 \ 00000820 041081E0 ADD R1,R1,R4 \ 00000824 091081E2 ADD R1,R1,#+9 \ 00000828 030080E0 ADD R0,R0,R3 \ 0000082C 160100EF SWI +278 2926 } 2927 AddStringToLog(t,0x03,s,x_status_change,0xFFFFFFFF); \ ??ProcessPacket_44: \ 00000830 0900E0E1 MVN R0,R9 \ 00000834 01002DE9 PUSH {R0} \ 00000838 AC3F88E2 ADD R3,R8,#+688 \ 0000083C 10208DE2 ADD R2,SP,#+16 \ 00000840 0310A0E3 MOV R1,#+3 \ 00000844 0500A0E1 MOV R0,R5 \ 00000848 ........ BL AddStringToLog 2928 ReqAddMsgToChat(t); \ 0000084C 0500A0E1 MOV R0,R5 \ 00000850 ........ BL ReqAddMsgToChat 2929 if (strlen(p->data)) // Если x-status не пустой \ 00000854 080084E2 ADD R0,R4,#+8 \ 00000858 1B0000EF SWI +27 \ 0000085C 000050E3 CMP R0,#+0 \ 00000860 04D08DE2 ADD SP,SP,#+4 2930 RecountMenu(t, 1); \ 00000864 0110A013 MOVNE R1,#+1 \ 00000868 0500A011 MOVNE R0,R5 \ 0000086C 15FEFF1A BNE ??ProcessPacket_7 2931 else 2932 RecountMenu(NULL, 0); \ 00000870 0010A0E3 MOV R1,#+0 \ 00000874 0100A0E1 MOV R0,R1 \ 00000878 12FEFFEA B ??ProcessPacket_7 2933 } 2934 break; 2935 case T_LASTPRIVACY: 2936 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_45: \ 0000087C 0800D4E5 LDRB R0,[R4, #+8] \ 00000880 400186E5 STR R0,[R6, #+320] 2937 break; 2938 } 2939 mfree(p); \ ??ProcessPacket_1: \ 00000884 0400A0E1 MOV R0,R4 \ 00000888 150000EF SWI +21 2940 } \ 0000088C 43DF8DE2 ADD SP,SP,#+268 \ 00000890 F08FBDE8 POP {R4-R11,PC} ;; return \ ??ProcessPacket_18: \ 00000894 3A0A0000 DC8 ":\n",+0 \ 00000898 ........ DC32 ENA_AUTO_XTXT \ 0000089C ........ DC32 sndGlobal \ 000008A0 ........ DC32 sndSrvMsg \ 000008A4 ........ DC32 sndMsg \ 000008A8 ........ DC32 ILL_RECV_FADE \ 000008AC ........ DC32 ILL_RECV_TMR \ 000008B0 ........ DC32 ILL_KEYS_RECV \ 000008B4 ........ DC32 ILL_DISP_RECV \ 000008B8 ........ DC32 `?_1` \ 000008BC ........ DC32 DEVELOP_IF \ 000008C0 ........ DC32 ILL_SEND_TMR \ 000008C4 ........ DC32 ILL_KEYS_SEND \ 000008C8 ........ DC32 ILL_DISP_SEND 2941 2942 2943 IPC_REQ tmr_gipc; \ In segment CODE, align 4, keep-with-next 2944 void process_active_timer(void) 2945 { 2946 #ifdef EVILFOX 2947 msg_away_timer++; 2948 if((msg_away_timer==AUTO_ENGADE)&&(Auto_Status==1)) \ process_active_timer: \ 00000000 ........ LDR R1,??DataTable95 ;; AUTO_ENGADE \ 00000004 70402DE9 PUSH {R4-R6,LR} \ 00000008 ........ LDR R4,??DataTable107 ;; S_ICONS \ 0000000C 001091E5 LDR R1,[R1, #+0] \ 00000010 EC0094E5 LDR R0,[R4, #+236] \ 00000014 010080E2 ADD R0,R0,#+1 \ 00000018 EC0084E5 STR R0,[R4, #+236] \ 0000001C 010050E1 CMP R0,R1 \ 00000020 0400001A BNE ??process_active_timer_0 \ 00000024 F8009FE5 LDR R0,??process_active_timer_1 ;; Auto_Status \ 00000028 000090E5 LDR R0,[R0, #+0] \ 0000002C 010050E3 CMP R0,#+1 \ 00000030 0000001A BNE ??process_active_timer_0 2949 away_engage(); \ 00000034 ........ BL away_engage 2950 #endif 2951 if (connect_state>2) \ ??process_active_timer_0: \ 00000038 540194E5 LDR R0,[R4, #+340] \ 0000003C 0050A0E3 MOV R5,#+0 \ 00000040 030050E3 CMP R0,#+3 \ 00000044 070000BA BLT ??process_active_timer_2 2952 { 2953 if (++tenseconds_to_ping>12) \ 00000048 880194E5 LDR R0,[R4, #+392] \ 0000004C 010080E2 ADD R0,R0,#+1 \ 00000050 880184E5 STR R0,[R4, #+392] \ 00000054 0D0050E3 CMP R0,#+13 \ 00000058 020000BA BLT ??process_active_timer_2 2954 { 2955 tenseconds_to_ping=0; 2956 SUBPROC((void *)do_ping); \ 0000005C C4009FE5 LDR R0,??process_active_timer_1+0x4 ;; do_ping \ 00000060 885184E5 STR R5,[R4, #+392] \ 00000064 710100EF SWI +369 2957 } 2958 } 2959 #ifdef EVILFOX 2960 if((ping_sec>=6)&&(Show_Ping)) \ ??process_active_timer_2: \ 00000068 C40094E5 LDR R0,[R4, #+196] \ 0000006C 060050E3 CMP R0,#+6 \ 00000070 140000BA BLT ??process_active_timer_3 \ 00000074 ........ LDR R1,??DataTable97 ;; Show_Ping \ 00000078 001091E5 LDR R1,[R1, #+0] \ 0000007C 000051E3 CMP R1,#+0 \ 00000080 1000000A BEQ ??process_active_timer_3 2961 { 2962 ping_sec=0; \ 00000084 C45084E5 STR R5,[R4, #+196] 2963 PingToServer2(); \ 00000088 1000A0E3 MOV R0,#+16 \ 0000008C 140000EF SWI +20 \ 00000090 0060A0E1 MOV R6,R0 \ 00000094 081086E2 ADD R1,R6,#+8 \ 00000098 0000A0E3 MOV R0,#+0 \ 0000009C B40000EF SWI +180 \ 000000A0 005086E5 STR R5,[R6, #+0] \ 000000A4 1200A0E3 MOV R0,#+18 \ 000000A8 B400C6E1 STRH R0,[R6, #+4] \ 000000AC 0800A0E3 MOV R0,#+8 \ 000000B0 B600C6E1 STRH R0,[R6, #+6] \ 000000B4 ........ LDR R0,??DataTable98 ;; SendAnswer \ 000000B8 0620A0E1 MOV R2,R6 \ 000000BC 0510A0E1 MOV R1,R5 \ 000000C0 710100EF SWI +369 \ 000000C4 010000EA B ??process_active_timer_4 2964 } 2965 else 2966 ping_sec++; \ ??process_active_timer_3: \ 000000C8 010080E2 ADD R0,R0,#+1 \ 000000CC C40084E5 STR R0,[R4, #+196] 2967 #endif 2968 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_4: \ 000000D0 ........ LDR R1,??DataTable99 ;; `?` \ 000000D4 A20FA0E3 MOV R0,#+648 \ 000000D8 012080E0 ADD R2,R0,R1 \ 000000DC 802084E5 STR R2,[R4, #+128] 2969 tmr_gipc.name_from=ipc_my_name; \ 000000E0 010080E0 ADD R0,R0,R1 \ 000000E4 840084E5 STR R0,[R4, #+132] 2970 tmr_gipc.data=NULL; \ 000000E8 885084E5 STR R5,[R4, #+136] 2971 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_TENSECONDS,&tmr_gipc); \ 000000EC 803084E2 ADD R3,R4,#+128 \ 000000F0 0420A0E3 MOV R2,#+4 \ 000000F4 B010A0E3 MOV R1,#+176 \ 000000F8 DE1C81E3 ORR R1,R1,#0xDE00 \ 000000FC 0900A0E3 MOV R0,#+9 \ 00000100 420C80E3 ORR R0,R0,#0x4200 \ 00000104 000100EF SWI +256 2972 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000108 ........ LDR R2,??DataTable109 ;; process_active_timer \ 0000010C 871EA0E3 MOV R1,#+2160 \ 00000110 1400A0E3 MOV R0,#+20 \ 00000114 540D80E3 ORR R0,R0,#0x1500 \ 00000118 040080E0 ADD R0,R0,R4 \ 0000011C 4D0000EF SWI +77 2973 } \ 00000120 7080BDE8 POP {R4-R6,PC} ;; return \ ??process_active_timer_1: \ 00000124 ........ DC32 Auto_Status \ 00000128 ........ DC32 do_ping 2974 2975 //=============================================================================================== \ In segment CODE, align 4, keep-with-next 2976 void method0(MAIN_GUI *data) 2977 { \ method0: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2978 int scr_w=ScreenW(); 2979 int scr_h=ScreenH(); 2980 /* DrawRoundedFrame(0,YDISP,scr_w-1,scr_h-1,0,0,0, 2981 GetPaletteAdrByColorIndex(0), 2982 GetPaletteAdrByColorIndex(20));*/ 2983 2984 DrawRectangle(0,YDISP,scr_w-1,scr_h-1,0, 2985 GetPaletteAdrByColorIndex(1), 2986 GetPaletteAdrByColorIndex(1)); 2987 #ifdef EVILFOX_2 2988 #else 2989 DrawImg(0,0,S_ICONS[ICON_LOGO]); 2990 #endif 2991 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //by BoBa 10.07 2992 wsprintf(data->ws1,LG_GRSTATESTRING,connect_state,RXstate,RX,TX,sendq_l,hostname,logmsg); \ 00000004 ........ LDR R8,??DataTable119 ;; `?` \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 888100EF SWI +33160 \ 00000010 0050A0E1 MOV R5,R0 \ 00000014 898100EF SWI +33161 \ 00000018 0060A0E1 MOV R6,R0 \ 0000001C 0100A0E3 MOV R0,#+1 \ 00000020 2E0100EF SWI +302 \ 00000024 0070A0E1 MOV R7,R0 \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 2E0100EF SWI +302 \ 00000030 80002DE9 PUSH {R7} \ 00000034 ........ LDR R7,??DataTable102 ;; S_ICONS \ 00000038 01002DE9 PUSH {R0} \ 0000003C 013046E2 SUB R3,R6,#+1 \ 00000040 012045E2 SUB R2,R5,#+1 \ 00000044 1810A0E3 MOV R1,#+24 \ 00000048 0000A0E3 MOV R0,#+0 \ 0000004C 01002DE9 PUSH {R0} \ 00000050 B40100EF SWI +436 \ 00000054 502097E5 LDR R2,[R7, #+80] \ 00000058 0010A0E3 MOV R1,#+0 \ 0000005C 0000A0E3 MOV R0,#+0 \ 00000060 230000EF SWI +35 \ 00000064 640197E5 LDR R0,[R7, #+356] \ 00000068 681197E5 LDR R1,[R7, #+360] \ 0000006C E420A0E3 MOV R2,#+228 \ 00000070 4C2D82E3 ORR R2,R2,#0x1300 \ 00000074 072082E0 ADD R2,R2,R7 \ 00000078 04002DE9 PUSH {R2} \ 0000007C 6420A0E3 MOV R2,#+100 \ 00000080 4C2D82E3 ORR R2,R2,#0x1300 \ 00000084 072082E0 ADD R2,R2,R7 \ 00000088 04002DE9 PUSH {R2} \ 0000008C 6C2197E5 LDR R2,[R7, #+364] \ 00000090 04002DE9 PUSH {R2} \ 00000094 02002DE9 PUSH {R1} \ 00000098 01002DE9 PUSH {R0} \ 0000009C 503197E5 LDR R3,[R7, #+336] \ 000000A0 542197E5 LDR R2,[R7, #+340] \ 000000A4 340094E5 LDR R0,[R4, #+52] \ 000000A8 AC1088E2 ADD R1,R8,#+172 \ 000000AC 240100EF SWI +292 2993 if (total_smiles) \ 000000B0 EC019FE5 LDR R0,??method0_0 ;; total_smiles \ 000000B4 001090E5 LDR R1,[R0, #+0] \ 000000B8 20D08DE2 ADD SP,SP,#+32 \ 000000BC 000051E3 CMP R1,#+0 \ 000000C0 0300000A BEQ ??method0_1 2994 { 2995 wstrcatprintf(data->ws1,"\nLoaded %d smiles",total_smiles); \ 000000C4 002090E5 LDR R2,[R0, #+0] \ 000000C8 340094E5 LDR R0,[R4, #+52] \ 000000CC E81088E2 ADD R1,R8,#+232 \ 000000D0 160200EF SWI +534 2996 } 2997 if (xstatuses_load) \ ??method0_1: \ 000000D4 CC019FE5 LDR R0,??method0_0+0x4 ;; xstatuses_load \ 000000D8 000090E5 LDR R0,[R0, #+0] \ 000000DC 000050E3 CMP R0,#+0 \ 000000E0 0400000A BEQ ??method0_2 2998 { 2999 wstrcatprintf(data->ws1,"\nLoaded %d xstatus",total_xstatuses); \ 000000E4 ........ LDR R0,??DataTable103 ;; total_xstatuses \ 000000E8 FC1088E2 ADD R1,R8,#+252 \ 000000EC 002090E5 LDR R2,[R0, #+0] \ 000000F0 340094E5 LDR R0,[R4, #+52] \ 000000F4 160200EF SWI +534 3000 } 3001 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 3002 FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ ??method0_2: \ 000000F8 1700A0E3 MOV R0,#+23 \ 000000FC 2E0100EF SWI +302 \ 00000100 00A0A0E1 MOV R10,R0 \ 00000104 0000A0E3 MOV R0,#+0 \ 00000108 2E0100EF SWI +302 \ 0000010C 00B0A0E1 MOV R11,R0 \ 00000110 0500A0E3 MOV R0,#+5 \ 00000114 C50100EF SWI +453 \ 00000118 00042DE9 PUSH {R10} \ 0000011C 00082DE9 PUSH {R11} \ 00000120 0010A0E3 MOV R1,#+0 \ 00000124 02002DE9 PUSH {R1} \ 00000128 049046E2 SUB R9,R6,#+4 \ 0000012C 000049E0 SUB R0,R9,R0 \ 00000130 043045E2 SUB R3,R5,#+4 \ 00000134 0810A0E3 MOV R1,#+8 \ 00000138 02002DE9 PUSH {R1} \ 0000013C 01002DE9 PUSH {R0} \ 00000140 340094E5 LDR R0,[R4, #+52] \ 00000144 1B20A0E3 MOV R2,#+27 \ 00000148 0310A0E3 MOV R1,#+3 \ 0000014C 4C0100EF SWI +332 3003 #ifdef EVILFOX 3004 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 00000150 380094E5 LDR R0,[R4, #+56] \ 00000154 442F88E2 ADD R2,R8,#+272 \ 00000158 101088E2 ADD R1,R8,#+16 \ 0000015C 240100EF SWI +292 3005 #else 3006 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); 3007 #endif 3008 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 3009 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 00000160 1700A0E3 MOV R0,#+23 \ 00000164 2E0100EF SWI +302 \ 00000168 00A0A0E1 MOV R10,R0 \ 0000016C 0000A0E3 MOV R0,#+0 \ 00000170 2E0100EF SWI +302 \ 00000174 00B0A0E1 MOV R11,R0 \ 00000178 0500A0E3 MOV R0,#+5 \ 0000017C C50100EF SWI +453 \ 00000180 00042DE9 PUSH {R10} \ 00000184 00082DE9 PUSH {R11} \ 00000188 0410A0E3 MOV R1,#+4 \ 0000018C 02002DE9 PUSH {R1} \ 00000190 043045E2 SUB R3,R5,#+4 \ 00000194 002049E0 SUB R2,R9,R0 \ 00000198 0510A0E3 MOV R1,#+5 \ 0000019C 02002DE9 PUSH {R1} \ 000001A0 0910A0E1 MOV R1,R9 \ 000001A4 02002DE9 PUSH {R1} \ 000001A8 380094E5 LDR R0,[R4, #+56] \ 000001AC C510A0E1 ASR R1,R5,#+1 \ 000001B0 4C0100EF SWI +332 \ 000001B4 28D08DE2 ADD SP,SP,#+40 3010 #ifdef EVILFOX 3011 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ 000001B8 900097E5 LDR R0,[R7, #+144] \ 000001BC 101088E2 ADD R1,R8,#+16 \ 000001C0 000050E3 CMP R0,#+0 \ 000001C4 380094E5 LDR R0,[R4, #+56] \ 000001C8 462F8812 ADDNE R2,R8,#+280 \ 000001CC 16208802 ADDEQ R2,R8,#+22 \ 000001D0 240100EF SWI +292 3012 #else 3013 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); 3014 #endif 3015 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 3016 scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 000001D4 1700A0E3 MOV R0,#+23 \ 000001D8 2E0100EF SWI +302 \ 000001DC 0070A0E1 MOV R7,R0 \ 000001E0 0000A0E3 MOV R0,#+0 \ 000001E4 2E0100EF SWI +302 \ 000001E8 00A0A0E1 MOV R10,R0 \ 000001EC 0500A0E3 MOV R0,#+5 \ 000001F0 C50100EF SWI +453 \ 000001F4 80002DE9 PUSH {R7} \ 000001F8 00042DE9 PUSH {R10} \ 000001FC 0110A0E3 MOV R1,#+1 \ 00000200 02002DE9 PUSH {R1} \ 00000204 C530A0E1 ASR R3,R5,#+1 \ 00000208 002049E0 SUB R2,R9,R0 \ 0000020C 0510A0E3 MOV R1,#+5 \ 00000210 02002DE9 PUSH {R1} \ 00000214 0910A0E1 MOV R1,R9 \ 00000218 02002DE9 PUSH {R1} \ 0000021C 380094E5 LDR R0,[R4, #+56] \ 00000220 0310A0E3 MOV R1,#+3 \ 00000224 4C0100EF SWI +332 3017 #ifdef EVILFOX_2 3018 DrawImg(15,220,(int)"4:\\zbin\\naticq\\img\\smiles_logo.png"); 3019 #endif 3020 #ifdef EVILFOX 3021 wsprintf(data->ws2,percent_t,"Mod by Evilfox 2nd"); \ 00000228 380094E5 LDR R0,[R4, #+56] \ 0000022C 482F88E2 ADD R2,R8,#+288 \ 00000230 101088E2 ADD R1,R8,#+16 \ 00000234 240100EF SWI +292 3022 DrawString(data->ws2,3,scr_h-8-GetFontYSIZE(FONT_MEDIUM_BOLD)-GetFontYSIZE(FONT_MEDIUM_BOLD), 3023 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 00000238 1700A0E3 MOV R0,#+23 \ 0000023C 2E0100EF SWI +302 \ 00000240 0080A0E1 MOV R8,R0 \ 00000244 0000A0E3 MOV R0,#+0 \ 00000248 2E0100EF SWI +302 \ 0000024C 00A0A0E1 MOV R10,R0 \ 00000250 0500A0E3 MOV R0,#+5 \ 00000254 C50100EF SWI +453 \ 00000258 0070A0E1 MOV R7,R0 \ 0000025C 0500A0E3 MOV R0,#+5 \ 00000260 C50100EF SWI +453 \ 00000264 00012DE9 PUSH {R8} \ 00000268 00042DE9 PUSH {R10} \ 0000026C 0110A0E3 MOV R1,#+1 \ 00000270 02002DE9 PUSH {R1} \ 00000274 043045E2 SUB R3,R5,#+4 \ 00000278 0510A0E3 MOV R1,#+5 \ 0000027C 02002DE9 PUSH {R1} \ 00000280 00022DE9 PUSH {R9} \ 00000284 081046E2 SUB R1,R6,#+8 \ 00000288 071041E0 SUB R1,R1,R7 \ 0000028C 002041E0 SUB R2,R1,R0 \ 00000290 380094E5 LDR R0,[R4, #+56] \ 00000294 0310A0E3 MOV R1,#+3 \ 00000298 4C0100EF SWI +332 \ 0000029C 28D08DE2 ADD SP,SP,#+40 3024 #endif 3025 } \ 000002A0 F08FBDE8 POP {R4-R11,PC} ;; return \ ??method0_0: \ 000002A4 ........ DC32 total_smiles \ 000002A8 ........ DC32 xstatuses_load 3026 \ In segment CODE, align 4, keep-with-next 3027 void method1(MAIN_GUI *data,void *(*malloc_adr)(int)) 3028 { \ method1: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3029 data->ws1=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 340084E5 STR R0,[R4, #+52] 3030 data->ws2=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 380084E5 STR R0,[R4, #+56] 3031 data->gui.state=1; \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 0C00C4E5 STRB R0,[R4, #+12] 3032 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 3033 \ In segment CODE, align 4, keep-with-next 3034 void method2(MAIN_GUI *data,void (*mfree_adr)(void *)) 3035 { \ method2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3036 FreeWS(data->ws1); \ 00000008 340094E5 LDR R0,[R4, #+52] \ 0000000C 290100EF SWI +297 3037 FreeWS(data->ws2); \ 00000010 380094E5 LDR R0,[R4, #+56] \ 00000014 290100EF SWI +297 3038 data->gui.state=0; \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 0C00C4E5 STRB R0,[R4, #+12] 3039 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 3040 \ In segment CODE, align 4, keep-with-next 3041 void method3(MAIN_GUI *data,void *(*malloc_adr)(int),void (*mfree_adr)(void *)) 3042 { \ method3: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3043 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 3044 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 3045 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 3046 \ In segment CODE, align 4, keep-with-next 3047 void method4(MAIN_GUI *data,void (*mfree_adr)(void *)) 3048 { 3049 if (data->gui.state!=2) \ method4: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 3050 return; 3051 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 3052 } \ 00000010 1EFF2FE1 BX LR ;; return 3053 \ In segment CODE, align 4, keep-with-next 3054 int method5(MAIN_GUI *data,GUI_MSG *msg) 3055 { \ method5: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0140A0E1 MOV R4,R1 3056 DirectRedrawGUI(); \ 0000000C 3F0100EF SWI +319 3057 if (msg->gbsmsg->msg==KEY_DOWN) \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 9320A0E3 MOV R2,#+147 \ 00000018 041090E5 LDR R1,[R0, #+4] \ 0000001C 402F82E3 ORR R2,R2,#0x100 \ 00000020 020051E1 CMP R1,R2 \ 00000024 2600001A BNE ??method5_0 3058 { 3059 switch(msg->gbsmsg->submess) \ 00000028 ........ LDR R5,??DataTable107 ;; S_ICONS \ 0000002C 080090E5 LDR R0,[R0, #+8] \ 00000030 ........ LDR R4,??DataTable132 ;; create_connect \ 00000034 0410A0E3 MOV R1,#+4 \ 00000038 541D81E3 ORR R1,R1,#0x1500 \ 0000003C 056081E0 ADD R6,R1,R5 \ 00000040 0370A0E3 MOV R7,#+3 \ 00000044 010050E2 SUBS R0,R0,#+1 \ 00000048 0600000A BEQ ??method5_1 \ 0000004C 030050E2 SUBS R0,R0,#+3 \ 00000050 0A00000A BEQ ??method5_2 \ 00000054 070050E2 SUBS R0,R0,#+7 \ 00000058 0A00000A BEQ ??method5_3 \ 0000005C 250050E2 SUBS R0,R0,#+37 \ 00000060 1000000A BEQ ??method5_4 \ 00000064 030000EA B ??method5_5 3060 { 3061 case LEFT_SOFT: 3062 #ifdef EVILFOX 3063 if (cltop) create_contactlist_menu(); \ ??method5_1: \ 00000068 900095E5 LDR R0,[R5, #+144] \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 F280BD08 POPEQ {R1,R4-R7,PC} \ 00000074 ........ BL create_contactlist_menu \ ??method5_5: \ 00000078 0000A0E3 MOV R0,#+0 \ 0000007C F280BDE8 POP {R1,R4-R7,PC} 3064 break; 3065 #else 3066 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 3067 #endif 3068 case RIGHT_SOFT: 3069 #ifdef EVILFOX 3070 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI \ ??method5_2: \ 00000080 0100A0E3 MOV R0,#+1 \ 00000084 F280BDE8 POP {R1,R4-R7,PC} 3071 #else 3072 if (cltop) create_contactlist_menu(); 3073 break; 3074 #endif 3075 case GREEN_BUTTON: 3076 disautorecconect=0; \ ??method5_3: \ 00000088 0000A0E3 MOV R0,#+0 \ 0000008C 240185E5 STR R0,[R5, #+292] 3077 if ((connect_state==0)&&(sock==-1)) \ 00000090 540195E5 LDR R0,[R5, #+340] \ 00000094 000050E3 CMP R0,#+0 \ 00000098 58019505 LDREQ R0,[R5, #+344] \ 0000009C 01007003 CMNEQ R0,#+1 \ 000000A0 0700001A BNE ??method5_0 3078 { 3079 GBS_DelTimer(&reconnect_tmr); \ 000000A4 010000EA B ??method5_6 3080 DNR_TRIES=3; 3081 SUBPROC((void *)create_connect); 3082 } 3083 break; 3084 case '0': 3085 SUBPROC((void*)end_socket); \ ??method5_4: \ 000000A8 ........ LDR R0,??DataTable136 ;; end_socket \ 000000AC 710100EF SWI +369 3086 GBS_DelTimer(&reconnect_tmr); \ ??method5_6: \ 000000B0 0600A0E1 MOV R0,R6 \ 000000B4 8C0100EF SWI +396 3087 DNR_TRIES=3; \ 000000B8 907185E5 STR R7,[R5, #+400] 3088 SUBPROC((void *)create_connect); \ 000000BC 0400A0E1 MOV R0,R4 \ 000000C0 710100EF SWI +369 3089 break; 3090 } 3091 } 3092 return(0); \ ??method5_0: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 F280BDE8 POP {R1,R4-R7,PC} ;; return 3093 } 3094 \ In segment CODE, align 4, keep-with-next 3095 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 3096 \ In segment CODE, align 4, keep-with-next 3097 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 3098 3099 const void * const gui_methods[11]={ 3100 (void *)method0, //Redraw 3101 (void *)method1, //Create 3102 (void *)method2, //Close 3103 (void *)method3, //Focus 3104 (void *)method4, //Unfocus 3105 (void *)method5, //OnKey 3106 0, 3107 (void *)kill_data, //method7, //Destroy 3108 (void *)method8, 3109 (void *)method9, 3110 0 3111 }; 3112 3113 const RECT Canvas={0,0,0,0}; 3114 \ In segment CODE, align 4, keep-with-next 3115 void maincsm_oncreate(CSM_RAM *data) 3116 { \ maincsm_oncreate: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 3117 strcpy(LG_MENU2, "Меню"); \ 00000004 ........ LDR R5,??DataTable107 ;; S_ICONS \ 00000008 ........ LDR R6,??DataTable119 ;; `?` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 4D1F86E2 ADD R1,R6,#+308 \ 00000014 BC00A0E3 MOV R0,#+188 \ 00000018 440D80E3 ORR R0,R0,#0x1100 \ 0000001C 050080E0 ADD R0,R0,R5 \ 00000020 1A0000EF SWI +26 3118 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000024 4000A0E3 MOV R0,#+64 \ 00000028 140000EF SWI +20 \ 0000002C 0070A0E1 MOV R7,R0 3119 MAIN_CSM*csm=(MAIN_CSM*)data; 3120 zeromem(main_gui,sizeof(MAIN_GUI)); \ 00000030 4010A0E3 MOV R1,#+64 \ 00000034 1D0100EF SWI +285 3121 patch_rect((RECT*)&Canvas,0,0,ScreenW()-1,ScreenH()-1); \ 00000038 898100EF SWI +33161 \ 0000003C 0080A0E1 MOV R8,R0 \ 00000040 888100EF SWI +33160 \ 00000044 011048E2 SUB R1,R8,#+1 \ 00000048 010040E2 SUB R0,R0,#+1 \ 0000004C 0080A0E3 MOV R8,#+0 \ 00000050 088086E5 STR R8,[R6, #+8] \ 00000054 BC00C6E1 STRH R0,[R6, #+12] \ 00000058 BE10C6E1 STRH R1,[R6, #+14] 3122 main_gui->gui.canvas=(void *)(&Canvas); \ 0000005C 080086E2 ADD R0,R6,#+8 \ 00000060 000087E5 STR R0,[R7, #+0] 3123 // main_gui->gui.flag30=2; 3124 main_gui->gui.methods=(void *)gui_methods; \ 00000064 B00F86E2 ADD R0,R6,#+704 \ 00000068 040087E5 STR R0,[R7, #+4] 3125 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 0000006C 158000EF SWI +32789 \ 00000070 200087E5 STR R0,[R7, #+32] 3126 csm->csm.state=0; \ 00000074 108084E5 STR R8,[R4, #+16] 3127 csm->csm.unk1=0; \ 00000078 148084E5 STR R8,[R4, #+20] 3128 maingui_id=csm->gui_id=CreateGUI(main_gui); \ 0000007C 0700A0E1 MOV R0,R7 \ 00000080 370100EF SWI +311 \ 00000084 280084E5 STR R0,[R4, #+40] \ 00000088 100185E5 STR R0,[R5, #+272] 3129 ews=AllocWS(16384); \ 0000008C 400CA0E3 MOV R0,#+16384 \ 00000090 250100EF SWI +293 3130 // MutexCreate(&contactlist_mtx); 3131 DNR_TRIES=3; 3132 // SUBPROC((void *)InitSmiles); 3133 // SUBPROC((void *)create_connect); 3134 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000094 ........ LDR R2,??DataTable109 ;; process_active_timer \ 00000098 1C0185E5 STR R0,[R5, #+284] \ 0000009C 0300A0E3 MOV R0,#+3 \ 000000A0 900185E5 STR R0,[R5, #+400] \ 000000A4 871EA0E3 MOV R1,#+2160 \ 000000A8 1400A0E3 MOV R0,#+20 \ 000000AC 540D80E3 ORR R0,R0,#0x1500 \ 000000B0 050080E0 ADD R0,R0,R5 \ 000000B4 4D0000EF SWI +77 3135 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000B8 ........ LDR R0,??DataTable142 ;; UIN \ 000000BC 131086E2 ADD R1,R6,#+19 \ 000000C0 002090E5 LDR R2,[R0, #+0] \ 000000C4 8E00A0E3 MOV R0,#+142 \ 000000C8 800F80E3 ORR R0,R0,#0x200 \ 000000CC 060080E0 ADD R0,R0,R6 \ 000000D0 160000EF SWI +22 3136 gipc.name_to=ipc_my_name; \ 000000D4 A20FA0E3 MOV R0,#+648 \ 000000D8 061080E0 ADD R1,R0,R6 \ 000000DC 741085E5 STR R1,[R5, #+116] 3137 gipc.name_from=ipc_my_name; \ 000000E0 060080E0 ADD R0,R0,R6 \ 000000E4 780085E5 STR R0,[R5, #+120] 3138 gipc.data=(void *)-1; \ 000000E8 0800E0E1 MVN R0,R8 \ 000000EC 7C0085E5 STR R0,[R5, #+124] 3139 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 000000F0 743085E2 ADD R3,R5,#+116 \ 000000F4 0120A0E3 MOV R2,#+1 \ 000000F8 B010A0E3 MOV R1,#+176 \ 000000FC DE1C81E3 ORR R1,R1,#0xDE00 \ 00000100 0900A0E3 MOV R0,#+9 \ 00000104 420C80E3 ORR R0,R0,#0x4200 \ 00000108 000100EF SWI +256 3140 } \ 0000010C F081BDE8 POP {R4-R8,PC} ;; return 3141 \ In segment CODE, align 4, keep-with-next 3142 void maincsm_onclose(CSM_RAM *csm) 3143 { \ maincsm_onclose: \ 00000000 10402DE9 PUSH {R4,LR} 3144 WriteDefSettings(); 3145 // SaveConfigData(successed_config_filename); 3146 3147 /* 3148 #pragma segment="CONFIG_C" 3149 unsigned int ul; 3150 int f; 3151 extern const CFG_HDR cfghdr0; //first var in CONFIG 3152 void *cfg=(void*)&cfghdr0; 3153 unsigned int len=(int)__segment_end("CONFIG_C")-(int)__segment_begin("CONFIG_C"); 3154 3155 if ((f=fopen("4:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul))==-1){ 3156 f=fopen("0:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul); 3157 } 3158 fwrite(f,cfg,len,&ul); 3159 fclose(f,&ul); 3160 */ 3161 3162 // GBS_DelTimer(&tmr_dorecv); 3163 GBS_DelTimer(&tmr_active); \ 00000004 ........ LDR R4,??DataTable140 ;; S_ICONS \ 00000008 ........ BL WriteDefSettings \ 0000000C 1400A0E3 MOV R0,#+20 \ 00000010 540D80E3 ORR R0,R0,#0x1500 \ 00000014 040080E0 ADD R0,R0,R4 \ 00000018 8C0100EF SWI +396 3164 // GBS_DelTimer(&tmr_ping); 3165 #ifdef EVILFOX 3166 #ifdef ELKA 3167 GBS_DelTimer(&mytmr); \ 0000001C D00F84E2 ADD R0,R4,#+832 \ 00000020 8C0100EF SWI +396 3168 #endif 3169 GBS_DelTimer(&ctmr); \ 00000024 D40F84E2 ADD R0,R4,#+848 \ 00000028 8C0100EF SWI +396 3170 GBS_DelTimer(&incs); \ 0000002C F50F84E2 ADD R0,R4,#+980 \ 00000030 8C0100EF SWI +396 3171 RemoveKeybMsgHook((void *)my_keyhook); \ 00000034 ........ LDR R0,??DataTable149 ;; my_keyhook \ 00000038 2D0100EF SWI +301 3172 #endif 3173 GBS_DelTimer(&tmr_vibra); \ 0000003C F400A0E3 MOV R0,#+244 \ 00000040 500D80E3 ORR R0,R0,#0x1400 \ 00000044 040080E0 ADD R0,R0,R4 \ 00000048 8C0100EF SWI +396 3174 GBS_DelTimer(&reconnect_tmr); \ 0000004C 0400A0E3 MOV R0,#+4 \ 00000050 540D80E3 ORR R0,R0,#0x1500 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 8C0100EF SWI +396 3175 GBS_DelTimer(&tmr_illumination); \ 0000005C E400A0E3 MOV R0,#+228 \ 00000060 500D80E3 ORR R0,R0,#0x1400 \ 00000064 040080E0 ADD R0,R0,R4 \ 00000068 8C0100EF SWI +396 3176 SetVibration(0); \ 0000006C 0000A0E3 MOV R0,#+0 \ 00000070 7C0000EF SWI +124 3177 FreeTemplates(); \ 00000074 ........ BL FreeTemplates 3178 FreeCLIST(); \ 00000078 ........ _BLF FreeCLIST,??FreeCLIST??rA 3179 free_ICONS(); \ 0000007C ........ BL free_ICONS 3180 // FreeSmiles(); 3181 FreeWS(ews); \ 00000080 1C0194E5 LDR R0,[R4, #+284] \ 00000084 290100EF SWI +297 3182 FreeXStatusText(); \ 00000088 ........ _BLF FreeXStatusText,??FreeXStatusText??rA 3183 // MutexDestroy(&contactlist_mtx); 3184 SUBPROC((void *)FreeSmiles); \ 0000008C 24009FE5 LDR R0,??maincsm_onclose_0 ;; FreeSmiles \ 00000090 710100EF SWI +369 3185 SUBPROC((void *)FreeXStatusesImg); \ 00000094 20009FE5 LDR R0,??maincsm_onclose_0+0x4 ;; FreeXStatusesImg \ 00000098 710100EF SWI +369 3186 SUBPROC((void *)end_socket); \ 0000009C ........ LDR R0,??DataTable136 ;; end_socket \ 000000A0 710100EF SWI +369 3187 SUBPROC((void *)ClearSendQ); \ 000000A4 ........ LDR R0,??DataTable137 ;; ClearSendQ \ 000000A8 710100EF SWI +369 3188 SUBPROC((void *)ElfKiller); \ 000000AC ........ LDR R0,??DataTable144 ;; ElfKiller \ 000000B0 710100EF SWI +369 3189 } \ 000000B4 1080BDE8 POP {R4,PC} ;; return \ ??maincsm_onclose_0: \ 000000B8 ........ DC32 FreeSmiles \ 000000BC ........ DC32 FreeXStatusesImg 3190 \ In segment CODE, align 4, keep-with-next 3191 void do_reconnect(void) 3192 { 3193 if (is_gprs_online) \ do_reconnect: \ 00000000 ........ LDR R0,??DataTable140 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 741190E5 LDR R1,[R0, #+372] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 3194 { 3195 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 901180E5 STR R1,[R0, #+400] 3196 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable132 ;; create_connect \ 00000020 710100EF SWI +369 3197 } 3198 } \ 00000024 0080BDE8 POP {PC} ;; return 3199 \ In segment CODE, align 4, keep-with-next 3200 void CheckDoubleRun(void) 3201 { \ CheckDoubleRun: \ 00000000 10402DE9 PUSH {R4,LR} 3202 int csm_id; 3203 if ((csm_id=(int)(gipc.data))!=-1) \ 00000004 ........ LDR R4,??DataTable140 ;; S_ICONS \ 00000008 7C0094E5 LDR R0,[R4, #+124] \ 0000000C 010070E3 CMN R0,#+1 \ 00000010 1100000A BEQ ??CheckDoubleRun_0 3204 { 3205 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable119 ;; `?` 3206 gipc.name_from=ipc_my_name; 3207 gipc.data=(void *)csm_id; \ 00000018 7C0084E5 STR R0,[R4, #+124] \ 0000001C AA2F81E2 ADD R2,R1,#+680 \ 00000020 742084E5 STR R2,[R4, #+116] \ 00000024 A21F81E2 ADD R1,R1,#+648 \ 00000028 781084E5 STR R1,[R4, #+120] 3208 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 0000002C 743084E2 ADD R3,R4,#+116 \ 00000030 0220A0E3 MOV R2,#+2 \ 00000034 B010A0E3 MOV R1,#+176 \ 00000038 DE1C81E3 ORR R1,R1,#0xDE00 \ 0000003C 0900A0E3 MOV R0,#+9 \ 00000040 420C80E3 ORR R0,R0,#0x4200 \ 00000044 000100EF SWI +256 3209 LockSched(); \ 00000048 460100EF SWI +326 3210 CloseCSM(maincsm_id); \ 0000004C 0C0194E5 LDR R0,[R4, #+268] \ 00000050 FC0100EF SWI +508 3211 //ShowMSG(1,(int)LG_ALREADY_STARTED); 3212 UnlockSched(); \ 00000054 470100EF SWI +327 \ 00000058 1080BDE8 POP {R4,PC} 3213 } 3214 else 3215 { 3216 InitXStatusesImg(); \ ??CheckDoubleRun_0: \ 0000005C ........ _BLF InitXStatusesImg,??InitXStatusesImg??rA 3217 //InitSmiles(); Это вызовется из InitXStatusesImg 3218 create_connect(); \ 00000060 ........ BL create_connect 3219 } 3220 } \ 00000064 1080BDE8 POP {R4,PC} ;; return 3221 \ In segment CODE, align 4, keep-with-next 3222 int maincsm_onmessage(CSM_RAM *data,GBS_MSG *msg) 3223 { \ maincsm_onmessage: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 18D04DE2 SUB SP,SP,#+24 3224 extern const int VIBR_ON_CONNECT; 3225 3226 // char ss[100]; 3227 MAIN_CSM *csm=(MAIN_CSM*)data; 3228 { 3229 //IPC 3230 if (msg->msg==MSG_IPC) \ 00000008 ........ LDR R5,??DataTable120 ;; S_ICONS \ 0000000C ........ LDR R7,??DataTable141 ;; `?` \ 00000010 0140A0E1 MOV R4,R1 \ 00000014 040094E5 LDR R0,[R4, #+4] \ 00000018 0060A0E3 MOV R6,#+0 \ 0000001C B010A0E3 MOV R1,#+176 \ 00000020 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000024 010050E1 CMP R0,R1 \ 00000028 5900001A BNE ??maincsm_onmessage_1 3231 { 3232 IPC_REQ *ipc; 3233 if ((ipc=(IPC_REQ*)msg->data0)) \ 0000002C 0C8094E5 LDR R8,[R4, #+12] \ 00000030 000058E3 CMP R8,#+0 \ 00000034 5600000A BEQ ??maincsm_onmessage_1 3234 { 3235 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000038 000098E5 LDR R0,[R8, #+0] \ 0000003C A29FA0E3 MOV R9,#+648 \ 00000040 071089E0 ADD R1,R9,R7 \ 00000044 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 5000001A BNE ??maincsm_onmessage_1 3236 { 3237 switch (msg->submess) \ 00000050 081094E5 LDR R1,[R4, #+8] \ 00000054 040098E5 LDR R0,[R8, #+4] \ 00000058 011051E2 SUBS R1,R1,#+1 \ 0000005C 0600000A BEQ ??maincsm_onmessage_2 \ 00000060 011051E2 SUBS R1,R1,#+1 \ 00000064 0D00000A BEQ ??maincsm_onmessage_3 \ 00000068 011051E2 SUBS R1,R1,#+1 \ 0000006C 1200000A BEQ ??maincsm_onmessage_4 \ 00000070 011051E2 SUBS R1,R1,#+1 \ 00000074 1500000A BEQ ??maincsm_onmessage_5 \ 00000078 450000EA B ??maincsm_onmessage_1 3238 { 3239 case IPC_CHECK_DOUBLERUN: 3240 //Если приняли свое собственное сообщение, значит запускаем чекер 3241 if (ipc->name_from==ipc_my_name) SUBPROC((void *)CheckDoubleRun); \ ??maincsm_onmessage_2: \ 0000007C 071089E0 ADD R1,R9,R7 \ 00000080 010050E1 CMP R0,R1 \ 00000084 0200001A BNE ??maincsm_onmessage_6 \ 00000088 DC099FE5 LDR R0,??maincsm_onmessage_7 ;; CheckDoubleRun \ 0000008C 710100EF SWI +369 \ 00000090 3F0000EA B ??maincsm_onmessage_1 3242 else ipc->data=(void *)maincsm_id; \ ??maincsm_onmessage_6: \ 00000094 0C0195E5 LDR R0,[R5, #+268] \ 00000098 080088E5 STR R0,[R8, #+8] \ 0000009C 3C0000EA B ??maincsm_onmessage_1 3243 break; 3244 case IPC_SMILE_PROCESSED: 3245 //Только собственные смайлы ;) 3246 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextSmile); \ ??maincsm_onmessage_3: \ 000000A0 071089E0 ADD R1,R9,R7 \ 000000A4 010050E1 CMP R0,R1 \ 000000A8 0100001A BNE ??maincsm_onmessage_8 \ 000000AC BC099FE5 LDR R0,??maincsm_onmessage_7+0x4 ;; ProcessNextSmile \ ??maincsm_onmessage_9: \ 000000B0 710100EF SWI +369 3247 SMART_REDRAW(); \ ??maincsm_onmessage_8: \ 000000B4 ........ BL SMART_REDRAW \ 000000B8 350000EA B ??maincsm_onmessage_1 3248 break; 3249 case IPC_XSTATUSIMG_PROCESSED: 3250 //Только собственные иксстатусы ;) 3251 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextXStatImg); \ ??maincsm_onmessage_4: \ 000000BC 071089E0 ADD R1,R9,R7 \ 000000C0 010050E1 CMP R0,R1 \ 000000C4 FAFFFF1A BNE ??maincsm_onmessage_8 \ 000000C8 A4099FE5 LDR R0,??maincsm_onmessage_7+0x8 ;; ProcessNextXStatImg \ 000000CC F7FFFFEA B ??maincsm_onmessage_9 3252 SMART_REDRAW(); 3253 break; 3254 case IPC_TENSECONDS: 3255 //Только свое сообщение 3256 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_5: \ 000000D0 071089E0 ADD R1,R9,R7 \ 000000D4 010050E1 CMP R0,R1 \ 000000D8 2D00001A BNE ??maincsm_onmessage_1 3257 { 3258 CLIST *t=(CLIST *)cltop; \ 000000DC 900095E5 LDR R0,[R5, #+144] 3259 int f=0; \ 000000E0 0010A0E3 MOV R1,#+0 \ 000000E4 000050E3 CMP R0,#+0 \ 000000E8 1E00000A BEQ ??maincsm_onmessage_10 3260 while(t) 3261 { 3262 if(t->just_now) \ ??maincsm_onmessage_11: \ 000000EC 5C2090E5 LDR R2,[R0, #+92] \ 000000F0 000052E3 CMP R2,#+0 \ 000000F4 0600000A BEQ ??maincsm_onmessage_12 3263 { 3264 if (!(--(t->just_now))) { \ 000000F8 012052E2 SUBS R2,R2,#+1 \ 000000FC 5C2080E5 STR R2,[R0, #+92] \ 00000100 0300001A BNE ??maincsm_onmessage_12 3265 f=1; 3266 #ifdef EVILFOX 3267 total_c_online--; \ 00000104 982095E5 LDR R2,[R5, #+152] \ 00000108 0110A0E3 MOV R1,#+1 \ 0000010C 012042E2 SUB R2,R2,#+1 \ 00000110 982085E5 STR R2,[R5, #+152] 3268 #endif 3269 } 3270 } 3271 if (t->isactive) \ ??maincsm_onmessage_12: \ 00000114 7C2090E5 LDR R2,[R0, #+124] \ 00000118 000052E3 CMP R2,#+0 \ 0000011C 0200000A BEQ ??maincsm_onmessage_13 3272 { 3273 if (!(--(t->isactive))) f=1; //Если дошли до 0 хотя бы один раз - надо перерисовать меню \ 00000120 012052E2 SUBS R2,R2,#+1 \ 00000124 7C2080E5 STR R2,[R0, #+124] \ 00000128 0110A003 MOVEQ R1,#+1 3274 } 3275 t=(CLIST *)(t->next); \ ??maincsm_onmessage_13: \ 0000012C 000090E5 LDR R0,[R0, #+0] 3276 } \ 00000130 000050E3 CMP R0,#+0 \ 00000134 ECFFFF1A BNE ??maincsm_onmessage_11 3277 if (f) \ 00000138 000051E3 CMP R1,#+0 \ 0000013C 0900000A BEQ ??maincsm_onmessage_10 3278 { 3279 CLIST *oldt=NULL; 3280 if (contactlist_menu_id) \ 00000140 7C1195E5 LDR R1,[R5, #+380] \ 00000144 000051E3 CMP R1,#+0 \ 00000148 0400000A BEQ ??maincsm_onmessage_14 3281 { 3282 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 0000014C 7C0195E5 LDR R0,[R5, #+380] \ 00000150 0010A0E3 MOV R1,#+0 \ 00000154 090200EF SWI +521 \ 00000158 8F0100EF SWI +399 \ 0000015C ........ _BLF FindContactByN,??FindContactByN??rA 3283 } 3284 RecountMenu(oldt, 1); \ ??maincsm_onmessage_14: \ 00000160 0110A0E3 MOV R1,#+1 \ 00000164 ........ BL RecountMenu 3285 } 3286 if (time_to_stop_t9) \ ??maincsm_onmessage_10: \ 00000168 980195E5 LDR R0,[R5, #+408] \ 0000016C 000050E3 CMP R0,#+0 \ 00000170 0700000A BEQ ??maincsm_onmessage_1 3287 { 3288 if (!(--time_to_stop_t9)) \ 00000174 010050E2 SUBS R0,R0,#+1 \ 00000178 980185E5 STR R0,[R5, #+408] \ 0000017C 0400001A BNE ??maincsm_onmessage_1 3289 { 3290 if (IsGuiOnTop(edchat_id)) RefreshGUI(); \ 00000180 800195E5 LDR R0,[R5, #+384] \ 00000184 350100EF SWI +309 \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 0000000A BEQ ??maincsm_onmessage_1 \ 00000190 960100EF SWI +406 3291 } 3292 } 3293 } 3294 break; 3295 #ifdef EVILFOX 3296 #else 3297 case IPC_SENDMSG: ; //IPC_SENDMSG by BoBa 26.06.07 3298 int l=strlen(((IPCMsg *)(ipc->data))->msg); 3299 TPKT *msg=malloc(sizeof(PKT)+l); 3300 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; 3301 msg->pkt.type=T_SENDMSG; 3302 msg->pkt.data_len=l; 3303 memcpy(msg->data,((IPCMsg *)(ipc->data))->msg,l); 3304 //slientsend=1; 3305 SENDMSGCOUNT++; //Номер сообщения 3306 SUBPROC((void *)SendAnswer,0,msg); 3307 break; 3308 #endif 3309 } 3310 } 3311 } 3312 } 3313 //Нарисуем иконочку моего статуса 3314 #define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 3315 CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); \ ??maincsm_onmessage_1: \ 00000194 068100EF SWI +33030 \ 00000198 040090E5 LDR R0,[R0, #+4] 3316 if (IsGuiOnTop(idlegui_id)/*&&IsUnlocked()*/) //Если IdleGui на самом верху \ 0000019C 0180A0E3 MOV R8,#+1 \ 000001A0 080100EF SWI +264 \ 000001A4 2C0090E5 LDR R0,[R0, #+44] \ 000001A8 350100EF SWI +309 \ 000001AC 000050E3 CMP R0,#+0 \ 000001B0 3801000A BEQ ??maincsm_onmessage_15 3317 { 3318 GUI *igui=GetTopGUI(); 3319 if (igui) //И он существует \ 000001B4 4D0100EF SWI +333 \ 000001B8 000050E3 CMP R0,#+0 \ 000001BC 3701000A BEQ ??maincsm_onmessage_16 3320 { 3321 //// void *canvasdata=BuildCanvas(); 3322 canvasdata=BuildCanvas(); \ 000001C0 F18000EF SWI +33009 \ 000001C4 BC0085E5 STR R0,[R5, #+188] 3323 int icn; 3324 #ifdef EVILFOX 3325 if(time_draw) \ 000001C8 B80095E5 LDR R0,[R5, #+184] \ 000001CC 000050E3 CMP R0,#+0 \ 000001D0 3201000A BEQ ??maincsm_onmessage_16 3326 { 3327 #endif 3328 if (total_unread) \ 000001D4 8C1095E5 LDR R1,[R5, #+140] \ 000001D8 540195E5 LDR R0,[R5, #+340] \ 000001DC 000051E3 CMP R1,#+0 3329 icn=IS_MSG; \ 000001E0 0D90A013 MOVNE R9,#+13 \ 000001E4 0900001A BNE ??maincsm_onmessage_17 3330 else 3331 { 3332 switch(connect_state) \ 000001E8 0020B0E1 MOVS R2,R0 \ 000001EC 0200000A BEQ ??maincsm_onmessage_18 \ 000001F0 032050E2 SUBS R2,R0,#+3 \ 000001F4 0200000A BEQ ??maincsm_onmessage_19 \ 000001F8 030000EA B ??maincsm_onmessage_20 3333 { 3334 case 0: 3335 icn=IS_OFFLINE; break; \ ??maincsm_onmessage_18: \ 000001FC 0090A0E3 MOV R9,#+0 \ 00000200 020000EA B ??maincsm_onmessage_17 3336 case 3: 3337 icn=CurrentStatus; //IS_ONLINE; \ ??maincsm_onmessage_19: \ 00000204 389195E5 LDR R9,[R5, #+312] \ 00000208 000000EA B ??maincsm_onmessage_17 3338 break; 3339 default: 3340 icn=IS_UNKNOWN; break; \ ??maincsm_onmessage_20: \ 0000020C 0E90A0E3 MOV R9,#+14 3341 } 3342 } 3343 3344 //Тут трохи поменял 3345 // by Rainmaker: Рисуем канву только для иконки и выводим в своих координатах 3346 if((icon_change)||(total_unread)||(connect_state!=3)) \ ??maincsm_onmessage_17: \ 00000210 042195E5 LDR R2,[R5, #+260] \ 00000214 000052E3 CMP R2,#+0 \ 00000218 00005103 CMPEQ R1,#+0 \ 0000021C 03005003 CMPEQ R0,#+3 \ 00000220 1600000A BEQ ??maincsm_onmessage_21 \ 00000224 090195E7 LDR R0,[R5, +R9, LSL #+2] 3347 { 3348 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)S_ICONS[icn])-1, 3349 IDLEICON_Y+GetImgHeight((int)S_ICONS[icn])-1,1); \ 00000228 210000EF SWI +33 \ 0000022C 00008DE5 STR R0,[SP, #+0] \ 00000230 090195E7 LDR R0,[R5, +R9, LSL #+2] \ 00000234 220000EF SWI +34 \ 00000238 38189FE5 LDR R1,??maincsm_onmessage_7+0xC ;; IDLEICON_X \ 0000023C 00A091E5 LDR R10,[R1, #+0] \ 00000240 34189FE5 LDR R1,??maincsm_onmessage_7+0x10 ;; IDLEICON_Y \ 00000244 0A0080E0 ADD R0,R0,R10 \ 00000248 00B091E5 LDR R11,[R1, #+0] \ 0000024C 0110A0E3 MOV R1,#+1 \ 00000250 02002DE9 PUSH {R1} \ 00000254 04109DE5 LDR R1,[SP, #+4] \ 00000258 013040E2 SUB R3,R0,#+1 \ 0000025C 0B20A0E1 MOV R2,R11 \ 00000260 0B1081E0 ADD R1,R1,R11 \ 00000264 011041E2 SUB R1,R1,#+1 \ 00000268 02002DE9 PUSH {R1} \ 0000026C BC0095E5 LDR R0,[R5, #+188] \ 00000270 0A10A0E1 MOV R1,R10 \ 00000274 250000EF SWI +37 3350 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 00000278 092195E7 LDR R2,[R5, +R9, LSL #+2] \ 0000027C 210000EA B ??maincsm_onmessage_22 3351 } 3352 else 3353 { 3354 PNGTOP_DESC *pltop=PNG_TOP(); \ ??maincsm_onmessage_21: \ 00000280 B98100EF SWI +33209 3355 pltop->dyn_pltop=XStatusesImgList; \ 00000284 ........ LDR R1,??DataTable122 ;; XStatusesImgList \ 00000288 001091E5 LDR R1,[R1, #+0] \ 0000028C 081080E5 STR R1,[R0, #+8] \ 00000290 E8179FE5 LDR R1,??maincsm_onmessage_7+0x14 ;; XStatusesIconArray \ 00000294 3C0195E5 LDR R0,[R5, #+316] \ 00000298 001091E5 LDR R1,[R1, #+0] \ 0000029C 000191E7 LDR R0,[R1, +R0, LSL #+2] 3356 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)XStatusesIconArray[CurrentXStatus])-1, 3357 IDLEICON_Y+GetImgHeight((int)XStatusesIconArray[CurrentXStatus])-1,1); \ 000002A0 210000EF SWI +33 \ 000002A4 D4179FE5 LDR R1,??maincsm_onmessage_7+0x14 ;; XStatusesIconArray \ 000002A8 0090A0E1 MOV R9,R0 \ 000002AC 3C0195E5 LDR R0,[R5, #+316] \ 000002B0 001091E5 LDR R1,[R1, #+0] \ 000002B4 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 000002B8 220000EF SWI +34 \ 000002BC B4179FE5 LDR R1,??maincsm_onmessage_7+0xC ;; IDLEICON_X \ 000002C0 00A091E5 LDR R10,[R1, #+0] \ 000002C4 B0179FE5 LDR R1,??maincsm_onmessage_7+0x10 ;; IDLEICON_Y \ 000002C8 0A0080E0 ADD R0,R0,R10 \ 000002CC 00B091E5 LDR R11,[R1, #+0] \ 000002D0 0110A0E3 MOV R1,#+1 \ 000002D4 02002DE9 PUSH {R1} \ 000002D8 013040E2 SUB R3,R0,#+1 \ 000002DC 0B20A0E1 MOV R2,R11 \ 000002E0 0B1089E0 ADD R1,R9,R11 \ 000002E4 011041E2 SUB R1,R1,#+1 \ 000002E8 02002DE9 PUSH {R1} \ 000002EC BC0095E5 LDR R0,[R5, #+188] \ 000002F0 0A10A0E1 MOV R1,R10 \ 000002F4 250000EF SWI +37 3358 DrawImg(IDLEICON_X,IDLEICON_Y,XStatusesIconArray[CurrentXStatus]); \ 000002F8 80179FE5 LDR R1,??maincsm_onmessage_7+0x14 ;; XStatusesIconArray \ 000002FC 3C0195E5 LDR R0,[R5, #+316] \ 00000300 001091E5 LDR R1,[R1, #+0] \ 00000304 002191E7 LDR R2,[R1, +R0, LSL #+2] \ ??maincsm_onmessage_22: \ 00000308 0B10A0E1 MOV R1,R11 \ 0000030C 0A00A0E1 MOV R0,R10 \ 00000310 230000EF SWI +35 \ 00000314 08D08DE2 ADD SP,SP,#+8 3359 } 3360 #ifdef EVILFOX_2 3361 DrawImg(IDLEICON_X-1,IDLEICON_Y-8,(int)"4:\\zbin\\naticq\\img\\naticq_ms.png"); 3362 #endif 3363 #ifdef EVILFOX 3364 if(connect_state==3) \ 00000318 540195E5 LDR R0,[R5, #+340] \ 0000031C D89FA0E3 MOV R9,#+864 \ 00000320 030050E3 CMP R0,#+3 \ 00000324 0800001A BNE ??maincsm_onmessage_23 3365 sprintf(online_txt, "online: %02d:%02d:%02d", hours, minutes, seconds); \ 00000328 A40095E5 LDR R0,[R5, #+164] \ 0000032C 4F1F87E2 ADD R1,R7,#+316 \ 00000330 01002DE9 PUSH {R0} \ 00000334 A83095E5 LDR R3,[R5, #+168] \ 00000338 AC2095E5 LDR R2,[R5, #+172] \ 0000033C 050089E0 ADD R0,R9,R5 \ 00000340 160000EF SWI +22 \ 00000344 04D08DE2 ADD SP,SP,#+4 \ 00000348 020000EA B ??maincsm_onmessage_24 3366 else 3367 sprintf(online_txt ,"Offline"); \ ??maincsm_onmessage_23: \ 0000034C 551F87E2 ADD R1,R7,#+340 \ 00000350 050089E0 ADD R0,R9,R5 \ 00000354 160000EF SWI +22 3368 if(Is_Online_On) \ ??maincsm_onmessage_24: \ 00000358 ........ LDR R0,??DataTable146 ;; fonto \ 0000035C 00B090E5 LDR R11,[R0, #+0] \ 00000360 1C079FE5 LDR R0,??maincsm_onmessage_7+0x18 ;; Is_Online_On \ 00000364 000090E5 LDR R0,[R0, #+0] \ 00000368 000050E3 CMP R0,#+0 \ 0000036C 0B00000A BEQ ??maincsm_onmessage_25 3369 PrintField(ONTIME_X,ONTIME_Y, online_txt, align, fonto, spaco1r); \ 00000370 B40095E5 LDR R0,[R5, #+180] \ 00000374 052089E0 ADD R2,R9,R5 \ 00000378 01002DE9 PUSH {R0} \ 0000037C 0B00A0E1 MOV R0,R11 \ 00000380 01002DE9 PUSH {R0} \ 00000384 B03095E5 LDR R3,[R5, #+176] \ 00000388 F8069FE5 LDR R0,??maincsm_onmessage_7+0x1C ;; ONTIME_Y \ 0000038C 001090E5 LDR R1,[R0, #+0] \ 00000390 F4069FE5 LDR R0,??maincsm_onmessage_7+0x20 ;; ONTIME_X \ 00000394 000090E5 LDR R0,[R0, #+0] \ 00000398 ........ _BLF PrintField,??PrintField??rA \ 0000039C 08D08DE2 ADD SP,SP,#+8 3370 if(Show_Ping) \ ??maincsm_onmessage_25: \ 000003A0 ........ LDR R0,??DataTable124 ;; Show_Ping \ 000003A4 000090E5 LDR R0,[R0, #+0] \ 000003A8 000050E3 CMP R0,#+0 \ 000003AC 0B00000A BEQ ??maincsm_onmessage_26 3371 PrintField(PING_X,PING_Y, ping_txt, align, fonto, spaco1r); \ 000003B0 B40095E5 LDR R0,[R5, #+180] \ 000003B4 DD2F85E2 ADD R2,R5,#+884 \ 000003B8 01002DE9 PUSH {R0} \ 000003BC 0B00A0E1 MOV R0,R11 \ 000003C0 01002DE9 PUSH {R0} \ 000003C4 B03095E5 LDR R3,[R5, #+176] \ 000003C8 C0069FE5 LDR R0,??maincsm_onmessage_7+0x24 ;; PING_Y \ 000003CC 001090E5 LDR R1,[R0, #+0] \ 000003D0 BC069FE5 LDR R0,??maincsm_onmessage_7+0x28 ;; PING_X \ 000003D4 000090E5 LDR R0,[R0, #+0] \ 000003D8 ........ _BLF PrintField,??PrintField??rA \ 000003DC 08D08DE2 ADD SP,SP,#+8 3372 if(Is_Unread_On) \ ??maincsm_onmessage_26: \ 000003E0 B0069FE5 LDR R0,??maincsm_onmessage_7+0x2C ;; Is_Unread_On \ 000003E4 000090E5 LDR R0,[R0, #+0] \ 000003E8 000050E3 CMP R0,#+0 \ 000003EC 1000000A BEQ ??maincsm_onmessage_27 3373 { 3374 sprintf(unread_txt, "Unread: %d", total_unread2); \ 000003F0 942095E5 LDR R2,[R5, #+148] \ 000003F4 E19FA0E3 MOV R9,#+900 \ 000003F8 571F87E2 ADD R1,R7,#+348 \ 000003FC 050089E0 ADD R0,R9,R5 \ 00000400 160000EF SWI +22 3375 PrintField(UNREAD_X,UNREAD_Y, unread_txt, align, fonto, spaco1r); \ 00000404 B40095E5 LDR R0,[R5, #+180] \ 00000408 052089E0 ADD R2,R9,R5 \ 0000040C 01002DE9 PUSH {R0} \ 00000410 0B00A0E1 MOV R0,R11 \ 00000414 01002DE9 PUSH {R0} \ 00000418 B03095E5 LDR R3,[R5, #+176] \ 0000041C 78069FE5 LDR R0,??maincsm_onmessage_7+0x30 ;; UNREAD_Y \ 00000420 001090E5 LDR R1,[R0, #+0] \ 00000424 74069FE5 LDR R0,??maincsm_onmessage_7+0x34 ;; UNREAD_X \ 00000428 000090E5 LDR R0,[R0, #+0] \ 0000042C ........ _BLF PrintField,??PrintField??rA \ 00000430 08D08DE2 ADD SP,SP,#+8 3376 } 3377 if(Is_DRAWMAIN_On&&main_d) \ ??maincsm_onmessage_27: \ 00000434 ........ LDR R0,??DataTable125 ;; Is_DRAWMAIN_On \ 00000438 000090E5 LDR R0,[R0, #+0] \ 0000043C 000050E3 CMP R0,#+0 \ 00000440 D8009515 LDRNE R0,[R5, #+216] \ 00000444 00005013 CMPNE R0,#+0 \ 00000448 8400000A BEQ ??maincsm_onmessage_28 3378 { 3379 if(fonto==1) \ 0000044C 50069FE5 LDR R0,??maincsm_onmessage_7+0x38 ;; MSG_X \ 00000450 B03095E5 LDR R3,[R5, #+176] \ 00000454 2410A0E3 MOV R1,#+36 \ 00000458 4C1D81E3 ORR R1,R1,#0x1300 \ 0000045C 051081E0 ADD R1,R1,R5 \ 00000460 10108DE5 STR R1,[SP, #+16] \ 00000464 E410A0E3 MOV R1,#+228 \ 00000468 481D81E3 ORR R1,R1,#0x1200 \ 0000046C 051081E0 ADD R1,R1,R5 \ 00000470 0C108DE5 STR R1,[SP, #+12] \ 00000474 A410A0E3 MOV R1,#+164 \ 00000478 481D81E3 ORR R1,R1,#0x1200 \ 0000047C 051081E0 ADD R1,R1,R5 \ 00000480 08108DE5 STR R1,[SP, #+8] \ 00000484 6410A0E3 MOV R1,#+100 \ 00000488 481D81E3 ORR R1,R1,#0x1200 \ 0000048C 051081E0 ADD R1,R1,R5 \ 00000490 00108DE5 STR R1,[SP, #+0] \ 00000494 009090E5 LDR R9,[R0, #+0] \ 00000498 08069FE5 LDR R0,??maincsm_onmessage_7+0x3C ;; MSG_Y \ 0000049C 01005BE3 CMP R11,#+1 \ 000004A0 00A090E5 LDR R10,[R0, #+0] \ 000004A4 2400A0E3 MOV R0,#+36 \ 000004A8 480D80E3 ORR R0,R0,#0x1200 \ 000004AC 052080E0 ADD R2,R0,R5 \ 000004B0 3100001A BNE ??maincsm_onmessage_29 3380 { 3381 PrintField(MSG_X,MSG_Y, a_txt, align, fonto, spaco2); \ 000004B4 F0059FE5 LDR R0,??maincsm_onmessage_7+0x40 ;; spaco2 \ 000004B8 0A10A0E1 MOV R1,R10 \ 000004BC 00B090E5 LDR R11,[R0, #+0] \ 000004C0 0B00A0E1 MOV R0,R11 \ 000004C4 01002DE9 PUSH {R0} \ 000004C8 0100A0E3 MOV R0,#+1 \ 000004CC 01002DE9 PUSH {R0} \ 000004D0 0900A0E1 MOV R0,R9 \ 000004D4 ........ _BLF PrintField,??PrintField??rA 3382 PrintField(MSG_X,MSG_Y+paused_height+1, s_txt, align, fonto, spaco2); \ 000004D8 0B00A0E1 MOV R0,R11 \ 000004DC 01002DE9 PUSH {R0} \ 000004E0 0800A0E1 MOV R0,R8 \ 000004E4 01002DE9 PUSH {R0} \ 000004E8 B03095E5 LDR R3,[R5, #+176] \ 000004EC 10209DE5 LDR R2,[SP, #+16] \ 000004F0 DC0095E5 LDR R0,[R5, #+220] \ 000004F4 0A0080E0 ADD R0,R0,R10 \ 000004F8 011080E2 ADD R1,R0,#+1 \ 000004FC 0900A0E1 MOV R0,R9 \ 00000500 ........ _BLF PrintField,??PrintField??rA 3383 PrintField(MSG_X,MSG_Y+(2*paused_height)+2, d_txt, align, fonto, spaco2); \ 00000504 0B00A0E1 MOV R0,R11 \ 00000508 01002DE9 PUSH {R0} \ 0000050C 0800A0E1 MOV R0,R8 \ 00000510 01002DE9 PUSH {R0} \ 00000514 B03095E5 LDR R3,[R5, #+176] \ 00000518 20209DE5 LDR R2,[SP, #+32] \ 0000051C DC0095E5 LDR R0,[R5, #+220] \ 00000520 80008AE0 ADD R0,R10,R0, LSL #+1 \ 00000524 021080E2 ADD R1,R0,#+2 \ 00000528 0900A0E1 MOV R0,R9 \ 0000052C ........ _BLF PrintField,??PrintField??rA 3384 PrintField(MSG_X,MSG_Y+(3*paused_height)+3, f_txt, align, fonto, spaco2); \ 00000530 0B00A0E1 MOV R0,R11 \ 00000534 01002DE9 PUSH {R0} \ 00000538 0800A0E1 MOV R0,R8 \ 0000053C 01002DE9 PUSH {R0} \ 00000540 B03095E5 LDR R3,[R5, #+176] \ 00000544 2C209DE5 LDR R2,[SP, #+44] \ 00000548 DC0095E5 LDR R0,[R5, #+220] \ 0000054C 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000550 0A0080E0 ADD R0,R0,R10 \ 00000554 031080E2 ADD R1,R0,#+3 \ 00000558 0900A0E1 MOV R0,R9 \ 0000055C ........ _BLF PrintField,??PrintField??rA 3385 PrintField(MSG_X,MSG_Y+(4*paused_height)+4, g_txt, align, fonto, spaco2); \ 00000560 00082DE9 PUSH {R11} \ 00000564 0800A0E1 MOV R0,R8 \ 00000568 01002DE9 PUSH {R0} \ 0000056C B03095E5 LDR R3,[R5, #+176] \ 00000570 38209DE5 LDR R2,[SP, #+56] \ 00000574 DC0095E5 LDR R0,[R5, #+220] \ 00000578 320000EA B ??maincsm_onmessage_30 3386 } 3387 else 3388 { 3389 PrintField(MSG_X,MSG_Y, a_txt, align, fonto, spaco1r); \ ??maincsm_onmessage_29: \ 0000057C B40095E5 LDR R0,[R5, #+180] \ 00000580 0A10A0E1 MOV R1,R10 \ 00000584 01002DE9 PUSH {R0} \ 00000588 0B00A0E1 MOV R0,R11 \ 0000058C 01002DE9 PUSH {R0} \ 00000590 0900A0E1 MOV R0,R9 \ 00000594 ........ _BLF PrintField,??PrintField??rA 3390 PrintField(MSG_X,MSG_Y+GetFontYSIZE(paused_height)+1, s_txt, align, fonto, spaco1r); \ 00000598 DC0095E5 LDR R0,[R5, #+220] \ 0000059C C50100EF SWI +453 \ 000005A0 B41095E5 LDR R1,[R5, #+180] \ 000005A4 0A0080E0 ADD R0,R0,R10 \ 000005A8 02002DE9 PUSH {R1} \ 000005AC 0B10A0E1 MOV R1,R11 \ 000005B0 02002DE9 PUSH {R1} \ 000005B4 B03095E5 LDR R3,[R5, #+176] \ 000005B8 10209DE5 LDR R2,[SP, #+16] \ 000005BC 011080E2 ADD R1,R0,#+1 \ 000005C0 0900A0E1 MOV R0,R9 \ 000005C4 ........ _BLF PrintField,??PrintField??rA 3391 PrintField(MSG_X,MSG_Y+(2*GetFontYSIZE(paused_height))+2, d_txt, align, fonto, spaco1r); \ 000005C8 DC0095E5 LDR R0,[R5, #+220] \ 000005CC C50100EF SWI +453 \ 000005D0 B41095E5 LDR R1,[R5, #+180] \ 000005D4 80008AE0 ADD R0,R10,R0, LSL #+1 \ 000005D8 02002DE9 PUSH {R1} \ 000005DC 0B10A0E1 MOV R1,R11 \ 000005E0 02002DE9 PUSH {R1} \ 000005E4 B03095E5 LDR R3,[R5, #+176] \ 000005E8 20209DE5 LDR R2,[SP, #+32] \ 000005EC 021080E2 ADD R1,R0,#+2 \ 000005F0 0900A0E1 MOV R0,R9 \ 000005F4 ........ _BLF PrintField,??PrintField??rA 3392 PrintField(MSG_X,MSG_Y+(3*GetFontYSIZE(paused_height))+3, f_txt, align, fonto, spaco1r); \ 000005F8 DC0095E5 LDR R0,[R5, #+220] \ 000005FC C50100EF SWI +453 \ 00000600 B41095E5 LDR R1,[R5, #+180] \ 00000604 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000608 02002DE9 PUSH {R1} \ 0000060C 0A0080E0 ADD R0,R0,R10 \ 00000610 0B10A0E1 MOV R1,R11 \ 00000614 02002DE9 PUSH {R1} \ 00000618 B03095E5 LDR R3,[R5, #+176] \ 0000061C 2C209DE5 LDR R2,[SP, #+44] \ 00000620 031080E2 ADD R1,R0,#+3 \ 00000624 0900A0E1 MOV R0,R9 \ 00000628 ........ _BLF PrintField,??PrintField??rA 3393 PrintField(MSG_X,MSG_Y+(4*GetFontYSIZE(paused_height))+4, g_txt, align, fonto, spaco1r); \ 0000062C DC0095E5 LDR R0,[R5, #+220] \ 00000630 C50100EF SWI +453 \ 00000634 B41095E5 LDR R1,[R5, #+180] \ 00000638 02002DE9 PUSH {R1} \ 0000063C 00082DE9 PUSH {R11} \ 00000640 B03095E5 LDR R3,[R5, #+176] \ 00000644 38209DE5 LDR R2,[SP, #+56] \ ??maincsm_onmessage_30: \ 00000648 00018AE0 ADD R0,R10,R0, LSL #+2 \ 0000064C 041080E2 ADD R1,R0,#+4 \ 00000650 0900A0E1 MOV R0,R9 \ 00000654 ........ _BLF PrintField,??PrintField??rA \ 00000658 28D08DE2 ADD SP,SP,#+40 3394 } 3395 main_d=0; \ 0000065C D86085E5 STR R6,[R5, #+216] 3396 } 3397 icon_change2=!(icon_change2); \ ??maincsm_onmessage_28: \ 00000660 080195E5 LDR R0,[R5, #+264] \ 00000664 000050E3 CMP R0,#+0 \ 00000668 0100A003 MOVEQ R0,#+1 \ 0000066C 0000A013 MOVNE R0,#+0 \ 00000670 080185E5 STR R0,[R5, #+264] 3398 if(icon_change2) \ 00000674 000050E3 CMP R0,#+0 \ 00000678 0400000A BEQ ??maincsm_onmessage_31 3399 icon_change=!(icon_change); \ 0000067C 040195E5 LDR R0,[R5, #+260] \ 00000680 000050E3 CMP R0,#+0 \ 00000684 0100A003 MOVEQ R0,#+1 \ 00000688 0000A013 MOVNE R0,#+0 \ 0000068C 040185E5 STR R0,[R5, #+260] 3400 time_draw=0; \ ??maincsm_onmessage_31: \ 00000690 B86085E5 STR R6,[R5, #+184] \ 00000694 010000EA B ??maincsm_onmessage_16 3401 } 3402 #endif 3403 } 3404 } 3405 #ifdef EVILFOX 3406 else 3407 { 3408 time_draw=1; \ ??maincsm_onmessage_15: \ 00000698 B88085E5 STR R8,[R5, #+184] 3409 main_d=1; \ 0000069C D88085E5 STR R8,[R5, #+216] 3410 } 3411 #endif 3412 } 3413 if (msg->msg==MSG_RECONFIGURE_REQ) \ ??maincsm_onmessage_16: \ 000006A0 040094E5 LDR R0,[R4, #+4] \ 000006A4 AF10A0E3 MOV R1,#+175 \ 000006A8 DE1C81E3 ORR R1,R1,#0xDE00 \ 000006AC 010050E1 CMP R0,R1 \ 000006B0 3200001A BNE ??maincsm_onmessage_32 3414 { 3415 extern const char *successed_config_filename; 3416 if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) \ 000006B4 ........ LDR R0,??DataTable143 ;; successed_config_filename \ 000006B8 0C1094E5 LDR R1,[R4, #+12] \ 000006BC 000090E5 LDR R0,[R0, #+0] \ 000006C0 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 000006C4 000050E3 CMP R0,#+0 \ 000006C8 2C00001A BNE ??maincsm_onmessage_32 3417 { 3418 ShowMSG(1,(int)"NatICQ config updated!"); \ 000006CC 5A1F87E2 ADD R1,R7,#+360 3419 InitConfig(); 3420 #ifdef EVILFOX 3421 FontPathFree(); 3422 FontPathInit(fonto,(char *)fontpath, 0); \ 000006D0 ........ LDR R9,??DataTable145 ;; fontpath \ 000006D4 0100A0E3 MOV R0,#+1 \ 000006D8 480100EF SWI +328 \ 000006DC ........ _BLF InitConfig,??InitConfig??rA \ 000006E0 ........ _BLF FontPathFree,??FontPathFree??rA \ 000006E4 ........ LDR R0,??DataTable146 ;; fonto \ 000006E8 0620A0E1 MOV R2,R6 \ 000006EC 00B090E5 LDR R11,[R0, #+0] \ 000006F0 0910A0E1 MOV R1,R9 \ 000006F4 0B00A0E1 MOV R0,R11 \ 000006F8 ........ _BLF FontPathInit,??FontPathInit??rA 3423 if(fonto==1) \ 000006FC 01005BE3 CMP R11,#+1 \ 00000700 0E00001A BNE ??maincsm_onmessage_33 3424 { 3425 spaco1r=spaco1; \ 00000704 ........ LDR R0,??DataTable147 ;; spaco1 \ 00000708 000090E5 LDR R0,[R0, #+0] \ 0000070C B40085E5 STR R0,[R5, #+180] 3426 char *heght=malloc(64); \ 00000710 4000A0E3 MOV R0,#+64 \ 00000714 140000EF SWI +20 \ 00000718 00A0A0E1 MOV R10,R0 3427 sprintf(heght, "%s2240.png", fontpath); \ 0000071C 0920A0E1 MOV R2,R9 \ 00000720 601F87E2 ADD R1,R7,#+384 \ 00000724 160000EF SWI +22 3428 paused_height=GetImgHeight((int)heght); \ 00000728 0A00A0E1 MOV R0,R10 \ 0000072C 210000EF SWI +33 \ 00000730 DC0085E5 STR R0,[R5, #+220] 3429 mfree(heght); \ 00000734 0A00A0E1 MOV R0,R10 \ 00000738 150000EF SWI +21 \ 0000073C 080000EA B ??maincsm_onmessage_34 3430 } 3431 else 3432 { 3433 spaco1r=10001+(system_color*100); \ ??maincsm_onmessage_33: \ 00000740 ........ LDR R0,??DataTable148 ;; system_color \ 00000744 6410A0E3 MOV R1,#+100 \ 00000748 000090E5 LDR R0,[R0, #+0] \ 0000074C 1120A0E3 MOV R2,#+17 \ 00000750 9C2D82E3 ORR R2,R2,#0x2700 \ 00000754 912020E0 MLA R0,R1,R0,R2 \ 00000758 B40085E5 STR R0,[R5, #+180] 3434 paused_height=fonto-100; \ 0000075C 64004BE2 SUB R0,R11,#+100 \ 00000760 DC0085E5 STR R0,[R5, #+220] 3435 } 3436 init_time_zone(); \ ??maincsm_onmessage_34: \ 00000764 ........ BL init_time_zone 3437 #endif 3438 free_ICONS(); \ 00000768 ........ BL free_ICONS 3439 setup_ICONS(); \ 0000076C ........ BL setup_ICONS 3440 ResortCL(); \ 00000770 ........ _BLF ResortCL,??ResortCL??rA 3441 RecountMenu(NULL, 1); \ 00000774 0110A0E3 MOV R1,#+1 \ 00000778 0600A0E1 MOV R0,R6 \ 0000077C ........ BL RecountMenu 3442 // InitSmiles(); 3443 } 3444 } 3445 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_32: \ 00000780 040094E5 LDR R0,[R4, #+4] \ 00000784 0E10A0E3 MOV R1,#+14 \ 00000788 641C81E3 ORR R1,R1,#0x6400 \ 0000078C 010050E1 CMP R0,R1 \ 00000790 0E00001A BNE ??maincsm_onmessage_35 3446 { 3447 if ((int)msg->data0==csm->gui_id) \ 00000794 18109DE5 LDR R1,[SP, #+24] \ 00000798 0C0094E5 LDR R0,[R4, #+12] \ 0000079C 281091E5 LDR R1,[R1, #+40] \ 000007A0 010050E1 CMP R0,R1 3448 { 3449 csm->csm.state=-3; \ 000007A4 18009D05 LDREQ R0,[SP, #+24] \ 000007A8 0210E003 MVNEQ R1,#+2 \ 000007AC 10108005 STREQ R1,[R0, #+16] 3450 } 3451 if ((int)msg->data0==contactlist_menu_id) \ 000007B0 0C0094E5 LDR R0,[R4, #+12] \ 000007B4 7C1195E5 LDR R1,[R5, #+380] \ 000007B8 010050E1 CMP R0,R1 3452 { 3453 contactlist_menu_id=0; \ 000007BC 7C618505 STREQ R6,[R5, #+380] 3454 prev_clmenu_itemcount=0; \ 000007C0 84618505 STREQ R6,[R5, #+388] 3455 } 3456 if ((int)msg->data0==edchat_id) \ 000007C4 801195E5 LDR R1,[R5, #+384] \ 000007C8 010050E1 CMP R0,R1 3457 { 3458 edchat_id=0; \ 000007CC 80618505 STREQ R6,[R5, #+384] 3459 } 3460 } 3461 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_35: \ 000007D0 040094E5 LDR R0,[R4, #+4] \ 000007D4 AE10A0E3 MOV R1,#+174 \ 000007D8 DE1C81E3 ORR R1,R1,#0xDE00 \ 000007DC 010050E1 CMP R0,R1 \ 000007E0 0F00001A BNE ??maincsm_onmessage_36 3462 { 3463 switch((int)msg->data0) \ 000007E4 0C0094E5 LDR R0,[R4, #+12] \ 000007E8 101094E5 LDR R1,[R4, #+16] \ 000007EC ........ LDR R10,??DataTable131 ;; do_reconnect \ 000007F0 0420A0E3 MOV R2,#+4 \ 000007F4 542D82E3 ORR R2,R2,#0x1500 \ 000007F8 054082E0 ADD R4,R2,R5 \ 000007FC 482F42E2 SUB R2,R2,#+288 \ 00000800 059082E0 ADD R9,R2,R5 \ 00000804 802050E2 SUBS R2,R0,#+128 \ 00000808 0800000A BEQ ??maincsm_onmessage_37 \ 0000080C 022052E2 SUBS R2,R2,#+2 \ 00000810 0200000A BEQ ??maincsm_onmessage_38 \ 00000814 122052E2 SUBS R2,R2,#+18 \ 00000818 0F00000A BEQ ??maincsm_onmessage_39 \ 0000081C 190000EA B ??maincsm_onmessage_40 3464 { 3465 case LMAN_DISCONNECT_IND: 3466 is_gprs_online=0; \ ??maincsm_onmessage_38: \ 00000820 746185E5 STR R6,[R5, #+372] 3467 return(1); \ ??maincsm_onmessage_36: \ 00000824 0100A0E3 MOV R0,#+1 \ 00000828 1CD08DE2 ADD SP,SP,#+28 \ 0000082C F08FBDE8 POP {R4-R11,PC} ;; return 3468 case LMAN_CONNECT_CNF: 3469 vibra_count=1; \ ??maincsm_onmessage_37: \ 00000830 448185E5 STR R8,[R5, #+324] 3470 start_vibra(); \ 00000834 ........ BL start_vibra 3471 is_gprs_online=1; \ 00000838 748185E5 STR R8,[R5, #+372] 3472 strcpy(logmsg,LG_GRGPRSUP); \ 0000083C 631F87E2 ADD R1,R7,#+396 \ 00000840 0900A0E1 MOV R0,R9 \ 00000844 1A0000EF SWI +26 3473 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*10,do_reconnect); \ 00000848 0A20A0E1 MOV R2,R10 \ 0000084C 871EA0E3 MOV R1,#+2160 \ 00000850 0400A0E1 MOV R0,R4 \ 00000854 4D0000EF SWI +77 3474 return(1); \ 00000858 070000EA B ??maincsm_onmessage_41 3475 case ENIP_DNR_HOST_BY_NAME: 3476 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_39: \ 0000085C 8C0195E5 LDR R0,[R5, #+396] \ 00000860 000051E1 CMP R1,R0 \ 00000864 EEFFFF1A BNE ??maincsm_onmessage_36 3477 { 3478 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 00000868 900195E5 LDR R0,[R5, #+400] \ 0000086C 000050E3 CMP R0,#+0 \ 00000870 EBFFFF0A BEQ ??maincsm_onmessage_36 \ 00000874 ........ LDR R0,??DataTable132 ;; create_connect \ ??maincsm_onmessage_42: \ 00000878 710100EF SWI +369 3479 } 3480 return(1); \ ??maincsm_onmessage_41: \ 0000087C 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_43: \ 00000880 1CD08DE2 ADD SP,SP,#+28 \ 00000884 F08FBDE8 POP {R4-R11,PC} 3481 } 3482 if ((int)msg->data1==sock) \ ??maincsm_onmessage_40: \ 00000888 582195E5 LDR R2,[R5, #+344] \ 0000088C 020051E1 CMP R1,R2 \ 00000890 E3FFFF1A BNE ??maincsm_onmessage_36 3483 { 3484 //Если наш сокет 3485 if ((((unsigned int)msg->data0)>>28)==0xA) \ 00000894 201EA0E1 LSR R1,R0,#+28 \ 00000898 0A0051E3 CMP R1,#+10 \ 0000089C 0200001A BNE ??maincsm_onmessage_44 3486 { 3487 //Принят пакет 3488 ProcessPacket((TPKT *)msg->data0); \ 000008A0 ........ BL ProcessPacket 3489 return(0); \ 000008A4 0000A0E3 MOV R0,#+0 \ 000008A8 F4FFFFEA B ??maincsm_onmessage_43 3490 } 3491 switch((int)msg->data0) \ ??maincsm_onmessage_44: \ 000008AC ........ LDR R2,??DataTable133 ;; VIBR_ON_CONNECT \ 000008B0 541195E5 LDR R1,[R5, #+340] \ 000008B4 00B092E5 LDR R11,[R2, #+0] \ 000008B8 8A0040E2 SUB R0,R0,#+138 \ 000008BC 050050E3 CMP R0,#+5 \ 000008C0 D7FFFF8A BHI ??maincsm_onmessage_36 \ 000008C4 012F8FE2 ADR R2,??maincsm_onmessage_0 \ 000008C8 D02092E1 LDRSB R2,[R2, R0] \ 000008CC 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_0: \ 000008D0 39393401 DC8 +57,+57,+52,+1 \ 000008D4 423E0000 DC8 +66,+62,+0,+0 3492 { 3493 case ENIP_SOCK_CONNECTED: 3494 if (connect_state==1) \ ??maincsm_onmessage_45: \ 000008D8 010051E3 CMP R1,#+1 \ 000008DC 2C00001A BNE ??maincsm_onmessage_46 3495 { 3496 if(VIBR_ON_CONNECT) 3497 vibra_count=2; 3498 else 3499 vibra_count=1; 3500 start_vibra(); 3501 //Соединение установленно, посылаем пакет login 3502 strcpy(logmsg, LG_GRTRYLOGIN); 3503 { 3504 int i=strlen(PASS); \ 000008E0 C8419FE5 LDR R4,??maincsm_onmessage_7+0x44 ;; PASS \ 000008E4 00005BE3 CMP R11,#+0 \ 000008E8 0200A013 MOVNE R0,#+2 \ 000008EC 44018515 STRNE R0,[R5, #+324] \ 000008F0 44818505 STREQ R8,[R5, #+324] \ 000008F4 ........ BL start_vibra \ 000008F8 691F87E2 ADD R1,R7,#+420 \ 000008FC 0900A0E1 MOV R0,R9 \ 00000900 1A0000EF SWI +26 \ 00000904 0400A0E1 MOV R0,R4 \ 00000908 1B0000EF SWI +27 \ 0000090C 0090A0E1 MOV R9,R0 3505 TPKT *p=malloc(sizeof(PKT)+i); \ 00000910 080089E2 ADD R0,R9,#+8 \ 00000914 140000EF SWI +20 \ 00000918 00A0A0E1 MOV R10,R0 3506 p->pkt.uin=UIN; \ 0000091C ........ LDR R0,??DataTable142 ;; UIN 3507 p->pkt.type=T_REQLOGIN; 3508 p->pkt.data_len=i; 3509 memcpy(p->data,PASS,i); \ 00000920 0920A0E1 MOV R2,R9 \ 00000924 00B090E5 LDR R11,[R0, #+0] \ 00000928 0410A0E1 MOV R1,R4 \ 0000092C 00B08AE5 STR R11,[R10, #+0] \ 00000930 B480CAE1 STRH R8,[R10, #+4] \ 00000934 B690CAE1 STRH R9,[R10, #+6] \ 00000938 08008AE2 ADD R0,R10,#+8 \ 0000093C 1E0100EF SWI +286 3510 SUBPROC((void *)send_login,0,p); \ 00000940 6C019FE5 LDR R0,??maincsm_onmessage_7+0x48 ;; send_login \ 00000944 0A20A0E1 MOV R2,R10 \ 00000948 0010A0E3 MOV R1,#+0 \ 0000094C 710100EF SWI +369 3511 } 3512 GROUP_CACHE=0; \ 00000950 786185E5 STR R6,[R5, #+376] 3513 SENDMSGCOUNT=0; //Начинаем отсчет \ 00000954 146185E5 STR R6,[R5, #+276] 3514 if (!FindGroupByID(0)) AddGroup(0,LG_GROUPNOTINLIST); \ 00000958 0600A0E1 MOV R0,R6 \ 0000095C ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000960 000050E3 CMP R0,#+0 \ 00000964 0100001A BNE ??maincsm_onmessage_47 \ 00000968 6D1F87E2 ADD R1,R7,#+436 \ 0000096C ........ _BLF AddGroup,??AddGroup??rA 3515 if (!FindContactByUin(UIN)) AddContact(UIN, LG_CLLOOPBACK); \ ??maincsm_onmessage_47: \ 00000970 0B00A0E1 MOV R0,R11 \ 00000974 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000978 000050E3 CMP R0,#+0 \ 0000097C 0200001A BNE ??maincsm_onmessage_48 \ 00000980 701F87E2 ADD R1,R7,#+448 \ 00000984 0B00A0E1 MOV R0,R11 \ 00000988 ........ _BLF AddContact,??AddContact??rA 3516 SMART_REDRAW(); \ ??maincsm_onmessage_48: \ 0000098C ........ BL SMART_REDRAW \ 00000990 B9FFFFEA B ??maincsm_onmessage_41 3517 } 3518 else 3519 { 3520 ShowMSG(1,(int)LG_MSGILLEGMSGCON); \ ??maincsm_onmessage_46: \ 00000994 731F87E2 ADD R1,R7,#+460 \ ??maincsm_onmessage_49: \ 00000998 0100A0E3 MOV R0,#+1 \ 0000099C 480100EF SWI +328 \ 000009A0 B5FFFFEA B ??maincsm_onmessage_41 3521 } 3522 break; 3523 case ENIP_SOCK_DATA_READ: 3524 if (connect_state>=2) \ ??maincsm_onmessage_50: \ 000009A4 020051E3 CMP R1,#+2 3525 { 3526 //Если посылали send 3527 SUBPROC((void *)get_answer); \ 000009A8 08019FA5 LDRGE R0,??maincsm_onmessage_7+0x4C ;; get_answer \ 000009AC B1FFFFAA BGE ??maincsm_onmessage_42 3528 //SMART_REDRAW(); 3529 } 3530 else 3531 { 3532 ShowMSG(1,(int)LG_MSGILLEGMSGREA); \ 000009B0 7D1F87E2 ADD R1,R7,#+500 \ 000009B4 F7FFFFEA B ??maincsm_onmessage_49 3533 } 3534 break; 3535 case ENIP_BUFFER_FREE: 3536 case ENIP_BUFFER_FREE1: 3537 SUBPROC((void *)SendAnswer,0,0); \ ??maincsm_onmessage_51: \ 000009B8 ........ LDR R0,??DataTable155 ;; SendAnswer \ 000009BC 0020A0E3 MOV R2,#+0 \ 000009C0 0210A0E1 MOV R1,R2 \ 000009C4 710100EF SWI +369 \ 000009C8 ABFFFFEA B ??maincsm_onmessage_41 3538 break; 3539 case ENIP_SOCK_REMOTE_CLOSED: 3540 //Закрыт со стороны сервера 3541 if (connect_state) \ ??maincsm_onmessage_52: \ 000009CC 000051E3 CMP R1,#+0 \ 000009D0 93FFFF0A BEQ ??maincsm_onmessage_36 3542 SUBPROC((void *)end_socket); \ 000009D4 ........ LDR R0,??DataTable136 ;; end_socket \ 000009D8 A6FFFFEA B ??maincsm_onmessage_42 3543 break; 3544 case ENIP_SOCK_CLOSED: 3545 //strcpy(logmsg, "No connection"); 3546 //Dump not received 3547 /* if (RXstate>(-(int)sizeof(PKT))) 3548 { 3549 unsigned int err; 3550 int f=fopen("4:\\NATICQ.dump",A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&err); 3551 if (f!=-1) 3552 { 3553 fwrite(f,&RXbuf,RXstate+sizeof(PKT),&err); 3554 fclose(f,&err); 3555 } 3556 }*/ 3557 FillAllOffline(); \ ??maincsm_onmessage_53: \ 000009DC ........ _BLF FillAllOffline,??FillAllOffline??rA 3558 RecountMenu(NULL, 1); \ 000009E0 0110A0E3 MOV R1,#+1 \ 000009E4 0600A0E1 MOV R0,R6 \ 000009E8 ........ BL RecountMenu 3559 connect_state=0; \ 000009EC 546185E5 STR R6,[R5, #+340] 3560 sock=-1; \ 000009F0 0600E0E1 MVN R0,R6 \ 000009F4 580185E5 STR R0,[R5, #+344] 3561 if(VIBR_ON_CONNECT) \ 000009F8 00005BE3 CMP R11,#+0 3562 vibra_count=4; \ 000009FC 0400A013 MOVNE R0,#+4 \ 00000A00 44018515 STRNE R0,[R5, #+324] 3563 else 3564 vibra_count=1; \ 00000A04 44818505 STREQ R8,[R5, #+324] 3565 3566 start_vibra(); \ 00000A08 ........ BL start_vibra 3567 if (sendq_p) \ 00000A0C 700195E5 LDR R0,[R5, #+368] \ 00000A10 000050E3 CMP R0,#+0 \ 00000A14 0400000A BEQ ??maincsm_onmessage_54 3568 { 3569 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 00000A18 6C3195E5 LDR R3,[R5, #+364] \ 00000A1C 862F87E2 ADD R2,R7,#+536 \ 00000A20 FF10A0E3 MOV R1,#+255 \ 00000A24 0900A0E1 MOV R0,R9 \ 00000A28 1B0100EF SWI +283 3570 } 3571 SMART_REDRAW(); \ ??maincsm_onmessage_54: \ 00000A2C ........ BL SMART_REDRAW 3572 SUBPROC((void *)ClearSendQ); \ 00000A30 ........ LDR R0,??DataTable137 ;; ClearSendQ \ 00000A34 710100EF SWI +369 3573 if (!disautorecconect) \ 00000A38 240195E5 LDR R0,[R5, #+292] \ 00000A3C 000050E3 CMP R0,#+0 \ 00000A40 77FFFF1A BNE ??maincsm_onmessage_36 3574 { 3575 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*10,do_reconnect); \ 00000A44 0A20A0E1 MOV R2,R10 \ 00000A48 871EA0E3 MOV R1,#+2160 \ 00000A4C 0400A0E1 MOV R0,R4 \ 00000A50 4D0000EF SWI +77 3576 snprintf(logmsg,255,"%s\nReconect after 10 second...",logmsg); \ 00000A54 0930A0E1 MOV R3,R9 \ 00000A58 8F2F87E2 ADD R2,R7,#+572 \ 00000A5C FF10A0E3 MOV R1,#+255 \ 00000A60 0900A0E1 MOV R0,R9 \ 00000A64 1B0100EF SWI +283 \ 00000A68 83FFFFEA B ??maincsm_onmessage_41 \ ??maincsm_onmessage_7: \ 00000A6C ........ DC32 CheckDoubleRun \ 00000A70 ........ DC32 ProcessNextSmile \ 00000A74 ........ DC32 ProcessNextXStatImg \ 00000A78 ........ DC32 IDLEICON_X \ 00000A7C ........ DC32 IDLEICON_Y \ 00000A80 ........ DC32 XStatusesIconArray \ 00000A84 ........ DC32 Is_Online_On \ 00000A88 ........ DC32 ONTIME_Y \ 00000A8C ........ DC32 ONTIME_X \ 00000A90 ........ DC32 PING_Y \ 00000A94 ........ DC32 PING_X \ 00000A98 ........ DC32 Is_Unread_On \ 00000A9C ........ DC32 UNREAD_Y \ 00000AA0 ........ DC32 UNREAD_X \ 00000AA4 ........ DC32 MSG_X \ 00000AA8 ........ DC32 MSG_Y \ 00000AAC ........ DC32 spaco2 \ 00000AB0 ........ DC32 PASS \ 00000AB4 ........ DC32 send_login \ 00000AB8 ........ DC32 get_answer 3577 } 3578 break; 3579 } 3580 } 3581 } 3582 return(1); 3583 } 3584 3585 3586 const int minus11=-11; 3587 \ In segment DATA_Z, align 4, align-sorted 3588 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 B0B5041C0025 DC8 176, 181, 4, 28, 0, 37, 5, 97 \ 0561 \ Canvas: \ 00000008 000000000000 DC16 0, 0, 0, 0 \ 0000 \ percent_t: \ 00000010 257400 DC8 "%t" \ percent_d: \ 00000013 256400 DC8 "%d" \ empty_str: \ 00000016 00 DC8 "" \ 00000017 00 DC8 0 \ 00000018 257325642E77 DC8 "%s%d.wav" \ 617600 \ 00000021 000000 DC8 0, 0, 0 \ 00000024 436F6D706C65 DC8 "Complete!\012Enabled for:\012%d / %d contacts" \ 7465210A456E \ 61626C656420 \ 666F723A0A25 \ 64202F202564 \ 20636F6E7461 \ 63747300 \ 0000004C CCE5EDFE203C DC8 "\314\345\355\376 " \ 4578743A2564 \ 2F25643E00 \ 0000005D 000000 DC8 0, 0, 0 \ 00000060 4F6E6C696E65 DC8 "Online time:\012%02d:%02d:%02d\012Server:\012%s" \ 2074696D653A \ 0A253032643A \ 253032643A25 \ 3032640A5365 \ 727665723A0A \ 257300 \ 00000087 00 DC8 0 \ 00000088 3E3E20257320 DC8 ">> %s <<" \ 3C3C00 \ 00000091 000000 DC8 0, 0, 0 \ 00000094 2563257400 DC8 "%c%t" \ 00000099 000000 DC8 0, 0, 0 \ 0000009C 2825642F2564 DC8 "(%d/%d)" \ 2900 \ 000000A4 EEF8E8E1EAE0 DC8 "\356\370\350\341\352\340" \ 00 \ 000000AB 00 DC8 0 \ 000000AC 53746174653A DC8 53H, 74H, 61H, 74H, 65H, 3AH, 20H, 25H \ 2025 \ 000000B4 642C20525873 DC8 64H, 2CH, 20H, 52H, 58H, 73H, 74H, 61H \ 7461 \ 000000BC 74653A202564 DC8 74H, 65H, 3AH, 20H, 25H, 64H, 0AH, 52H \ 0A52 \ 000000C4 783A20256462 DC8 78H, 3AH, 20H, 25H, 64H, 62H, 2CH, 20H \ 2C20 \ 000000CC 54783A202564 DC8 54H, 78H, 3AH, 20H, 25H, 64H, 62H, 0AH \ 620A \ 000000D4 51756575653A DC8 51H, 75H, 65H, 75H, 65H, 3AH, 20H, 25H \ 2025 \ 000000DC 64620A25730A DC8 64H, 62H, 0AH, 25H, 73H, 0AH, 25H, 74H \ 2574 \ 000000E4 00 DC8 0 \ 000000E5 000000 DC8 0, 0, 0 \ 000000E8 0A4C6F616465 DC8 "\012Loaded %d smiles" \ 642025642073 \ 6D696C657300 \ 000000FA 0000 DC8 0, 0 \ 000000FC 0A4C6F616465 DC8 "\012Loaded %d xstatus" \ 642025642078 \ 737461747573 \ 00 \ 0000010F 00 DC8 0 \ 00000110 4578697400 DC8 "Exit" \ 00000115 000000 DC8 0, 0, 0 \ 00000118 434C69737400 DC8 "CList" \ 0000011E 0000 DC8 0, 0 \ 00000120 4D6F64206279 DC8 "Mod by Evilfox 2nd" \ 204576696C66 \ 6F7820326E64 \ 00 \ 00000133 00 DC8 0 \ `?`: \ 00000134 CCE5EDFE00 DC8 "\314\345\355\376" \ 00000139 000000 DC8 0, 0, 0 \ 0000013C 6F6E6C696E65 DC8 "online: %02d:%02d:%02d" \ 3A2025303264 \ 3A253032643A \ 2530326400 \ 00000153 00 DC8 0 \ 00000154 4F66666C696E DC8 "Offline" \ 6500 \ 0000015C 556E72656164 DC8 "Unread: %d" \ 3A20256400 \ 00000167 00 DC8 0 \ 00000168 4E6174494351 DC8 "NatICQ config updated!" \ 20636F6E6669 \ 672075706461 \ 7465642100 \ 0000017F 00 DC8 0 \ 00000180 257332323430 DC8 "%s2240.png" \ 2E706E6700 \ 0000018B 00 DC8 0 \ 0000018C 475052532075 DC8 "GPRS up, wait 10 sec..." \ 702C20776169 \ 742031302073 \ 65632E2E2E00 \ 000001A4 54727920746F DC8 "Try to login..." \ 206C6F67696E \ 2E2E2E00 \ 000001B4 CDE520E220F1 DC8 "\315\345 \342 \361\357\350\361\352\345" \ EFE8F1EAE500 \ 000001C0 4C6F6F706261 DC8 "Loopback" \ 636B00 \ 000001C9 000000 DC8 0, 0, 0 \ 000001CC CDE5E2E5F0ED DC8 "\315\345\342\345\360\355\356\345 \361\356\356\341\371\345\355\350\345 ENIP_SOCK_CONNECTED!" \ EEE520F1EEEE \ E1F9E5EDE8E5 \ 20454E49505F \ 534F434B5F43 \ 4F4E4E454354 \ 45442100 \ 000001F4 CDE5E2E5F0ED DC8 "\315\345\342\345\360\355\356\345 \361\356\356\341\371\345\355\350\345 ENIP_DATA_READ" \ EEE520F1EEEE \ E1F9E5EDE8E5 \ 20454E49505F \ 444154415F52 \ 45414400 \ 00000216 0000 DC8 0, 0 \ 00000218 446973636F6E DC8 "Disconnected, %d bytes not sended!" \ 6E6563746564 \ 2C2025642062 \ 79746573206E \ 6F742073656E \ 6465642100 \ 0000023B 00 DC8 0 \ 0000023C 25730A526563 DC8 "%s\012Reconect after 10 second..." \ 6F6E65637420 \ 616674657220 \ 313020736563 \ 6F6E642E2E2E \ 00 \ 0000025B 00 DC8 0 \ 0000025C 4E4154494351 DC8 "NATICQ: %d" \ 3A20256400 \ 00000267 00 DC8 0 \ 00000268 C2E2E5E4E8F2 DC8 "\302\342\345\344\350\362\345 UIN/\357\340\360\356\353\374!" \ E52055494E2F \ EFE0F0EEEBFC \ 2100 \ 0000027C 50696E673A20 DC8 "Ping: none" \ 6E6F6E6500 \ 00000287 00 DC8 0 \ ipc_my_name: \ 00000288 4E6174494351 DC8 "NatICQ" \ 00 \ 0000028F 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000029F 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000 \ ipc_xtask_name: \ 000002A8 585461736B00 DC8 "XTask" \ 000002AE 0000 DC8 0, 0 \ x_status_change: \ 000002B0 582D53746174 DC8 "X-Status change" \ 757320636861 \ 6E676500 \ gui_methods: \ 000002C0 ............ DC32 method0, method1, method2, method3, method4, method5, 0H \ ............ \ ............ \ ............ \ 00000000 \ 000002DC ............ DC32 kill_data, method8, method9, 0H \ ............ \ 00000000 3589 3590 const struct 3591 { 3592 CSM_DESC maincsm; 3593 WSHDR maincsm_name; 3594 }MAINCSM = \ MAINCSM: \ 000002EC ............ DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 00000308 2C0000000100 DC32 44, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 00000000 \ 00000324 8B00 DC16 139 \ 00000326 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_OFFLINE: \ 00000000 4F66666C696E DC8 "Offline" \ 6500 \ In segment DATA_C, align 4, align-sorted \ S_INVISIBLE: \ 00000000 496E76697369 DC8 "Invisible" \ 626C6500 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_AWAY: \ 00000000 4177617900 DC8 "Away" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_NA: \ 00000000 4E2F4100 DC8 "N/A" \ In segment DATA_C, align 4, align-sorted \ S_OCCUPIED: \ 00000000 4F6363757069 DC8 "Occupied" \ 656400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_DND: \ 00000000 444E4400 DC8 "DND" \ In segment DATA_C, align 4, align-sorted \ S_ONLINE: \ 00000000 4F6E6C696E65 DC8 "Online" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ S_FFC: \ 00000000 46464300 DC8 "FFC" \ In segment DATA_C, align 4, align-sorted \ icons_names: \ 00000000 ............ DC32 `?`, `?` \ .... \ 00000008 ............ DC32 `?`, `?` \ .... \ 00000010 ............ DC32 `?`, `?` \ .... \ 00000018 ............ DC32 `?`, `?` \ .... \ 00000020 ............ DC32 `?`, `?` \ .... \ 00000028 ............ DC32 `?`, `?` \ .... \ 00000030 ............ DC32 `?`, `?` \ .... \ 00000038 ............ DC32 `?`, `?` \ .... \ 00000040 ............ DC32 `?`, `?` \ .... \ 00000048 ............ DC32 `?`, `?` \ .... \ 00000050 ............ DC32 `?`, `?` \ .... \ 00000058 ............ DC32 `?`, `?` \ .... \ 00000060 ............ DC32 `?`, `?` \ .... \ 00000068 ............ DC32 `?`, `?` \ .... \ In segment DATA_C, align 4, align-sorted \ `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ clmenu_sk: \ 00000000 18000000 DC16 24, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 clmenu_sk_r \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ menu_skt: \ 00000000 ........0000 DC32 menu_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ clmenu_skt: \ 00000000 ........0000 DC32 clmenu_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ minus11: \ 00000000 F5FFFFFF DC32 -11 3595 { 3596 { 3597 maincsm_onmessage, 3598 maincsm_oncreate, 3599 #ifdef NEWSGOLD 3600 0, 3601 0, 3602 0, 3603 0, 3604 #endif 3605 maincsm_onclose, 3606 sizeof(MAIN_CSM), 3607 1, 3608 &minus11 3609 }, 3610 { 3611 maincsm_name_body, 3612 NAMECSM_MAGIC1, 3613 NAMECSM_MAGIC2, 3614 0x0, 3615 139 3616 } 3617 }; 3618 \ In segment CODE, align 4, keep-with-next 3619 void UpdateCSMname(void) 3620 { 3621 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "NATICQ: %d",UIN); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable141 ;; `?` \ 00000004 ........ LDR R1,??DataTable142 ;; UIN \ 00000008 00402DE9 PUSH {LR} \ 0000000C 002091E5 LDR R2,[R1, #+0] \ 00000010 971F80E2 ADD R1,R0,#+604 \ 00000014 C50F80E2 ADD R0,R0,#+788 \ 00000018 240100EF SWI +292 3622 } \ 0000001C 0080BDE8 POP {PC} ;; return 3623 3624 \ In segment CODE, align 4, keep-with-next 3625 int main(char *filename) 3626 { \ main: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 3627 MAIN_CSM main_csm; 3628 char *s; 3629 int len; 3630 extern const char *successed_config_filename; 3631 WSHDR *ws; 3632 3633 InitConfig(); 3634 s=strrchr(filename,'\\'); 3635 len=(s-filename)+1; 3636 strncpy(elf_path,filename,len); \ 00000004 ........ LDR R4,??DataTable140 ;; S_ICONS \ 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 3637 elf_path[len]=0; 3638 if (!UIN) \ 00000030 ........ LDR R5,??DataTable141 ;; `?` \ 00000034 780F84E2 ADD R0,R4,#+480 \ 00000038 160100EF SWI +278 \ 0000003C 040086E0 ADD R0,R6,R4 \ 00000040 0010A0E3 MOV R1,#+0 \ 00000044 E011C0E5 STRB R1,[R0, #+480] \ 00000048 ........ LDR R0,??DataTable142 ;; UIN \ 0000004C 000090E5 LDR R0,[R0, #+0] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 1500001A BNE ??main_0 3639 { 3640 LockSched(); \ 00000058 460100EF SWI +326 3641 ShowMSG(1,(int)LG_MSGNOUINPASS); \ 0000005C 9A1F85E2 ADD R1,R5,#+616 \ 00000060 0100A0E3 MOV R0,#+1 \ 00000064 480100EF SWI +328 3642 ws=AllocWS(150); \ 00000068 9600A0E3 MOV R0,#+150 \ 0000006C 250100EF SWI +293 \ 00000070 0040A0E1 MOV R4,R0 3643 str_2ws(ws,successed_config_filename,128); \ 00000074 ........ LDR R0,??DataTable143 ;; successed_config_filename \ 00000078 8020A0E3 MOV R2,#+128 \ 0000007C 001090E5 LDR R1,[R0, #+0] \ 00000080 0400A0E1 MOV R0,R4 \ 00000084 6C0100EF SWI +364 3644 ExecuteFile(ws,0,0); \ 00000088 0020A0E3 MOV R2,#+0 \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0400A0E1 MOV R0,R4 \ 00000094 940000EF SWI +148 3645 UnlockSched(); \ 00000098 470100EF SWI +327 3646 SUBPROC((void *)ElfKiller); \ 0000009C ........ LDR R0,??DataTable144 ;; ElfKiller \ 000000A0 710100EF SWI +369 3647 return 0; \ 000000A4 0000A0E3 MOV R0,#+0 \ 000000A8 2CD08DE2 ADD SP,SP,#+44 \ 000000AC F080BDE8 POP {R4-R7,PC} 3648 } 3649 ReadDefSettings(); 3650 setup_ICONS(); 3651 LoadXStatusText(); 3652 UpdateCSMname(); 3653 LockSched(); 3654 maincsm_id=CreateCSM(&MAINCSM.maincsm,&main_csm,0); 3655 UnlockSched(); 3656 #ifdef EVILFOX 3657 time_counter(); 3658 FontPathInit(fonto,(char *)fontpath, 1); \ ??main_0: \ 000000B0 ........ LDR R7,??DataTable145 ;; fontpath \ 000000B4 ........ BL ReadDefSettings \ 000000B8 ........ BL setup_ICONS \ 000000BC ........ _BLF LoadXStatusText,??LoadXStatusText??rA \ 000000C0 ........ BL UpdateCSMname \ 000000C4 460100EF SWI +326 \ 000000C8 0020A0E3 MOV R2,#+0 \ 000000CC 0D10A0E1 MOV R1,SP \ 000000D0 BB0F85E2 ADD R0,R5,#+748 \ 000000D4 070100EF SWI +263 \ 000000D8 0C0184E5 STR R0,[R4, #+268] \ 000000DC 470100EF SWI +327 \ 000000E0 ........ BL time_counter \ 000000E4 ........ LDR R0,??DataTable146 ;; fonto \ 000000E8 0120A0E3 MOV R2,#+1 \ 000000EC 006090E5 LDR R6,[R0, #+0] \ 000000F0 0710A0E1 MOV R1,R7 \ 000000F4 0600A0E1 MOV R0,R6 \ 000000F8 ........ _BLF FontPathInit,??FontPathInit??rA 3659 if(fonto==1) \ 000000FC 010056E3 CMP R6,#+1 \ 00000100 0E00001A BNE ??main_1 3660 { 3661 spaco1r=spaco1; \ 00000104 ........ LDR R0,??DataTable147 ;; spaco1 \ 00000108 000090E5 LDR R0,[R0, #+0] \ 0000010C B40084E5 STR R0,[R4, #+180] 3662 char *heght=malloc(64); \ 00000110 4000A0E3 MOV R0,#+64 \ 00000114 140000EF SWI +20 \ 00000118 0060A0E1 MOV R6,R0 3663 sprintf(heght, "%s2240.png", fontpath); \ 0000011C 0720A0E1 MOV R2,R7 \ 00000120 601F85E2 ADD R1,R5,#+384 \ 00000124 160000EF SWI +22 3664 paused_height=GetImgHeight((int)heght); \ 00000128 0600A0E1 MOV R0,R6 \ 0000012C 210000EF SWI +33 \ 00000130 DC0084E5 STR R0,[R4, #+220] 3665 mfree(heght); \ 00000134 0600A0E1 MOV R0,R6 \ 00000138 150000EF SWI +21 \ 0000013C 080000EA B ??main_2 3666 } 3667 else 3668 { 3669 spaco1r=10001+(system_color*100); \ ??main_1: \ 00000140 ........ LDR R0,??DataTable148 ;; system_color \ 00000144 6410A0E3 MOV R1,#+100 \ 00000148 000090E5 LDR R0,[R0, #+0] \ 0000014C 1120A0E3 MOV R2,#+17 \ 00000150 9C2D82E3 ORR R2,R2,#0x2700 \ 00000154 912020E0 MLA R0,R1,R0,R2 \ 00000158 B40084E5 STR R0,[R4, #+180] 3670 paused_height=fonto-100; \ 0000015C 640046E2 SUB R0,R6,#+100 \ 00000160 DC0084E5 STR R0,[R4, #+220] 3671 } 3672 sprintf(ping_txt, "Ping: none"); \ ??main_2: \ 00000164 9F1F85E2 ADD R1,R5,#+636 \ 00000168 DD0F84E2 ADD R0,R4,#+884 \ 0000016C 160000EF SWI +22 3673 init_time_zone(); \ 00000170 ........ BL init_time_zone 3674 AddKeybMsgHook((void *)my_keyhook); \ 00000174 ........ LDR R0,??DataTable149 ;; my_keyhook \ 00000178 2B0100EF SWI +299 3675 #endif 3676 return 0; \ 0000017C 0000A0E3 MOV R0,#+0 \ 00000180 2CD08DE2 ADD SP,SP,#+44 \ 00000184 F080BDE8 POP {R4-R7,PC} ;; return 3677 } 3678 3679 //=========================================================== 3680 // Edit chat 3681 //=========================================================== \ In segment CODE, align 4, keep-with-next 3682 void edchat_locret(void){} \ edchat_locret: \ 00000000 1EFF2FE1 BX LR ;; return 3683 \ In segment CODE, align 4, keep-with-next 3684 char *ExtractAnswer(WSHDR *ws) 3685 { \ ExtractAnswer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3686 S_SMILES *t; 3687 int c; 3688 int len=0; 3689 int scur; 3690 char *msg=NULL; 3691 unsigned short *wsbody=ws->wsbody; \ 00000004 008090E5 LDR R8,[R0, #+0] \ 00000008 0040A0E3 MOV R4,#+0 3692 int wslen=wsbody[0]; \ 0000000C B060D8E1 LDRH R6,[R8, #+0] \ 00000010 0050A0E3 MOV R5,#+0 3693 if (wslen) \ 00000014 000056E3 CMP R6,#+0 \ 00000018 2E00000A BEQ ??ExtractAnswer_0 3694 { 3695 for (int i=0; i=0xE100) \ 00000030 E10C57E3 CMP R7,#+57600 \ 00000034 0A0000BA BLT ??ExtractAnswer_3 3699 { 3700 t=FindSmileByUni(c); \ 00000038 0700A0E1 MOV R0,R7 \ 0000003C ........ _BLF FindSmileByUni,??FindSmileByUni??rA 3701 if (t) \ 00000040 000050E3 CMP R0,#+0 \ 00000044 0600000A BEQ ??ExtractAnswer_3 3702 { 3703 if (t->lines) \ 00000048 080090E5 LDR R0,[R0, #+8] \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 0400000A BEQ ??ExtractAnswer_4 3704 { 3705 len+=strlen(t->lines->text); \ 00000054 0C0080E2 ADD R0,R0,#+12 \ 00000058 1B0000EF SWI +27 \ 0000005C 044080E0 ADD R4,R0,R4 \ 00000060 000000EA B ??ExtractAnswer_4 3706 } 3707 } 3708 else len++; \ ??ExtractAnswer_3: \ 00000064 014084E2 ADD R4,R4,#+1 3709 } 3710 else len++; 3711 } \ ??ExtractAnswer_4: \ 00000068 025085E2 ADD R5,R5,#+2 \ 0000006C 019059E2 SUBS R9,R9,#+1 \ 00000070 EDFFFF1A BNE ??ExtractAnswer_2 3712 3713 msg=malloc(len+1); \ ??ExtractAnswer_1: \ 00000074 010084E2 ADD R0,R4,#+1 \ 00000078 140000EF SWI +20 \ 0000007C 0050A0E1 MOV R5,R0 3714 scur=0; \ 00000080 0090A0E3 MOV R9,#+0 3715 for (int wcur=0; wcur=0xE100) 3720 { 3721 t=FindSmileByUni(c); 3722 if (t) 3723 { 3724 int w; 3725 char *s; 3726 if (t->lines) 3727 { 3728 s=t->lines->text; 3729 while ((w=*s++) && scurnext)) \ FindNextActiveContact: \ ??FindNextActiveContact_0: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0300000A BEQ ??FindNextActiveContact_1 3756 { 3757 if (t->isactive) return t; \ 0000000C 7C1090E5 LDR R1,[R0, #+124] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 F9FFFF0A BEQ ??FindNextActiveContact_0 \ 00000018 1EFF2FE1 BX LR 3758 } 3759 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable151 ;; S_ICONS + 144 \ 00000020 020000EA B ??FindNextActiveContact_2 3760 while(t=(CLIST *)(t->next)) 3761 { 3762 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 7C1090E5 LDR R1,[R0, #+124] \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 1EFF2F11 BXNE LR 3763 } \ ??FindNextActiveContact_2: \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F9FFFF1A BNE ??FindNextActiveContact_3 3764 return NULL; \ 0000003C 1EFF2FE1 BX LR ;; return 3765 } 3766 \ In segment CODE, align 4, keep-with-next 3767 CLIST *FindPrevActiveContact(CLIST *t) 3768 { 3769 CLIST *cl; 3770 CLIST *cl_active=NULL; 3771 cl=(CLIST *)(&cltop); \ FindPrevActiveContact: \ 00000000 ........ LDR R2,??DataTable151 ;; S_ICONS + 144 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 020000EA B ??FindPrevActiveContact_0 3772 3773 3774 while(cl=cl->next) 3775 { 3776 if (cl==t) 3777 { 3778 if (cl_active==NULL) break; 3779 else return (cl_active); 3780 } 3781 else 3782 { 3783 if (cl->isactive) cl_active=cl; \ ??FindPrevActiveContact_1: \ 0000000C 7C3092E5 LDR R3,[R2, #+124] \ 00000010 000053E3 CMP R3,#+0 \ 00000014 0210A011 MOVNE R1,R2 3784 } \ ??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 3785 } 3786 while(t) \ ??FindPrevActiveContact_2: \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF0A BEQ ??FindPrevActiveContact_3 3787 { 3788 if (t->isactive) cl_active=t; \ 00000044 7C2090E5 LDR R2,[R0, #+124] \ 00000048 000052E3 CMP R2,#+0 \ 0000004C 0010A011 MOVNE R1,R0 3789 t=t->next; \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 F8FFFFEA B ??FindPrevActiveContact_2 3790 } 3791 return cl_active; 3792 } 3793 3794 \ In segment CODE, align 4, keep-with-next 3795 void ed_options_handler(USR_MENU_ITEM *item) 3796 { \ ed_options_handler: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 3797 EDCHAT_STRUCT *ed_struct=item->user_pointer; 3798 CLIST *t; 3799 int i=item->cur_item; 3800 if (item->type==0) \ 00000004 ........ LDR R5,??DataTable157 ;; S_ICONS \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 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 0D00001A BNE ??ed_options_handler_0 3801 { 3802 switch(i) \ 00000024 0C0097E5 LDR R0,[R7, #+12] \ 00000028 80119FE5 LDR R1,??ed_options_handler_1 ;; `?ws,LG_MNUEDNEXTACT); 3806 break; 3807 case 1: 3808 ascii2ws(item->ws,LG_MNUEDPREVACT); \ 00000038 10108102 ADDEQ R1,R1,#+16 \ 0000003C 0500000A BEQ ??ed_options_handler_2 3809 break; 3810 default: 3811 i-=2; 3812 if (iloaded_templates) ascii2ws(item->ws,templates_lines[i]); \ 00000040 101094E5 LDR R1,[R4, #+16] \ 00000044 026046E2 SUB R6,R6,#+2 \ 00000048 010056E1 CMP R6,R1 \ 0000004C 550000AA BGE ??ed_options_handler_3 \ 00000050 4C1195E5 LDR R1,[R5, #+332] \ 00000054 061191E7 LDR R1,[R1, +R6, LSL #+2] \ ??ed_options_handler_2: \ 00000058 ........ _BLF ascii2ws,??ascii2ws??rA 3813 break; 3814 } 3815 } 3816 if (item->type==1) \ ??ed_options_handler_0: \ 0000005C 0000D7E5 LDRB R0,[R7, #+0] \ 00000060 010050E3 CMP R0,#+1 \ 00000064 4F00001A BNE ??ed_options_handler_3 3817 { 3818 switch(i) \ 00000068 007094E5 LDR R7,[R4, #+0] \ 0000006C 0600B0E1 MOVS R0,R6 \ 00000070 0200000A BEQ ??ed_options_handler_4 \ 00000074 010056E2 SUBS R0,R6,#+1 \ 00000078 0C00000A BEQ ??ed_options_handler_5 \ 0000007C 0E0000EA B ??ed_options_handler_6 3819 { 3820 case 0: 3821 t=FindNextActiveContact(ed_struct->ed_contact); \ ??ed_options_handler_4: \ 00000080 0700A0E1 MOV R0,R7 \ 00000084 ........ BL FindNextActiveContact \ ??ed_options_handler_7: \ 00000088 0040B0E1 MOVS R4,R0 3822 if (t && t!=ed_struct->ed_contact) \ 0000008C 07005411 CMPNE R4,R7 \ 00000090 4400000A BEQ ??ed_options_handler_3 3823 { 3824 GeneralFunc_flag1(edchat_id,1); \ 00000094 800195E5 LDR R0,[R5, #+384] \ 00000098 0110A0E3 MOV R1,#+1 \ 0000009C 3D0100EF SWI +317 3825 CreateEditChat(t); \ 000000A0 0400A0E1 MOV R0,R4 \ 000000A4 ........ BL CreateEditChat \ 000000A8 2CD08DE2 ADD SP,SP,#+44 \ 000000AC F080BDE8 POP {R4-R7,PC} 3826 } 3827 break; 3828 case 1: 3829 t=FindPrevActiveContact(ed_struct->ed_contact); \ ??ed_options_handler_5: \ 000000B0 0700A0E1 MOV R0,R7 \ 000000B4 ........ BL FindPrevActiveContact \ 000000B8 F2FFFFEA B ??ed_options_handler_7 3830 if (t && t!=ed_struct->ed_contact) 3831 { 3832 GeneralFunc_flag1(edchat_id,1); 3833 CreateEditChat(t); 3834 } 3835 break; 3836 default: 3837 i-=2; 3838 if (iloaded_templates) \ ??ed_options_handler_6: \ 000000BC 100094E5 LDR R0,[R4, #+16] \ 000000C0 026046E2 SUB R6,R6,#+2 \ 000000C4 000056E1 CMP R6,R0 \ 000000C8 360000AA BGE ??ed_options_handler_3 3839 { 3840 EDITCONTROL ec; 3841 WSHDR *ed_ws; 3842 int c; 3843 char *p=templates_lines[i]; \ 000000CC 4C0195E5 LDR R0,[R5, #+332] 3844 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); \ 000000D0 081094E5 LDR R1,[R4, #+8] \ 000000D4 065190E7 LDR R5,[R0, +R6, LSL #+2] \ 000000D8 040094E5 LDR R0,[R4, #+4] \ 000000DC 0D20A0E1 MOV R2,SP \ 000000E0 690100EF SWI +361 3845 ed_ws=AllocWS(ec.pWS->wsbody[0]+strlen(p)); \ 000000E4 0500A0E1 MOV R0,R5 \ 000000E8 1B0000EF SWI +27 \ 000000EC 28109DE5 LDR R1,[SP, #+40] \ 000000F0 001091E5 LDR R1,[R1, #+0] \ 000000F4 B010D1E1 LDRH R1,[R1, #+0] \ 000000F8 010080E0 ADD R0,R0,R1 \ 000000FC 250100EF SWI +293 3846 wstrcpy(ed_ws,ec.pWS); \ 00000100 28109DE5 LDR R1,[SP, #+40] \ 00000104 0060A0E1 MOV R6,R0 \ 00000108 1F0100EF SWI +287 3847 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ 0000010C 040094E5 LDR R0,[R4, #+4] \ 00000110 820100EF SWI +386 \ 00000114 081094E5 LDR R1,[R4, #+8] \ 00000118 010050E1 CMP R0,R1 \ 0000011C 1800001A BNE ??ed_options_handler_8 3848 { 3849 int pos=EDIT_GetCursorPos(ed_struct->ed_chatgui); \ 00000120 040094E5 LDR R0,[R4, #+4] \ 00000124 D30100EF SWI +467 \ 00000128 0070A0E1 MOV R7,R0 \ 0000012C 050000EA B ??ed_options_handler_9 3850 while(c=*p++) 3851 { 3852 wsInsertChar(ed_ws,char8to16(c),pos++); \ ??ed_options_handler_10: \ 00000130 ........ _BLF char8to16,??char8to16??rA \ 00000134 0010A0E1 MOV R1,R0 \ 00000138 0720A0E1 MOV R2,R7 \ 0000013C 0600A0E1 MOV R0,R6 \ 00000140 1D0000EF SWI +29 \ 00000144 017087E2 ADD R7,R7,#+1 3853 } \ ??ed_options_handler_9: \ 00000148 ........ LDRB R0,[R5], #+1 \ 0000014C 000050E3 CMP R0,#+0 \ 00000150 F6FFFF1A BNE ??ed_options_handler_10 3854 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 00000154 081094E5 LDR R1,[R4, #+8] \ 00000158 040094E5 LDR R0,[R4, #+4] \ 0000015C 0620A0E1 MOV R2,R6 \ 00000160 DE0100EF SWI +478 3855 EDIT_SetCursorPos(ed_struct->ed_chatgui,pos); \ 00000164 040094E5 LDR R0,[R4, #+4] \ 00000168 0710A0E1 MOV R1,R7 \ 0000016C D40100EF SWI +468 \ 00000170 0A0000EA B ??ed_options_handler_11 3856 } 3857 else 3858 { 3859 while(c=*p++) 3860 { 3861 wsAppendChar(ed_ws,char8to16(c)); \ ??ed_options_handler_12: \ 00000174 ........ _BLF char8to16,??char8to16??rA \ 00000178 0010A0E1 MOV R1,R0 \ 0000017C 0600A0E1 MOV R0,R6 \ 00000180 1C0000EF SWI +28 3862 } \ ??ed_options_handler_8: \ 00000184 ........ LDRB R0,[R5], #+1 \ 00000188 000050E3 CMP R0,#+0 \ 0000018C F8FFFF1A BNE ??ed_options_handler_12 3863 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 00000190 081094E5 LDR R1,[R4, #+8] \ 00000194 040094E5 LDR R0,[R4, #+4] \ 00000198 0620A0E1 MOV R2,R6 \ 0000019C DE0100EF SWI +478 3864 } 3865 FreeWS(ed_ws); \ ??ed_options_handler_11: \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 3866 } 3867 break; 3868 } 3869 } 3870 } \ ??ed_options_handler_3: \ 000001A8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000001AC F080BDE8 POP {R4-R7,PC} ;; return \ ??ed_options_handler_1: \ 000001B0 ........ DC32 `?lines; 3887 while(st) 3888 { 3889 if ((ulb&st->mask)==st->key) 3890 { 3891 if (!strncmp(s,st->text,strlen(st->text))) goto L1; 3892 } 3893 st=st->next; 3894 } 3895 t=t->next; 3896 } 3897 L1: 3898 if (t) 3899 { 3900 wchar=t->uni_smile; \ ??ParseAnswer_2: \ 00000044 04909AE5 LDR R9,[R10, #+4] 3901 s+=strlen(st->text); \ 00000048 0C0084E2 ADD R0,R4,#+12 \ 0000004C 1B0000EF SWI +27 \ 00000050 066080E0 ADD R6,R0,R6 3902 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); \ 00000054 0000D6E5 LDRB R0,[R6, #+0] \ 00000058 0110D6E5 LDRB R1,[R6, #+1] \ 0000005C 010480E0 ADD R0,R0,R1, LSL #+8 \ 00000060 0210D6E5 LDRB R1,[R6, #+2] \ 00000064 010880E0 ADD R0,R0,R1, LSL #+16 \ 00000068 0310D6E5 LDRB R1,[R6, #+3] \ 0000006C 018C80E0 ADD R8,R0,R1, LSL #+24 3903 } 3904 else 3905 { 3906 wchar=char8to16(wchar); 3907 s++; 3908 ulb>>=8; 3909 ulb+=s[3]<<24; 3910 } 3911 if (wchar!=10) wsAppendChar(ws,wchar); \ ??ParseAnswer_3: \ 00000070 0A0059E3 CMP R9,#+10 \ 00000074 0200000A BEQ ??ParseAnswer_1 \ 00000078 0910A0E1 MOV R1,R9 \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 1C0000EF SWI +28 \ ??ParseAnswer_1: \ 00000084 0090D6E5 LDRB R9,[R6, #+0] \ 00000088 000059E3 CMP R9,#+0 \ 0000008C 2F00000A BEQ ??ParseAnswer_4 \ 00000090 07A0A0E1 MOV R10,R7 \ 00000094 220000EA B ??ParseAnswer_5 \ ??ParseAnswer_6: \ 00000098 0B00D4E5 LDRB R0,[R4, #+11] \ 0000009C 0A10D4E5 LDRB R1,[R4, #+10] \ 000000A0 0620D4E5 LDRB R2,[R4, #+6] \ 000000A4 000481E1 ORR R0,R1,R0, LSL #+8 \ 000000A8 0910D4E5 LDRB R1,[R4, #+9] \ 000000AC 000481E1 ORR R0,R1,R0, LSL #+8 \ 000000B0 0810D4E5 LDRB R1,[R4, #+8] \ 000000B4 000481E1 ORR R0,R1,R0, LSL #+8 \ 000000B8 0710D4E5 LDRB R1,[R4, #+7] \ 000000BC 080000E0 AND R0,R0,R8 \ 000000C0 011482E1 ORR R1,R2,R1, LSL #+8 \ 000000C4 0520D4E5 LDRB R2,[R4, #+5] \ 000000C8 011482E1 ORR R1,R2,R1, LSL #+8 \ 000000CC 0420D4E5 LDRB R2,[R4, #+4] \ 000000D0 011482E1 ORR R1,R2,R1, LSL #+8 \ 000000D4 010050E1 CMP R0,R1 \ 000000D8 0700001A BNE ??ParseAnswer_7 \ 000000DC 0C0084E2 ADD R0,R4,#+12 \ 000000E0 1B0000EF SWI +27 \ 000000E4 0020A0E1 MOV R2,R0 \ 000000E8 0C1084E2 ADD R1,R4,#+12 \ 000000EC 0600A0E1 MOV R0,R6 \ 000000F0 150100EF SWI +277 \ 000000F4 000050E3 CMP R0,#+0 \ 000000F8 D1FFFF0A BEQ ??ParseAnswer_2 \ ??ParseAnswer_7: \ 000000FC 0D00A0E1 MOV R0,SP \ 00000100 0410A0E3 MOV R1,#+4 \ ??ParseAnswer_8: \ 00000104 ........ LDRB R2,[R4], #+1 \ 00000108 011051E2 SUBS R1,R1,#+1 \ 0000010C ........ STRB R2,[R0], #+1 \ 00000110 FBFFFF1A BNE ??ParseAnswer_8 \ 00000114 00409DE5 LDR R4,[SP, #+0] \ ??ParseAnswer_9: \ 00000118 000054E3 CMP R4,#+0 \ 0000011C DDFFFF1A BNE ??ParseAnswer_6 \ 00000120 00A09AE5 LDR R10,[R10, #+0] \ ??ParseAnswer_5: \ 00000124 00005AE3 CMP R10,#+0 \ 00000128 08409A15 LDRNE R4,[R10, #+8] \ 0000012C F9FFFF1A BNE ??ParseAnswer_9 \ 00000130 0900A0E1 MOV R0,R9 \ 00000134 ........ _BLF char8to16,??char8to16??rA \ 00000138 0090A0E1 MOV R9,R0 \ 0000013C 016086E2 ADD R6,R6,#+1 \ 00000140 0300D6E5 LDRB R0,[R6, #+3] \ 00000144 000CA0E1 LSL R0,R0,#+24 \ 00000148 288480E0 ADD R8,R0,R8, LSR #+8 \ 0000014C C7FFFFEA B ??ParseAnswer_3 3912 } 3913 i=ws->wsbody[0]; \ ??ParseAnswer_4: \ 00000150 000095E5 LDR R0,[R5, #+0] \ 00000154 B010D0E1 LDRH R1,[R0, #+0] \ 00000158 020051E3 CMP R1,#+2 \ 0000015C F187BDB8 POPLT {R0,R4-R10,PC} 3914 while(i>1) 3915 { 3916 if (ws->wsbody[i--]!=13) break; \ ??ParseAnswer_10: \ 00000160 0120A0E1 MOV R2,R1 \ 00000164 011042E2 SUB R1,R2,#+1 \ 00000168 822080E0 ADD R2,R0,R2, LSL #+1 \ 0000016C B020D2E1 LDRH R2,[R2, #+0] \ 00000170 0D0052E3 CMP R2,#+13 \ 00000174 F187BD18 POPNE {R0,R4-R10,PC} 3917 ws->wsbody[0]=i; \ 00000178 B010C0E1 STRH R1,[R0, #+0] 3918 } \ 0000017C 020051E3 CMP R1,#+2 \ 00000180 F6FFFFAA BGE ??ParseAnswer_10 3919 } \ 00000184 F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??ParseAnswer_0: \ 00000188 ........ DC32 s_top 3920 \ In segment CODE, align 4, keep-with-next 3921 void SaveAnswer(CLIST *cl, WSHDR *ws) 3922 { \ SaveAnswer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0100A0E1 MOV R0,R1 3923 char *p=ExtractAnswer(ws); \ 0000000C ........ BL ExtractAnswer \ 00000010 0050A0E1 MOV R5,R0 3924 mfree(cl->answer); \ 00000014 740094E5 LDR R0,[R4, #+116] \ 00000018 150000EF SWI +21 3925 cl->answer=p; \ 0000001C 745084E5 STR R5,[R4, #+116] 3926 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 3927 \ In segment CODE, align 4, keep-with-next 3928 int edchat_onkey(GUI *data, GUI_MSG *msg) 3929 { \ edchat_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3930 //-1 - do redraw 3931 GBS_DelTimer(&tmr_illumination); \ 00000004 ........ LDR R7,??DataTable157 ;; S_ICONS \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 0050A0E1 MOV R5,R0 \ 00000010 0140A0E1 MOV R4,R1 \ 00000014 E400A0E3 MOV R0,#+228 \ 00000018 500D80E3 ORR R0,R0,#0x1400 \ 0000001C 070080E0 ADD R0,R0,R7 \ 00000020 8C0100EF SWI +396 3932 CLIST *t; 3933 TPKT *p; 3934 EDITCONTROL ec; 3935 int len; 3936 char *s; 3937 int l=msg->gbsmsg->submess; \ 00000024 040094E5 LDR R0,[R4, #+4] \ 00000028 089090E5 LDR R9,[R0, #+8] 3938 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 DF0100EF SWI +479 \ 00000034 0060A0E1 MOV R6,R0 3939 3940 if (msg->keys==0xFFF) \ 00000038 F200D4E1 LDRSH R0,[R4, #+2] \ 0000003C FF10A0E3 MOV R1,#+255 \ 00000040 F01E81E3 ORR R1,R1,#0xF00 \ 00000044 010050E1 CMP R0,R1 \ 00000048 0200001A BNE ??edchat_onkey_0 3941 { 3942 void ec_menu(EDCHAT_STRUCT *); 3943 ec_menu(ed_struct); \ 0000004C 0600A0E1 MOV R0,R6 \ 00000050 ........ BL ec_menu 3944 return(-1); \ 00000054 980000EA B ??edchat_onkey_1 3945 } 3946 if (msg->keys==0xFF0) return (1); \ ??edchat_onkey_0: \ 00000058 FF0E50E3 CMP R0,#+4080 \ 0000005C 0100A003 MOVEQ R0,#+1 \ 00000060 3C00000A BEQ ??edchat_onkey_2 3947 if (msg->gbsmsg->msg==LONG_PRESS) \ 00000064 040094E5 LDR R0,[R4, #+4] \ 00000068 F98FA0E3 MOV R8,#+996 \ 0000006C 040090E5 LDR R0,[R0, #+4] \ 00000070 9510A0E3 MOV R1,#+149 \ 00000074 401F81E3 ORR R1,R1,#0x100 \ 00000078 010050E1 CMP R0,R1 \ 0000007C 2300001A BNE ??edchat_onkey_3 3948 { 3949 #ifdef ELKA 3950 if (l==VOL_DOWN_BUTTON) \ 00000080 0E0059E3 CMP R9,#+14 \ 00000084 0F00001A BNE ??edchat_onkey_4 3951 { 3952 WSHDR *ws; 3953 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000088 081096E5 LDR R1,[R6, #+8] \ 0000008C 0D20A0E1 MOV R2,SP \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 690100EF SWI +361 3954 if(wstrlen(ec.pWS)>0) \ 00000098 28009DE5 LDR R0,[SP, #+40] \ 0000009C 230100EF SWI +291 \ 000000A0 010050E3 CMP R0,#+1 \ 000000A4 190000BA BLT ??edchat_onkey_3 3955 { 3956 ws=AllocWS(1); \ 000000A8 0100A0E3 MOV R0,#+1 \ 000000AC 250100EF SWI +293 \ 000000B0 00A0A0E1 MOV R10,R0 3957 CutWSTR(ws,0); \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 260100EF SWI +294 3958 3959 EDIT_SetFocus(data,ed_struct->ed_answer); \ 000000BC 081096E5 LDR R1,[R6, #+8] \ 000000C0 0500A0E1 MOV R0,R5 \ 000000C4 0A0000EA B ??edchat_onkey_5 3960 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 3961 3962 FreeWS(ws); 3963 RefreshGUI(); 3964 } 3965 } 3966 if (l==VOL_UP_BUTTON) \ ??edchat_onkey_4: \ 000000C8 0D0059E3 CMP R9,#+13 \ 000000CC 0F00001A BNE ??edchat_onkey_3 3967 { 3968 // WSHDR *ws=AllocWS(strlen(ed_struct->ed_contact->last_msg_buffer)+1); 3969 // ascii2ws(ws,ed_struct->ed_contact->last_msg_buffer); 3970 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); \ 000000D0 070088E0 ADD R0,R8,R7 \ 000000D4 1B0000EF SWI +27 \ 000000D8 010080E2 ADD R0,R0,#+1 \ 000000DC 250100EF SWI +293 \ 000000E0 00A0A0E1 MOV R10,R0 3971 ascii2ws(ws,last_msg_buffer); \ 000000E4 071088E0 ADD R1,R8,R7 \ 000000E8 ........ _BLF ascii2ws,??ascii2ws??rA 3972 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); \ 000000EC 081096E5 LDR R1,[R6, #+8] \ 000000F0 040096E5 LDR R0,[R6, #+4] \ ??edchat_onkey_5: \ 000000F4 9B0100EF SWI +411 3973 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 000000F8 040096E5 LDR R0,[R6, #+4] \ 000000FC 0A10A0E1 MOV R1,R10 \ 00000100 810100EF SWI +385 3974 FreeWS(ws); \ 00000104 0A00A0E1 MOV R0,R10 \ 00000108 290100EF SWI +297 3975 RefreshGUI(); \ 0000010C 960100EF SWI +406 3976 } 3977 #else 3978 if (l==RIGHT_BUTTON) 3979 { 3980 if (EDIT_GetFocus(data)==ed_struct->ed_answer) 3981 { 3982 ExtractEditControl(data,ed_struct->ed_answer,&ec); 3983 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) 3984 { 3985 t=FindNextActiveContact(ed_struct->ed_contact); 3986 if (t && t!=ed_struct->ed_contact) 3987 { 3988 CreateEditChat(t); 3989 return(1); 3990 } 3991 } 3992 } 3993 } 3994 #endif 3995 } 3996 if (msg->gbsmsg->msg==KEY_DOWN) \ ??edchat_onkey_3: \ 00000110 040094E5 LDR R0,[R4, #+4] \ 00000114 9310A0E3 MOV R1,#+147 \ 00000118 040090E5 LDR R0,[R0, #+4] \ 0000011C 401F81E3 ORR R1,R1,#0x100 \ 00000120 010050E1 CMP R0,R1 \ 00000124 0A00001A BNE ??edchat_onkey_6 3997 { 3998 if ((l>='0')&&(l<='9')) \ 00000128 300059E3 CMP R9,#+48 \ 0000012C 0B0000BA BLT ??edchat_onkey_7 \ 00000130 3A0059E3 CMP R9,#+58 \ 00000134 060000AA BGE ??edchat_onkey_6 3999 { 4000 if (EDIT_GetFocus(data)!=ed_struct->ed_answer) \ 00000138 0500A0E1 MOV R0,R5 \ 0000013C 820100EF SWI +386 \ 00000140 081096E5 LDR R1,[R6, #+8] \ 00000144 010050E1 CMP R0,R1 \ 00000148 0100000A BEQ ??edchat_onkey_6 4001 EDIT_SetFocus(data,ed_struct->ed_answer); \ 0000014C 0500A0E1 MOV R0,R5 \ 00000150 9B0100EF SWI +411 4002 } 4003 if (l==GREEN_BUTTON) 4004 { 4005 if (connect_state==3) 4006 { 4007 if ((t=ed_struct->ed_contact)) 4008 { 4009 ExtractEditControl(data,ed_struct->ed_answer,&ec); 4010 SaveAnswer(t,ec.pWS); 4011 if ((s=t->answer)) 4012 { 4013 if ((len=strlen(s))) 4014 { 4015 t->isactive=ACTIVE_TIME; 4016 p=malloc(sizeof(PKT)+len+1); 4017 p->pkt.uin=t->uin; 4018 p->pkt.type=T_SENDMSG; 4019 p->pkt.data_len=len; 4020 strcpy(p->data,s); 4021 #ifdef ELKA 4022 strcpy(last_msg_buffer, s); 4023 #endif 4024 AddStringToLog(t,0x01,p->data,I_str,(++SENDMSGCOUNT)&0x7FFF); //Номер сообщения 4025 out_count++; 4026 SUBPROC((void *)SendAnswer,0,p); 4027 mfree(t->answer); 4028 t->answer=NULL; 4029 // request_remake_edchat=1; 4030 EDIT_SetFocus(data,ed_struct->ed_answer); 4031 CutWSTR(ews,0); 4032 EDIT_SetTextToFocused(data,ews); 4033 AddMsgToChat(data); 4034 RecountMenu(t, 1); 4035 return(-1); 4036 } 4037 } 4038 } 4039 } 4040 } 4041 if (l==ENTER_BUTTON) 4042 { 4043 // t=FindNextActiveContact(ed_struct->ed_contact); 4044 // if ((t!=ed_struct->ed_contact) && t) 4045 { 4046 int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 4047 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+2); 4048 return (-1); 4049 } 4050 } 4051 if (l==VOL_UP_BUTTON) 4052 { 4053 int pos; 4054 4055 if ((pos=EDIT_GetFocus(data)-2)>=2) 4056 { 4057 EDIT_SetFocus(data, pos); 4058 EDIT_SetCursorPos(data, 1); 4059 } 4060 return (-1); 4061 } 4062 if (l==VOL_DOWN_BUTTON) 4063 { 4064 int pos; 4065 4066 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 4067 { 4068 EDIT_SetFocus(data, pos); 4069 EDIT_SetCursorPos(data, 1); 4070 } 4071 return (-1); 4072 } 4073 } 4074 return(0); //Do standart keys \ ??edchat_onkey_6: \ 00000154 0000A0E3 MOV R0,#+0 \ ??edchat_onkey_2: \ 00000158 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 0000015C F08FBDE8 POP {R4-R11,PC} ;; return \ ??edchat_onkey_7: \ 00000160 004096E5 LDR R4,[R6, #+0] \ 00000164 0B0059E3 CMP R9,#+11 \ 00000168 4900001A BNE ??edchat_onkey_8 \ 0000016C 540197E5 LDR R0,[R7, #+340] \ 00000170 030050E3 CMP R0,#+3 \ 00000174 F6FFFF1A BNE ??edchat_onkey_6 \ 00000178 000054E3 CMP R4,#+0 \ 0000017C F4FFFF0A BEQ ??edchat_onkey_6 \ 00000180 081096E5 LDR R1,[R6, #+8] \ 00000184 0D20A0E1 MOV R2,SP \ 00000188 0500A0E1 MOV R0,R5 \ 0000018C 690100EF SWI +361 \ 00000190 28109DE5 LDR R1,[SP, #+40] \ 00000194 0400A0E1 MOV R0,R4 \ 00000198 ........ BL SaveAnswer \ 0000019C 74A094E5 LDR R10,[R4, #+116] \ 000001A0 00005AE3 CMP R10,#+0 \ 000001A4 EAFFFF0A BEQ ??edchat_onkey_6 \ 000001A8 0A00A0E1 MOV R0,R10 \ 000001AC 1B0000EF SWI +27 \ 000001B0 00B0B0E1 MOVS R11,R0 \ 000001B4 E6FFFF0A BEQ ??edchat_onkey_6 \ 000001B8 1E00A0E3 MOV R0,#+30 \ 000001BC 7C0084E5 STR R0,[R4, #+124] \ 000001C0 09008BE2 ADD R0,R11,#+9 \ 000001C4 140000EF SWI +20 \ 000001C8 0090A0E1 MOV R9,R0 \ 000001CC 0C0094E5 LDR R0,[R4, #+12] \ 000001D0 0A10A0E1 MOV R1,R10 \ 000001D4 000089E5 STR R0,[R9, #+0] \ 000001D8 0200A0E3 MOV R0,#+2 \ 000001DC B400C9E1 STRH R0,[R9, #+4] \ 000001E0 B6B0C9E1 STRH R11,[R9, #+6] \ 000001E4 080089E2 ADD R0,R9,#+8 \ 000001E8 1A0000EF SWI +26 \ 000001EC 0A10A0E1 MOV R1,R10 \ 000001F0 070088E0 ADD R0,R8,R7 \ 000001F4 1A0000EF SWI +26 \ 000001F8 140197E5 LDR R0,[R7, #+276] \ 000001FC ........ LDR R3,??DataTable179 ;; `?ed_contact)); 4095 ((HEADER_DESC *)&edchat_hdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 4096 DrawImg(ScreenW()-1-width,1,icon); 4097 #else 4098 icon=*(S_ICONS+GetIconIndex(ed_struct->ed_contact)); \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C ........ BL GetIconIndex \ 00000040 004194E7 LDR R4,[R4, +R0, LSL #+2] 4099 width=GetImgWidth(icon); \ 00000044 0400A0E1 MOV R0,R4 \ 00000048 220000EF SWI +34 \ 0000004C 0050A0E1 MOV R5,R0 4100 DrawImg(2,((HeaderH()-width)>>1)+YDISP,icon); \ 00000050 8A8100EF SWI +33162 \ 00000054 0420A0E1 MOV R2,R4 \ 00000058 050040E0 SUB R0,R0,R5 \ 0000005C 1810A0E3 MOV R1,#+24 \ 00000060 C01081E0 ADD R1,R1,R0, ASR #+1 \ 00000064 0200A0E3 MOV R0,#+2 \ 00000068 230000EF SWI +35 4101 /* DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 4102 GetPaletteAdrByColorIndex(0), 4103 GetPaletteAdrByColorIndex(EDIT_IsBusy(edchat_gui)?3:4));*/ 4104 #endif 4105 } 4106 } 4107 } \ 0000006C 3080BDE8 POP {R4,R5,PC} ;; return 4108 \ In segment CODE, align 4, keep-with-next 4109 void edchat_ghook(GUI *data, int cmd) 4110 { \ edchat_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 4111 static const SOFTKEY_DESC sk={0x0FFF,0x0000,(int)LG_MENU}; 4112 static const SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,(int)LG_CLOSE}; 4113 // static SOFTKEY_DESC sk={0x0018,0x0000,(int)"Menu"}; 4114 int j; 4115 EDITCONTROL ec; 4116 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); 4117 PNGTOP_DESC *pltop=PNG_TOP(); 4118 if (cmd==9) \ 00000004 ........ LDR R4,??DataTable157 ;; S_ICONS \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 0050A0E1 MOV R5,R0 \ 00000010 0190A0E1 MOV R9,R1 \ 00000014 DF0100EF SWI +479 \ 00000018 0070A0E1 MOV R7,R0 \ 0000001C B98100EF SWI +33209 \ 00000020 0080A0E1 MOV R8,R0 \ 00000024 0060A0E3 MOV R6,#+0 \ 00000028 090059E3 CMP R9,#+9 \ 0000002C 0500001A BNE ??edchat_ghook_0 4119 { 4120 GBS_DelTimer(&tmr_illumination); //by BoBa 25.06.07 \ 00000030 E400A0E3 MOV R0,#+228 \ 00000034 500D80E3 ORR R0,R0,#0x1400 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 8C0100EF SWI +396 4121 pltop->dyn_pltop=NULL; \ 00000040 086088E5 STR R6,[R8, #+8] \ 00000044 170000EA B ??edchat_ghook_1 4122 } 4123 if (cmd==2) \ ??edchat_ghook_0: \ 00000048 081097E5 LDR R1,[R7, #+8] \ 0000004C 020059E3 CMP R9,#+2 \ 00000050 1600001A BNE ??edchat_ghook_2 4124 { 4125 ed_struct->ed_chatgui=data; \ 00000054 045087E5 STR R5,[R7, #+4] 4126 // edgui_data=data; 4127 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 9B0100EF SWI +411 4128 4129 static void *methods[16]; 4130 void **m=GetDataOfItemByID(data,2); \ 00000060 0210A0E3 MOV R1,#+2 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 4F0100EF SWI +335 \ 0000006C 0050B0E1 MOVS R5,R0 4131 if (m) 4132 { 4133 if (m[1]) \ 00000070 04009515 LDRNE R0,[R5, #+4] \ 00000074 00005013 CMPNE R0,#+0 \ 00000078 6300000A BEQ ??edchat_ghook_3 4134 { 4135 memcpy(methods,m[1],sizeof(methods)); \ 0000007C 686FA0E3 MOV R6,#+416 \ 00000080 4020A0E3 MOV R2,#+64 \ 00000084 0010A0E1 MOV R1,R0 \ 00000088 040086E0 ADD R0,R6,R4 \ 0000008C 1E0100EF SWI +286 4136 old_ed_redraw=(void (*)(void *))(methods[0]); \ 00000090 040096E7 LDR R0,[R6, +R4] \ 00000094 9C0184E5 STR R0,[R4, #+412] 4137 methods[0]=(void *)my_ed_redraw; \ 00000098 74019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 0000009C 040086E7 STR R0,[R6, +R4] 4138 m[1]=methods; \ 000000A0 040086E0 ADD R0,R6,R4 \ 000000A4 040085E5 STR R0,[R5, #+4] \ ??edchat_ghook_1: \ 000000A8 2CD08DE2 ADD SP,SP,#+44 \ 000000AC F083BDE8 POP {R4-R9,PC} 4139 } 4140 } 4141 } 4142 if (cmd==3) \ ??edchat_ghook_2: \ 000000B0 030059E3 CMP R9,#+3 \ 000000B4 0E00001A BNE ??edchat_ghook_5 4143 { 4144 // if (edgui_data==data) edgui_data=NULL; 4145 if (ed_struct->ed_contact) \ 000000B8 000097E5 LDR R0,[R7, #+0] \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 0500000A BEQ ??edchat_ghook_6 4146 { 4147 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C4 0D20A0E1 MOV R2,SP \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 690100EF SWI +361 4148 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000D0 28109DE5 LDR R1,[SP, #+40] \ 000000D4 000097E5 LDR R0,[R7, #+0] \ 000000D8 ........ BL SaveAnswer 4149 } 4150 RecountMenu(ed_struct->ed_contact, 1); \ ??edchat_ghook_6: \ 000000DC 000097E5 LDR R0,[R7, #+0] \ 000000E0 0110A0E3 MOV R1,#+1 \ 000000E4 ........ BL RecountMenu 4151 mfree(ed_struct); \ 000000E8 0700A0E1 MOV R0,R7 \ 000000EC 150000EF SWI +21 \ 000000F0 ECFFFFEA B ??edchat_ghook_1 4152 } 4153 if (cmd==0x0A) \ ??edchat_ghook_5: \ 000000F4 0A0059E3 CMP R9,#+10 \ 000000F8 0900001A BNE ??edchat_ghook_7 4154 { 4155 pltop->dyn_pltop=SmilesImgList; \ 000000FC 14019FE5 LDR R0,??edchat_ghook_4+0x4 ;; SmilesImgList \ 00000100 000090E5 LDR R0,[R0, #+0] \ 00000104 080088E5 STR R0,[R8, #+8] 4156 DisableIDLETMR(); \ 00000108 7F0100EF SWI +383 4157 total_unread-=ed_struct->requested_decrement_total_unread; \ 0000010C 8C0094E5 LDR R0,[R4, #+140] \ 00000110 0C1097E5 LDR R1,[R7, #+12] \ 00000114 010040E0 SUB R0,R0,R1 \ 00000118 8C0084E5 STR R0,[R4, #+140] 4158 ed_struct->requested_decrement_total_unread=0; \ 0000011C 0C6087E5 STR R6,[R7, #+12] \ 00000120 E0FFFFEA B ??edchat_ghook_1 4159 /* if (request_close_edchat) 4160 { 4161 request_close_edchat=0; 4162 GeneralFunc_flag1(edchat_id,1); 4163 return; 4164 }*/ 4165 } 4166 if (cmd==7) \ ??edchat_ghook_7: \ 00000124 070059E3 CMP R9,#+7 \ 00000128 2800001A BNE ??edchat_ghook_8 4167 { 4168 SetSoftKey(data,&sk,SET_SOFT_KEY_N); \ 0000012C E8809FE5 LDR R8,??edchat_ghook_4+0x8 ;; ??sk \ 00000130 0020A0E3 MOV R2,#+0 \ 00000134 0810A0E1 MOV R1,R8 \ 00000138 0500A0E1 MOV R0,R5 \ 0000013C 680100EF SWI +360 4169 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000140 081097E5 LDR R1,[R7, #+8] \ 00000144 0D20A0E1 MOV R2,SP \ 00000148 0500A0E1 MOV R0,R5 \ 0000014C 690100EF SWI +361 4170 if (ec.pWS->wsbody[0]==0) \ 00000150 28009DE5 LDR R0,[SP, #+40] \ 00000154 000090E5 LDR R0,[R0, #+0] \ 00000158 B000D0E1 LDRH R0,[R0, #+0] \ 0000015C 000050E3 CMP R0,#+0 \ 00000160 0300001A BNE ??edchat_ghook_9 4171 SetSoftKey(data,&sk_cancel,SET_SOFT_KEY_N==0?1:0); \ 00000164 0120A0E3 MOV R2,#+1 \ 00000168 081088E2 ADD R1,R8,#+8 \ 0000016C 0500A0E1 MOV R0,R5 \ 00000170 680100EF SWI +360 4172 if (!EDIT_IsBusy(data)) \ ??edchat_ghook_9: \ 00000174 0500A0E1 MOV R0,R5 \ 00000178 1C0200EF SWI +540 \ 0000017C 000050E3 CMP R0,#+0 \ 00000180 2100001A BNE ??edchat_ghook_3 4173 { 4174 time_to_stop_t9=0; \ 00000184 986184E5 STR R6,[R4, #+408] 4175 if (ed_struct->ed_contact->req_add) \ 00000188 000097E5 LDR R0,[R7, #+0] \ 0000018C 681090E5 LDR R1,[R0, #+104] \ 00000190 000051E3 CMP R1,#+0 \ 00000194 0500000A BEQ ??edchat_ghook_10 4176 { 4177 ed_struct->ed_contact->req_add=0; \ 00000198 686080E5 STR R6,[R0, #+104] 4178 AddMsgToChat(data); \ 0000019C 0500A0E1 MOV R0,R5 \ 000001A0 ........ BL AddMsgToChat 4179 RecountMenu(ed_struct->ed_contact, 1); \ 000001A4 000097E5 LDR R0,[R7, #+0] \ 000001A8 0110A0E3 MOV R1,#+1 \ 000001AC ........ BL RecountMenu 4180 } 4181 if (ed_struct->ed_contact->req_drawack) \ ??edchat_ghook_10: \ 000001B0 000097E5 LDR R0,[R7, #+0] \ 000001B4 6C1090E5 LDR R1,[R0, #+108] \ 000001B8 000051E3 CMP R1,#+0 \ 000001BC 1200000A BEQ ??edchat_ghook_3 4182 { 4183 ed_struct->ed_contact->req_drawack=0; \ 000001C0 6C6080E5 STR R6,[R0, #+108] 4184 DrawAck(data); \ 000001C4 0500A0E1 MOV R0,R5 \ 000001C8 ........ BL DrawAck \ 000001CC B5FFFFEA B ??edchat_ghook_1 4185 } 4186 } 4187 } 4188 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001D0 0C0059E3 CMP R9,#+12 \ 000001D4 0C00001A BNE ??edchat_ghook_3 4189 { 4190 j=EDIT_GetFocus(data); \ 000001D8 0500A0E1 MOV R0,R5 \ 000001DC 820100EF SWI +386 \ 000001E0 0040A0E1 MOV R4,R0 4191 if ((EDIT_GetUnFocus(data)ed_answer)) \ 000001E4 0500A0E1 MOV R0,R5 \ 000001E8 830100EF SWI +387 \ 000001EC 040050E1 CMP R0,R4 \ 000001F0 050000AA BGE ??edchat_ghook_3 \ 000001F4 080097E5 LDR R0,[R7, #+8] \ 000001F8 000054E1 CMP R4,R0 \ 000001FC 0200000A BEQ ??edchat_ghook_3 4192 EDIT_SetCursorPos(data,1); \ 00000200 0110A0E3 MOV R1,#+1 \ 00000204 0500A0E1 MOV R0,R5 \ 00000208 D40100EF SWI +468 4193 } 4194 } \ ??edchat_ghook_3: \ 0000020C 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 00000210 F083BDE8 POP {R4-R9,PC} ;; return \ ??edchat_ghook_4: \ 00000214 ........ DC32 my_ed_redraw \ 00000218 ........ DC32 SmilesImgList \ 0000021C ........ DC32 ??sk \ In segment DATA_C, align 4, align-sorted 4195 4196 4197 4198 static const INPUTDIA_DESC edchat_desc = \ edchat_desc: \ 00000000 01000000.... DC32 1, edchat_onkey, edchat_ghook, edchat_locret, 0, menu_skt \ ............ \ ........0000 \ 0000........ \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 080000006400 DC32 8, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ 00000038 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000040 000000000000 DC32 0H, 0, 2147483647 \ 0000FFFFFF7F \ 0000004C 2D2D2D2D2D2D DC8 "-------" \ 2D00 \ In segment DATA_C, align 4, align-sorted \ ??sk: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?` \ 00000008 F00F0000 DC16 4080, 0 \ 0000000C ........ DC32 `?` 4199 { 4200 1, 4201 edchat_onkey, 4202 edchat_ghook, 4203 (void *)edchat_locret, 4204 0, 4205 &menu_skt, 4206 {0,NULL,NULL,NULL}, 4207 FONT_SMALL, 4208 100, 4209 101, 4210 0, 4211 // 0x00000001 - Выровнять по правому краю 4212 // 0x00000002 - Выровнять по центру 4213 // 0x00000004 - Инверсия знакомест 4214 // 0x00000008 - UnderLine 4215 // 0x00000020 - Не переносить слова 4216 // 0x00000200 - bold 4217 0, 4218 // 0x00000002 - ReadOnly 4219 // 0x00000004 - Не двигается курсор 4220 // 0x40000000 - Поменять местами софт-кнопки 4221 0x40000000 4222 }; 4223 \ In segment CODE, align 4, keep-with-next 4224 void CreateEditChat(CLIST *t) 4225 { \ CreateEditChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4226 extern const int FIRST_LETTER; 4227 void *ma=malloc_adr(); 4228 void *eq; 4229 EDITCONTROL ec; 4230 EDITC_OPTIONS ec_options; 4231 int color, font, type; 4232 int zc; 4233 4234 LOGQ *lp; 4235 int edchat_toitem; 4236 // edcontact=t; 4237 4238 *((int *)(&edchat_hdr.lgp_id))=(int)t->name; \ 00000004 8C649FE5 LDR R6,??CreateEditChat_0 ;; edchat_desc 4239 // *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+GetIconIndex(t); 4240 *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+IS_NULLICON; \ 00000008 ........ LDR R7,??DataTable158 ;; S_ICONS \ 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 440087E2 ADD R0,R7,#+68 \ 00000028 400086E5 STR R0,[R6, #+64] 4241 4242 eq=AllocEQueue(ma,mfree_adr()); \ 0000002C 158000EF SWI +32789 \ 00000030 0010A0E1 MOV R1,R0 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 630100EF SWI +355 4243 4244 4245 lp=t->log; \ 0000003C 709094E5 LDR R9,[R4, #+112] \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 000059E3 CMP R9,#+0 \ 00000048 9500000A BEQ ??CreateEditChat_1 4246 4247 while(lp) 4248 { 4249 font = ED_H_FONT_SIZE; 4250 if ((zc=lp->acked&3)) \ ??CreateEditChat_2: \ 0000004C ........ LDR R2,??DataTable159 ;; ED_X_FONT_SIZE \ 00000050 ........ LDR R0,??DataTable160 ;; 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,??DataTable161 ;; I_COLOR \ 00000064 1C208DE5 STR R2,[SP, #+28] \ 00000068 ........ LDR R2,??DataTable162 ;; X_COLOR \ 0000006C 030010E2 ANDS R0,R0,#0x3 \ 00000070 002092E5 LDR R2,[R2, #+0] \ 00000074 14208DE5 STR R2,[SP, #+20] \ 00000078 ........ LDR R2,??DataTable163 ;; O_ED_X_FONT_SIZE \ 0000007C 002092E5 LDR R2,[R2, #+0] \ 00000080 18208DE5 STR R2,[SP, #+24] \ 00000084 ........ LDR R2,??DataTable164 ;; 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 4251 { 4252 if (zc==1) \ 00000098 010050E3 CMP R0,#+1 \ 0000009C 1E00001A BNE ??CreateEditChat_4 4253 color=ACK_COLOR; //Зеленый \ 000000A0 ........ LDR R0,??DataTable165 ;; ACK_COLOR \ 000000A4 1B0000EA B ??CreateEditChat_5 4254 else 4255 color=I_COLOR; 4256 } 4257 else 4258 { 4259 if (lp->ID==0xFFFFFFFF) \ ??CreateEditChat_3: \ 000000A8 080099E5 LDR R0,[R9, #+8] \ 000000AC 010070E3 CMN R0,#+1 \ 000000B0 1700001A BNE ??CreateEditChat_6 4260 { 4261 type = lp->type&0x0F; \ 000000B4 0C0099E5 LDR R0,[R9, #+12] \ 000000B8 0F1000E2 AND R1,R0,#0xF 4262 if(lp->type&0x10) \ 000000BC 100010E3 TST R0,#0x10 \ 000000C0 0B00000A BEQ ??CreateEditChat_7 4263 { 4264 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 000000C4 010051E3 CMP R1,#+1 \ 000000C8 ........ LDREQ R0,??DataTable166 ;; O_I_COLOR \ 000000CC 0400000A BEQ ??CreateEditChat_8 \ 000000D0 030051E3 CMP R1,#+3 \ 000000D4 18A09D05 LDREQ R10,[SP, #+24] \ 000000D8 02B0A001 MOVEQ R11,R2 \ 000000DC 0E00000A BEQ ??CreateEditChat_4 \ 000000E0 ........ LDR R0,??DataTable167 ;; O_TO_COLOR \ ??CreateEditChat_8: \ 000000E4 00B090E5 LDR R11,[R0, #+0] \ 000000E8 ........ LDR R0,??DataTable168 ;; O_ED_H_FONT_SIZE \ 000000EC 00A090E5 LDR R10,[R0, #+0] \ 000000F0 090000EA B ??CreateEditChat_4 4265 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 4266 } 4267 else 4268 { 4269 color = (type==1)?I_COLOR:((type==3)?X_COLOR:TO_COLOR); \ ??CreateEditChat_7: \ 000000F4 010051E3 CMP R1,#+1 \ 000000F8 0700000A BEQ ??CreateEditChat_4 \ 000000FC 030051E3 CMP R1,#+3 \ 00000100 14B09D05 LDREQ R11,[SP, #+20] \ 00000104 1CA09D05 LDREQ R10,[SP, #+28] \ 00000108 0300000A BEQ ??CreateEditChat_4 \ 0000010C ........ LDR R0,??DataTable169 ;; TO_COLOR \ 00000110 000000EA B ??CreateEditChat_5 4270 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 4271 } 4272 } 4273 else 4274 color=UNACK_COLOR; //Серый \ ??CreateEditChat_6: \ 00000114 ........ LDR R0,??DataTable170 ;; UNACK_COLOR \ ??CreateEditChat_5: \ 00000118 00B090E5 LDR R11,[R0, #+0] 4275 } 4276 PrepareEditControl(&ec); \ ??CreateEditChat_4: \ 0000011C 20008DE2 ADD R0,SP,#+32 \ 00000120 640100EF SWI +356 4277 if ((lp->type&0x0F)!=3) \ 00000124 0C0099E5 LDR R0,[R9, #+12] \ 00000128 0F0000E2 AND R0,R0,#0xF \ 0000012C 030050E3 CMP R0,#+3 \ 00000130 0800000A BEQ ??CreateEditChat_9 4278 { 4279 ascii2ws(ews,lp->hdr); \ 00000134 1C0197E5 LDR R0,[R7, #+284] \ 00000138 101089E2 ADD R1,R9,#+16 \ 0000013C ........ _BLF ascii2ws,??ascii2ws??rA 4280 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000140 1C3197E5 LDR R3,[R7, #+284] \ 00000144 4020A0E3 MOV R2,#+64 \ 00000148 000093E5 LDR R0,[R3, #+0] \ 0000014C B000D0E1 LDRH R0,[R0, #+0] \ 00000150 01002DE9 PUSH {R0} \ 00000154 030000EA B ??CreateEditChat_10 4281 } 4282 else 4283 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??CreateEditChat_9: \ 00000158 0000A0E3 MOV R0,#+0 \ 0000015C 01002DE9 PUSH {R0} \ 00000160 1C3197E5 LDR R3,[R7, #+284] \ 00000164 2020A0E3 MOV R2,#+32 \ ??CreateEditChat_10: \ 00000168 0110A0E3 MOV R1,#+1 \ 0000016C 24008DE2 ADD R0,SP,#+36 \ 00000170 650100EF SWI +357 \ 00000174 04D08DE2 ADD SP,SP,#+4 4284 PrepareEditCOptions(&ec_options); \ 00000178 0D00A0E1 MOV R0,SP \ 0000017C C80100EF SWI +456 4285 SetPenColorToEditCOptions(&ec_options,color); \ 00000180 0B10A0E1 MOV R1,R11 \ 00000184 0D00A0E1 MOV R0,SP \ 00000188 CC0100EF SWI +460 4286 SetFontToEditCOptions(&ec_options,font); \ 0000018C 0A10A0E1 MOV R1,R10 \ 00000190 0D00A0E1 MOV R0,SP \ 00000194 CA0100EF SWI +458 4287 CopyOptionsToEditControl(&ec,&ec_options); \ 00000198 0D10A0E1 MOV R1,SP \ 0000019C 20008DE2 ADD R0,SP,#+32 \ 000001A0 CE0100EF SWI +462 4288 AddEditControlToEditQend(eq,&ec,ma); \ 000001A4 0520A0E1 MOV R2,R5 \ 000001A8 20108DE2 ADD R1,SP,#+32 \ 000001AC 0800A0E1 MOV R0,R8 \ 000001B0 660100EF SWI +358 4289 if ((lp->type&0x0F)!=3) \ 000001B4 0C0099E5 LDR R0,[R9, #+12] \ 000001B8 0F1000E2 AND R1,R0,#0xF \ 000001BC 030051E3 CMP R1,#+3 \ 000001C0 0300000A BEQ ??CreateEditChat_11 4290 { 4291 ParseAnswer(ews,lp->text); \ 000001C4 1C0197E5 LDR R0,[R7, #+284] \ 000001C8 601089E2 ADD R1,R9,#+96 \ 000001CC ........ BL ParseAnswer \ 000001D0 050000EA B ??CreateEditChat_12 4292 } 4293 else 4294 { 4295 ParseXStatusText(ews,lp->text,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_11: \ 000001D4 100010E3 TST R0,#0x10 \ 000001D8 10209D15 LDRNE R2,[SP, #+16] \ 000001DC 1C0197E5 LDR R0,[R7, #+284] \ 000001E0 14209D05 LDREQ R2,[SP, #+20] \ 000001E4 601089E2 ADD R1,R9,#+96 \ 000001E8 ........ BL ParseXStatusText 4296 } 4297 PrepareEditControl(&ec); \ ??CreateEditChat_12: \ 000001EC 20008DE2 ADD R0,SP,#+32 \ 000001F0 640100EF SWI +356 4298 ConstructEditControl(&ec, 4299 ECT_NORMAL_TEXT, 4300 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 4301 ews,ews->wsbody[0]); \ 000001F4 1C3197E5 LDR R3,[R7, #+284] \ 000001F8 000093E5 LDR R0,[R3, #+0] \ 000001FC B010D0E1 LDRH R1,[R0, #+0] \ 00000200 000051E3 CMP R1,#+0 \ 00000204 0100A0E1 MOV R0,R1 \ 00000208 01002DE9 PUSH {R0} \ 0000020C 812DA013 MOVNE R2,#+8256 \ 00000210 2020A003 MOVEQ R2,#+32 \ 00000214 0310A0E3 MOV R1,#+3 \ 00000218 24008DE2 ADD R0,SP,#+36 \ 0000021C 650100EF SWI +357 4302 PrepareEditCOptions(&ec_options); \ 00000220 04008DE2 ADD R0,SP,#+4 \ 00000224 C80100EF SWI +456 4303 //#ifdef M75 4304 if ((lp->type&0x0F)!=3) \ 00000228 0C0099E5 LDR R0,[R9, #+12] \ 0000022C 04D08DE2 ADD SP,SP,#+4 \ 00000230 0F1000E2 AND R1,R0,#0xF \ 00000234 030051E3 CMP R1,#+3 \ 00000238 0400000A BEQ ??CreateEditChat_13 4305 { 4306 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 0000023C 100010E3 TST R0,#0x10 \ 00000240 ........ LDRNE R0,??DataTable171 ;; O_ED_FONT_SIZE \ 00000244 ........ LDREQ R0,??DataTable173 ;; ED_FONT_SIZE \ 00000248 001090E5 LDR R1,[R0, #+0] \ 0000024C 080000EA B ??CreateEditChat_14 4307 } 4308 else 4309 { 4310 SetPenColorToEditCOptions(&ec_options,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_13: \ 00000250 100010E3 TST R0,#0x10 \ 00000254 10109D15 LDRNE R1,[SP, #+16] \ 00000258 0D00A0E1 MOV R0,SP \ 0000025C 14109D05 LDREQ R1,[SP, #+20] \ 00000260 CC0100EF SWI +460 4311 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_X_FONT_SIZE:ED_X_FONT_SIZE); \ 00000264 0C0099E5 LDR R0,[R9, #+12] \ 00000268 100010E3 TST R0,#0x10 \ 0000026C 18109D15 LDRNE R1,[SP, #+24] \ 00000270 1C109D05 LDREQ R1,[SP, #+28] \ ??CreateEditChat_14: \ 00000274 0D00A0E1 MOV R0,SP \ 00000278 CA0100EF SWI +458 4312 } 4313 //#else 4314 // SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 4315 //#endif 4316 CopyOptionsToEditControl(&ec,&ec_options); \ 0000027C 0D10A0E1 MOV R1,SP \ 00000280 20008DE2 ADD R0,SP,#+32 \ 00000284 CE0100EF SWI +462 4317 AddEditControlToEditQend(eq,&ec,ma); \ 00000288 0520A0E1 MOV R2,R5 \ 0000028C 20108DE2 ADD R1,SP,#+32 \ 00000290 0800A0E1 MOV R0,R8 \ 00000294 660100EF SWI +358 4318 lp=lp->next; \ 00000298 009099E5 LDR R9,[R9, #+0] 4319 } \ 0000029C 000059E3 CMP R9,#+0 \ 000002A0 69FFFF1A BNE ??CreateEditChat_2 4320 if (t->isunread) total_unread--; \ ??CreateEditChat_1: \ 000002A4 580094E5 LDR R0,[R4, #+88] 4321 t->isunread=0; \ 000002A8 0090A0E3 MOV R9,#+0 \ 000002AC 000050E3 CMP R0,#+0 \ 000002B0 8C009715 LDRNE R0,[R7, #+140] \ 000002B4 01004012 SUBNE R0,R0,#+1 \ 000002B8 8C008715 STRNE R0,[R7, #+140] \ 000002BC 589084E5 STR R9,[R4, #+88] 4322 #ifdef EVILFOX 4323 total_unread2=total_unread2-t->unread_msg; \ 000002C0 940097E5 LDR R0,[R7, #+148] \ 000002C4 641094E5 LDR R1,[R4, #+100] \ 000002C8 010040E0 SUB R0,R0,R1 \ 000002CC 940087E5 STR R0,[R7, #+148] 4324 t->unread_msg=0; \ 000002D0 649084E5 STR R9,[R4, #+100] 4325 #endif 4326 ChangeContactPos(t); \ 000002D4 0400A0E1 MOV R0,R4 \ 000002D8 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4327 wsprintf(ews, "-------"); \ 000002DC 1C0197E5 LDR R0,[R7, #+284] \ 000002E0 4C1086E2 ADD R1,R6,#+76 \ 000002E4 240100EF SWI +292 4328 PrepareEditControl(&ec); \ 000002E8 20008DE2 ADD R0,SP,#+32 \ 000002EC 640100EF SWI +356 4329 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000002F0 1C3197E5 LDR R3,[R7, #+284] \ 000002F4 4020A0E3 MOV R2,#+64 \ 000002F8 000093E5 LDR R0,[R3, #+0] \ 000002FC 0110A0E3 MOV R1,#+1 \ 00000300 B000D0E1 LDRH R0,[R0, #+0] \ 00000304 01002DE9 PUSH {R0} \ 00000308 24008DE2 ADD R0,SP,#+36 \ 0000030C 650100EF SWI +357 4330 PrepareEditCOptions(&ec_options); \ 00000310 04008DE2 ADD R0,SP,#+4 \ 00000314 C80100EF SWI +456 4331 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000318 ........ LDR R0,??DataTable173 ;; ED_FONT_SIZE \ 0000031C 00A090E5 LDR R10,[R0, #+0] \ 00000320 04008DE2 ADD R0,SP,#+4 \ 00000324 0A10A0E1 MOV R1,R10 \ 00000328 CA0100EF SWI +458 4332 CopyOptionsToEditControl(&ec,&ec_options); \ 0000032C 04108DE2 ADD R1,SP,#+4 \ 00000330 24008DE2 ADD R0,SP,#+36 \ 00000334 CE0100EF SWI +462 4333 AddEditControlToEditQend(eq,&ec,ma); \ 00000338 0520A0E1 MOV R2,R5 \ 0000033C 24108DE2 ADD R1,SP,#+36 \ 00000340 0800A0E1 MOV R0,R8 \ 00000344 660100EF SWI +358 4334 4335 if (t->answer) ParseAnswer(ews,t->answer); \ 00000348 741094E5 LDR R1,[R4, #+116] \ 0000034C 04D08DE2 ADD SP,SP,#+4 \ 00000350 000051E3 CMP R1,#+0 \ 00000354 0200000A BEQ ??CreateEditChat_15 \ 00000358 1C0197E5 LDR R0,[R7, #+284] \ 0000035C ........ BL ParseAnswer \ 00000360 020000EA B ??CreateEditChat_16 4336 else CutWSTR(ews,0); \ ??CreateEditChat_15: \ 00000364 1C0197E5 LDR R0,[R7, #+284] \ 00000368 0010A0E3 MOV R1,#+0 \ 0000036C 260100EF SWI +294 4337 PrepareEditControl(&ec); \ ??CreateEditChat_16: \ 00000370 20008DE2 ADD R0,SP,#+32 \ 00000374 640100EF SWI +356 4338 ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,1024); \ 00000378 1C019FE5 LDR R0,??CreateEditChat_0+0x4 ;; FIRST_LETTER \ 0000037C 0310A0E3 MOV R1,#+3 \ 00000380 000090E5 LDR R0,[R0, #+0] \ 00000384 000050E3 CMP R0,#+0 \ 00000388 400EA0E3 MOV R0,#+1024 \ 0000038C 01002DE9 PUSH {R0} \ 00000390 1C3197E5 LDR R3,[R7, #+284] \ 00000394 402DA013 MOVNE R2,#+4096 \ 00000398 0020A003 MOVEQ R2,#+0 \ 0000039C 24008DE2 ADD R0,SP,#+36 \ 000003A0 650100EF SWI +357 4339 4340 PrepareEditCOptions(&ec_options); \ 000003A4 04008DE2 ADD R0,SP,#+4 \ 000003A8 C80100EF SWI +456 4341 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 000003AC 0A10A0E1 MOV R1,R10 \ 000003B0 04008DE2 ADD R0,SP,#+4 \ 000003B4 CA0100EF SWI +458 4342 CopyOptionsToEditControl(&ec,&ec_options); \ 000003B8 04108DE2 ADD R1,SP,#+4 \ 000003BC 24008DE2 ADD R0,SP,#+36 \ 000003C0 CE0100EF SWI +462 4343 edchat_toitem=AddEditControlToEditQend(eq,&ec,ma); \ 000003C4 0520A0E1 MOV R2,R5 \ 000003C8 24108DE2 ADD R1,SP,#+36 \ 000003CC 0800A0E1 MOV R0,R8 \ 000003D0 660100EF SWI +358 \ 000003D4 00A0A0E1 MOV R10,R0 4344 4345 if (t->req_xtext) \ 000003D8 880094E5 LDR R0,[R4, #+136] \ 000003DC 04D08DE2 ADD SP,SP,#+4 \ 000003E0 000050E3 CMP R0,#+0 \ 000003E4 0400000A BEQ ??CreateEditChat_17 4346 { 4347 FreeXText(t); \ 000003E8 0400A0E1 MOV R0,R4 \ 000003EC ........ _BLF FreeXText,??FreeXText??rA 4348 t->req_xtext=0; \ 000003F0 889084E5 STR R9,[R4, #+136] 4349 RequestXText(t->uin); \ 000003F4 0C0094E5 LDR R0,[R4, #+12] \ 000003F8 ........ BL RequestXText 4350 } 4351 4352 EDCHAT_STRUCT *ed_struct=malloc(sizeof(EDCHAT_STRUCT)); \ ??CreateEditChat_17: \ 000003FC 1400A0E3 MOV R0,#+20 \ 00000400 140000EF SWI +20 \ 00000404 0050A0E1 MOV R5,R0 4353 ed_struct->ed_contact=t; \ 00000408 004085E5 STR R4,[R5, #+0] 4354 ed_struct->ed_answer=edchat_toitem; \ 0000040C 08A085E5 STR R10,[R5, #+8] 4355 ed_struct->requested_decrement_total_unread=0; \ 00000410 0C9085E5 STR R9,[R5, #+12] 4356 t->req_add=0; \ 00000414 689084E5 STR R9,[R4, #+104] 4357 t->last_log=NULL; \ 00000418 789084E5 STR R9,[R4, #+120] 4358 4359 // int scr_w=ScreenW(); 4360 // int scr_h=ScreenH(); 4361 // int head_h=HeaderH(); 4362 4363 patch_header(&edchat_hdr); \ 0000041C B893C6E1 STRH R9,[R6, #+56] \ 00000420 1800A0E3 MOV R0,#+24 \ 00000424 BA03C6E1 STRH R0,[R6, #+58] \ 00000428 888100EF SWI +33160 \ 0000042C 010040E2 SUB R0,R0,#+1 \ 00000430 BC03C6E1 STRH R0,[R6, #+60] \ 00000434 8A8100EF SWI +33162 \ 00000438 170080E2 ADD R0,R0,#+23 \ 0000043C BE03C6E1 STRH R0,[R6, #+62] 4364 patch_input(&edchat_desc); \ 00000440 B891C6E1 STRH R9,[R6, #+24] \ 00000444 8A8100EF SWI +33162 \ 00000448 190080E2 ADD R0,R0,#+25 \ 0000044C BA01C6E1 STRH R0,[R6, #+26] \ 00000450 888100EF SWI +33160 \ 00000454 010040E2 SUB R0,R0,#+1 \ 00000458 BC01C6E1 STRH R0,[R6, #+28] \ 0000045C 898100EF SWI +33161 \ 00000460 0040A0E1 MOV R4,R0 \ 00000464 8B8100EF SWI +33163 \ 00000468 000044E0 SUB R0,R4,R0 \ 0000046C 010040E2 SUB R0,R0,#+1 \ 00000470 BE01C6E1 STRH R0,[R6, #+30] 4365 // edchat_desc.font=ED_FONT_SIZE; 4366 edchat_id=CreateInputTextDialog(&edchat_desc,&edchat_hdr,eq,1,ed_struct); \ 00000474 20002DE9 PUSH {R5} \ 00000478 0130A0E3 MOV R3,#+1 \ 0000047C 0820A0E1 MOV R2,R8 \ 00000480 381086E2 ADD R1,R6,#+56 \ 00000484 0600A0E1 MOV R0,R6 \ 00000488 670100EF SWI +359 \ 0000048C 800187E5 STR R0,[R7, #+384] 4367 } \ 00000490 50D08DE2 ADD SP,SP,#+80 \ 00000494 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 00000498 ........ DC32 edchat_desc \ 0000049C ........ DC32 FIRST_LETTER 4368 4369 //----------------------------------------------------------------------------- 4370 #define EC_MNU_MAX 8 4371 \ In segment CODE, align 4, keep-with-next 4372 void Quote(GUI *data) 4373 { \ Quote: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 4374 int q_n; 4375 EDITCONTROL ec, ec_hdr; 4376 EDITCONTROL ec_ed; 4377 WSHDR *ed_ws; 4378 WSHDR *ws; 4379 4380 EDCHAT_STRUCT *ed_struct; 4381 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 4382 4383 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 4384 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 4385 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 4386 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 4387 4388 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 4389 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 4390 { 4391 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 4392 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote_1 4393 } 4394 else 4395 CutWSTR(ed_ws,0); \ ??Quote_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 4396 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 4397 { 4398 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 4399 } 4400 else 4401 { 4402 wstrcat(ed_ws,ec.pWS); \ ??Quote_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 4403 } 4404 int ed_pos=0; \ ??Quote_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 4405 do 4406 { 4407 ed_pos++; \ ??Quote_4: \ 000000D0 017080E2 ADD R7,R0,#+1 4408 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 4409 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 4410 } 4411 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 4412 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 4413 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 4414 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 4415 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 4416 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 4417 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 4418 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 4419 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); \ 00000170 081094E5 LDR R1,[R4, #+8] \ 00000174 040094E5 LDR R0,[R4, #+4] \ 00000178 9B0100EF SWI +411 4420 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 0000017C 040094E5 LDR R0,[R4, #+4] \ 00000180 0610A0E1 MOV R1,R6 \ 00000184 810100EF SWI +385 4421 FreeWS(ws); \ 00000188 0600A0E1 MOV R0,R6 \ 0000018C 290100EF SWI +297 4422 GeneralFuncF1(1); \ 00000190 0100A0E3 MOV R0,#+1 \ 00000194 3B0100EF SWI +315 4423 } \ 00000198 84D08DE2 ADD SP,SP,#+132 \ 0000019C F080BDE8 POP {R4-R7,PC} ;; return 4424 4425 \ In segment CODE, align 4, keep-with-next 4426 void GetShortInfo(GUI *data) 4427 { \ GetShortInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} 4428 EDCHAT_STRUCT *ed_struct; 4429 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 4430 4431 TPKT *p; 4432 CLIST *t; 4433 if ((t=ed_struct->ed_contact)&&(connect_state==3)) \ 0000000C 005094E5 LDR R5,[R4, #+0] \ 00000010 000055E3 CMP R5,#+0 \ 00000014 1E00000A BEQ ??GetShortInfo_0 \ 00000018 ........ LDR R0,??DataTable182 ;; S_ICONS + 340 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 1A00001A BNE ??GetShortInfo_0 4434 { 4435 p=malloc(sizeof(PKT)); \ 00000028 0800A0E3 MOV R0,#+8 \ 0000002C 140000EF SWI +20 \ 00000030 0060A0E1 MOV R6,R0 4436 p->pkt.uin=t->uin; \ 00000034 0C0095E5 LDR R0,[R5, #+12] 4437 p->pkt.type=T_REQINFOSHORT; 4438 p->pkt.data_len=0; 4439 AddStringToLog(t, 0x01, "Request info...", I_str,0xFFFFFFFF); \ 00000038 0010E0E3 MVN R1,#+0 \ 0000003C 000086E5 STR R0,[R6, #+0] \ 00000040 0B00A0E3 MOV R0,#+11 \ 00000044 B400C6E1 STRH R0,[R6, #+4] \ 00000048 0000A0E3 MOV R0,#+0 \ 0000004C B600C6E1 STRH R0,[R6, #+6] \ 00000050 ........ LDR R0,??DataTable181 ;; `?ed_chatgui); \ 0000006C 040094E5 LDR R0,[R4, #+4] \ 00000070 ........ BL AddMsgToChat 4441 RecountMenu(t, 1); \ 00000074 0110A0E3 MOV R1,#+1 \ 00000078 0500A0E1 MOV R0,R5 \ 0000007C ........ BL RecountMenu 4442 SUBPROC((void *)SendAnswer,0,p); \ 00000080 ........ LDR R0,??DataTable183 ;; SendAnswer \ 00000084 0620A0E1 MOV R2,R6 \ 00000088 0010A0E3 MOV R1,#+0 \ 0000008C 710100EF SWI +369 \ 00000090 04D08DE2 ADD SP,SP,#+4 4443 } 4444 GeneralFuncF1(1); \ ??GetShortInfo_0: \ 00000094 0100A0E3 MOV R0,#+1 \ 00000098 3B0100EF SWI +315 4445 } \ 0000009C 7080BDE8 POP {R4-R6,PC} ;; return 4446 4447 void AskNickAndAddContact(EDCHAT_STRUCT *); \ In segment CODE, align 4, keep-with-next 4448 void AddCurContact(GUI *data) 4449 { \ AddCurContact: \ 00000000 00402DE9 PUSH {LR} 4450 EDCHAT_STRUCT *ed_struct; 4451 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 4452 4453 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,??DataTable182 ;; S_ICONS + 340 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0000001A BNE ??AddCurContact_0 \ 00000024 ........ _BLF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA 4454 GeneralFuncF1(1); \ ??AddCurContact_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 4455 } \ 00000030 0080BDE8 POP {PC} ;; return 4456 \ In segment CODE, align 4, keep-with-next 4457 void SendAuthReq(GUI *data) 4458 { \ SendAuthReq: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 4459 EDCHAT_STRUCT *ed_struct; 4460 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 4461 4462 TPKT *p; 4463 CLIST *t; 4464 int l; 4465 const char s[]=LG_AUTHREQ; \ 0000000C B4109FE5 LDR R1,??SendAuthReq_0 ;; `?ed_contact)&&(connect_state==3)) \ 00000020 005094E5 LDR R5,[R4, #+0] \ 00000024 000055E3 CMP R5,#+0 \ 00000028 2200000A BEQ ??SendAuthReq_1 \ 0000002C ........ LDR R0,??DataTable182 ;; S_ICONS + 340 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 1E00001A BNE ??SendAuthReq_1 4467 { 4468 p=malloc(sizeof(PKT)+(l=strlen(s))+1); \ 0000003C 0D00A0E1 MOV R0,SP \ 00000040 1B0000EF SWI +27 \ 00000044 0060A0E1 MOV R6,R0 \ 00000048 090086E2 ADD R0,R6,#+9 \ 0000004C 140000EF SWI +20 \ 00000050 0070A0E1 MOV R7,R0 4469 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 4470 p->pkt.type=T_AUTHREQ; 4471 p->pkt.data_len=l; 4472 strcpy(p->data,s); \ 00000058 0D10A0E1 MOV R1,SP \ 0000005C 000087E5 STR R0,[R7, #+0] \ 00000060 0A00A0E3 MOV R0,#+10 \ 00000064 B400C7E1 STRH R0,[R7, #+4] \ 00000068 B660C7E1 STRH R6,[R7, #+6] \ 0000006C 080087E2 ADD R0,R7,#+8 \ 00000070 1A0000EF SWI +26 4473 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF); \ 00000074 ........ LDR R3,??DataTable179 ;; `?ed_chatgui); \ 00000090 040094E5 LDR R0,[R4, #+4] \ 00000094 ........ BL AddMsgToChat 4475 RecountMenu(t, 1); \ 00000098 0110A0E3 MOV R1,#+1 \ 0000009C 0500A0E1 MOV R0,R5 \ 000000A0 ........ BL RecountMenu 4476 SUBPROC((void *)SendAnswer,0,p); \ 000000A4 ........ LDR R0,??DataTable183 ;; SendAnswer \ 000000A8 0720A0E1 MOV R2,R7 \ 000000AC 0010A0E3 MOV R1,#+0 \ 000000B0 710100EF SWI +369 \ 000000B4 04D08DE2 ADD SP,SP,#+4 4477 } 4478 GeneralFuncF1(1); \ ??SendAuthReq_1: \ 000000B8 0100A0E3 MOV R0,#+1 \ 000000BC 3B0100EF SWI +315 4479 } \ 000000C0 14D08DE2 ADD SP,SP,#+20 \ 000000C4 F080BDE8 POP {R4-R7,PC} ;; return \ ??SendAuthReq_0: \ 000000C8 ........ DC32 `?ed_contact)&&(connect_state==3)) \ 00000020 006094E5 LDR R6,[R4, #+0] \ 00000024 000056E3 CMP R6,#+0 \ 00000028 2200000A BEQ ??SendAuthGrant_0 \ 0000002C ........ LDR R0,??DataTable182 ;; S_ICONS + 340 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 1E00001A BNE ??SendAuthGrant_0 4491 { 4492 p=malloc(sizeof(PKT)+(l=strlen(s))+1); \ 0000003C 0D00A0E1 MOV R0,SP \ 00000040 1B0000EF SWI +27 \ 00000044 0070A0E1 MOV R7,R0 \ 00000048 090087E2 ADD R0,R7,#+9 \ 0000004C 140000EF SWI +20 \ 00000050 0080A0E1 MOV R8,R0 4493 p->pkt.uin=t->uin; \ 00000054 0C0096E5 LDR R0,[R6, #+12] 4494 p->pkt.type=T_AUTHGRANT; 4495 p->pkt.data_len=l; 4496 strcpy(p->data,s); \ 00000058 0D10A0E1 MOV R1,SP \ 0000005C 000088E5 STR R0,[R8, #+0] \ 00000060 0E00A0E3 MOV R0,#+14 \ 00000064 B400C8E1 STRH R0,[R8, #+4] \ 00000068 B670C8E1 STRH R7,[R8, #+6] \ 0000006C 080088E2 ADD R0,R8,#+8 \ 00000070 1A0000EF SWI +26 4497 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF); \ 00000074 0000E0E3 MVN R0,#+0 \ 00000078 01002DE9 PUSH {R0} \ 0000007C 103085E2 ADD R3,R5,#+16 \ 00000080 082088E2 ADD R2,R8,#+8 \ 00000084 0110A0E3 MOV R1,#+1 \ 00000088 0600A0E1 MOV R0,R6 \ 0000008C ........ BL AddStringToLog 4498 AddMsgToChat(ed_struct->ed_chatgui); \ 00000090 040094E5 LDR R0,[R4, #+4] \ 00000094 ........ BL AddMsgToChat 4499 RecountMenu(t, 1); \ 00000098 0110A0E3 MOV R1,#+1 \ 0000009C 0600A0E1 MOV R0,R6 \ 000000A0 ........ BL RecountMenu 4500 SUBPROC((void *)SendAnswer,0,p); \ 000000A4 ........ LDR R0,??DataTable183 ;; SendAnswer \ 000000A8 0820A0E1 MOV R2,R8 \ 000000AC 0010A0E3 MOV R1,#+0 \ 000000B0 710100EF SWI +369 \ 000000B4 04D08DE2 ADD SP,SP,#+4 4501 } 4502 GeneralFuncF1(1); \ ??SendAuthGrant_0: \ 000000B8 0100A0E3 MOV R0,#+1 \ 000000BC 3B0100EF SWI +315 4503 } \ 000000C0 FF81BDE8 POP {R0-R8,PC} ;; return 4504 \ In segment CODE, align 4, keep-with-next 4505 void OpenLogfile(GUI *data) 4506 { \ OpenLogfile: \ 00000000 30402DE9 PUSH {R4,R5,LR} 4507 EDCHAT_STRUCT *ed_struct; 4508 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 4509 4510 extern const char HIST_PATH[64]; 4511 #ifdef EVILFOX_2 4512 #else 4513 extern const int HISTORY_TYPE; 4514 #endif 4515 CLIST *t; 4516 WSHDR *ws=AllocWS(256); \ 0000000C 400FA0E3 MOV R0,#+256 \ 00000010 250100EF SWI +293 \ 00000014 0050A0E1 MOV R5,R0 4517 if ((t=ed_struct->ed_contact)) \ 00000018 000094E5 LDR R0,[R4, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1500000A BEQ ??OpenLogfile_0 4518 { 4519 #ifdef EVILFOX_2 4520 wsprintf(ws,"%s\\%u\\%s.txt",HIST_PATH,UIN,t->name); 4521 #else 4522 if (HISTORY_TYPE) \ 00000024 64309FE5 LDR R3,??OpenLogfile_1 ;; HISTORY_TYPE \ 00000028 64109FE5 LDR R1,??OpenLogfile_1+0x4 ;; `?` \ 0000002C 003093E5 LDR R3,[R3, #+0] \ 00000030 60209FE5 LDR R2,??OpenLogfile_1+0x8 ;; HIST_PATH \ 00000034 000053E3 CMP R3,#+0 \ 00000038 0700000A BEQ ??OpenLogfile_2 4523 wsprintf(ws,"%s\\%u\\%u.txt",HIST_PATH,UIN, t->uin); \ 0000003C 0C0090E5 LDR R0,[R0, #+12] \ 00000040 01002DE9 PUSH {R0} \ 00000044 ........ LDR R0,??DataTable184 ;; UIN \ 00000048 003090E5 LDR R3,[R0, #+0] \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 240100EF SWI +292 \ 00000054 04D08DE2 ADD SP,SP,#+4 \ 00000058 030000EA B ??OpenLogfile_3 4524 else 4525 wsprintf(ws,"%s\\%u.txt",HIST_PATH, t->uin); \ ??OpenLogfile_2: \ 0000005C 0C3090E5 LDR R3,[R0, #+12] \ 00000060 101081E2 ADD R1,R1,#+16 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 240100EF SWI +292 4526 #endif 4527 ExecuteFile(ws,NULL,NULL); \ ??OpenLogfile_3: \ 0000006C 0020A0E3 MOV R2,#+0 \ 00000070 0010A0E3 MOV R1,#+0 \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 940000EF SWI +148 4528 } 4529 FreeWS(ws); \ ??OpenLogfile_0: \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 290100EF SWI +297 4530 GeneralFuncF1(1); \ 00000084 0100A0E3 MOV R0,#+1 \ 00000088 3B0100EF SWI +315 4531 } \ 0000008C 3080BDE8 POP {R4,R5,PC} ;; return \ ??OpenLogfile_1: \ 00000090 ........ DC32 HISTORY_TYPE \ 00000094 ........ DC32 `?` \ 00000098 ........ DC32 HIST_PATH 4532 \ In segment CODE, align 4, keep-with-next 4533 void ClearLog(GUI *data/*,void *dummy*/) 4534 { \ ClearLog: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 4535 EDITCONTROL ec; 4536 EDCHAT_STRUCT *ed_struct; 4537 WSHDR *ws; 4538 CLIST *t; 4539 4540 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 4541 4542 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 4543 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 4544 { 4545 ws=AllocWS(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 250100EF SWI +293 \ 00000038 0050A0E1 MOV R5,R0 4546 CutWSTR(ws,0); \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 260100EF SWI +294 4547 4548 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 4549 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000050 040094E5 LDR R0,[R4, #+4] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 810100EF SWI +385 4550 4551 FreeWS(ws); \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 290100EF SWI +297 4552 GeneralFuncF1(1); \ 00000064 1D0000EA B ??ClearLog_1 4553 } 4554 else 4555 { 4556 4557 if ((t=ed_struct->ed_contact)) \ ??ClearLog_0: \ 00000068 005094E5 LDR R5,[R4, #+0] \ 0000006C 000055E3 CMP R5,#+0 \ 00000070 1C00000A BEQ ??ClearLog_2 4558 { 4559 if (t->log) \ 00000074 700095E5 LDR R0,[R5, #+112] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 4560 { 4561 FreeLOGQ(&t->log); \ 00000084 700085E2 ADD R0,R5,#+112 \ 00000088 ........ BL FreeLOGQ 4562 t->msg_count=0; \ 0000008C 806085E5 STR R6,[R5, #+128] 4563 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 4564 { 4565 while(ed_struct->ed_answer!=2) 4566 { 4567 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??ClearLog_5: \ 000000AC 040094E5 LDR R0,[R4, #+4] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 D10100EF SWI +465 4568 ed_struct->ed_answer--; \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 010040E2 SUB R0,R0,#+1 \ 000000C0 080084E5 STR R0,[R4, #+8] 4569 } \ ??ClearLog_4: \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC F6FFFF1A BNE ??ClearLog_5 4570 } 4571 } 4572 t->isactive=0; //by BoBa 18.06.07 \ ??ClearLog_3: \ 000000D0 7C6085E5 STR R6,[R5, #+124] 4573 RecountMenu(t, 1); \ 000000D4 0110A0E3 MOV R1,#+1 \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ BL RecountMenu 4574 GeneralFuncF1(1); \ ??ClearLog_1: \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 3B0100EF SWI +315 4575 } 4576 } 4577 } \ ??ClearLog_2: \ 000000E8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000EC 7080BDE8 POP {R4-R6,PC} ;; return 4578 \ In segment CODE, align 4, keep-with-next 4579 void ecmenu_ghook(void *data, int cmd) 4580 { \ ecmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 4581 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 4582 { 4583 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 4584 } 4585 } \ 00000010 0080BDE8 POP {PC} ;; return 4586 \ In segment DATA_C, align 4, align-sorted 4587 static const MENUITEM_DESC ecmenu_ITEMS[EC_MNU_MAX]= \ ecmenu_ITEMS: \ 00000000 00000000.... DC32 0H, `?` \ gipc: \ 00000074 DS8 12 \ 00000080 REQUIRE `?` \ tmr_gipc: \ 00000080 DS8 12 \ 0000008C REQUIRE `?` \ total_unread: \ 0000008C DS8 4 \ 00000090 REQUIRE `?` \ cltop: \ 00000090 DS8 4 \ 00000094 REQUIRE `?` \ total_unread2: \ 00000094 DS8 4 \ 00000098 REQUIRE `?` \ total_c_online: \ 00000098 DS8 4 \ 0000009C REQUIRE `?` \ Is_SLI_On: \ 0000009C DS8 4 \ 000000A0 REQUIRE `?` \ Is_ILU_On: \ 000000A0 DS8 4 \ 000000A4 REQUIRE `?` \ seconds: \ 000000A4 DS8 4 \ 000000A8 REQUIRE `?` \ minutes: \ 000000A8 DS8 4 \ 000000AC REQUIRE `?` \ hours: \ 000000AC DS8 4 \ 000000B0 REQUIRE `?` \ align: \ 000000B0 DS8 4 \ 000000B4 REQUIRE `?` \ spaco1r: \ 000000B4 DS8 4 \ 000000B8 REQUIRE `?` \ time_draw: \ 000000B8 DS8 4 \ 000000BC REQUIRE `?` \ canvasdata: \ 000000BC DS8 4 \ 000000C0 REQUIRE `?` \ show_ping: \ 000000C0 DS8 4 \ 000000C4 REQUIRE `?` \ ping_sec: \ 000000C4 DS8 4 \ 000000C8 REQUIRE `?` \ INC_show: \ 000000C8 DS8 4 \ 000000CC REQUIRE `?` \ Is_INC_On: \ 000000CC DS8 4 \ 000000D0 REQUIRE `?` \ font: \ 000000D0 DS8 4 \ 000000D4 REQUIRE `?` \ pp_color: \ 000000D4 DS8 4 \ 000000D8 REQUIRE `?` \ main_d: \ 000000D8 DS8 4 \ 000000DC REQUIRE `?` \ paused_height: \ 000000DC DS8 4 \ 000000E0 REQUIRE `?` \ in_count: \ 000000E0 DS8 4 \ 000000E4 REQUIRE `?` \ out_count: \ 000000E4 DS8 4 \ 000000E8 REQUIRE `?` \ comanda: \ 000000E8 DS8 4 \ 000000EC REQUIRE `?` \ msg_away_timer: \ 000000EC DS8 4 \ 000000F0 REQUIRE `?` \ change_back_status: \ 000000F0 DS8 4 \ 000000F4 REQUIRE `?` \ status_rem: \ 000000F4 DS8 4 \ 000000F8 REQUIRE `?` \ away_m: \ 000000F8 DS8 4 \ 000000FC REQUIRE `?` \ total_count: \ 000000FC DS8 4 \ 00000100 REQUIRE `?` \ in_ext: \ 00000100 DS8 4 \ 00000104 REQUIRE `?` \ icon_change: \ 00000104 DS8 4 \ 00000108 REQUIRE `?` \ icon_change2: \ 00000108 DS8 4 \ 0000010C REQUIRE `?` \ maincsm_id: \ 0000010C DS8 4 \ 00000110 REQUIRE `?` \ maingui_id: \ 00000110 DS8 4 \ 00000114 REQUIRE `?` \ SENDMSGCOUNT: \ 00000114 DS8 4 \ 00000118 REQUIRE `?` \ IsActiveUp: \ 00000118 DS8 4 \ 0000011C REQUIRE `?` \ ews: \ 0000011C DS8 4 \ 00000120 REQUIRE `?` \ silenthide: \ 00000120 DS8 4 \ 00000124 REQUIRE `?` \ disautorecconect: \ 00000124 DS8 4 \ 00000128 REQUIRE `?` \ Is_Vibra_Enabled: \ 00000128 DS8 4 \ 0000012C REQUIRE `?` \ Is_Sounds_Enabled: \ 0000012C DS8 4 \ 00000130 REQUIRE `?` \ Is_Show_Offline: \ 00000130 DS8 4 \ 00000134 REQUIRE `?` \ Is_Show_Groups: \ 00000134 DS8 4 \ 00000138 REQUIRE `?` \ CurrentStatus: \ 00000138 DS8 4 \ 0000013C REQUIRE `?` \ CurrentXStatus: \ 0000013C DS8 4 \ 00000140 REQUIRE `?` \ CurrentPrivateStatus: \ 00000140 DS8 4 \ 00000144 REQUIRE `?` \ vibra_count: \ 00000144 DS8 4 \ 00000148 REQUIRE `?` \ templates_chars: \ 00000148 DS8 4 \ 0000014C REQUIRE `?` \ templates_lines: \ 0000014C DS8 4 \ 00000150 REQUIRE `?` \ RXstate: \ 00000150 DS8 4 \ 00000154 REQUIRE `?` \ connect_state: \ 00000154 DS8 4 \ 00000158 REQUIRE `?` \ sock: \ 00000158 DS8 4 \ 0000015C REQUIRE `?` \ TOTALRECEIVED: \ 0000015C DS8 4 \ 00000160 REQUIRE `?` \ TOTALSENDED: \ 00000160 DS8 4 \ 00000164 REQUIRE `?` \ ALLTOTALRECEIVED: \ 00000164 DS8 4 \ 00000168 REQUIRE `?` \ ALLTOTALSENDED: \ 00000168 DS8 4 \ 0000016C REQUIRE `?` \ sendq_l: \ 0000016C DS8 4 \ 00000170 REQUIRE `?` \ sendq_p: \ 00000170 DS8 4 \ 00000174 REQUIRE `?` \ is_gprs_online: \ 00000174 DS8 4 \ 00000178 REQUIRE `?` \ GROUP_CACHE: \ 00000178 DS8 4 \ 0000017C REQUIRE `?` \ contactlist_menu_id: \ 0000017C DS8 4 \ 00000180 REQUIRE `?` \ edchat_id: \ 00000180 DS8 4 \ 00000184 REQUIRE `?` \ 00000184 DS8 4 \ 00000188 REQUIRE `?` \ tenseconds_to_ping: \ 00000188 DS8 4 \ 0000018C REQUIRE `?` \ DNR_ID: \ 0000018C DS8 4 \ 00000190 REQUIRE `?` \ DNR_TRIES: \ 00000190 DS8 4 \ 00000194 REQUIRE `?` \ host_counter: \ 00000194 DS8 4 \ 00000198 REQUIRE `?` \ time_to_stop_t9: \ 00000198 DS8 4 \ 0000019C REQUIRE `?` \ old_ed_redraw: \ 0000019C DS8 4 \ 000001A0 REQUIRE `?` \ 000001A0 DS8 64 \ 000001E0 REQUIRE `?` \ elf_path: \ 000001E0 DS8 256 \ 000002E0 REQUIRE `?` \ ContactT9Key: \ 000002E0 DS8 32 \ 00000300 REQUIRE `?` \ upcoming: \ 00000300 DS8 64 \ 00000340 REQUIRE `?` \ mytmr: \ 00000340 DS8 16 \ 00000350 REQUIRE `?` \ ctmr: \ 00000350 DS8 16 \ 00000360 REQUIRE `?` \ online_txt: \ 00000360 DS8 20 \ 00000374 REQUIRE `?` \ ping_txt: \ 00000374 DS8 16 \ 00000384 REQUIRE `?` \ unread_txt: \ 00000384 DS8 16 \ 00000394 REQUIRE `?` \ show_nick: \ 00000394 DS8 64 \ 000003D4 REQUIRE `?` \ incs: \ 000003D4 DS8 16 \ 000003E4 REQUIRE `?` \ last_msg_buffer: \ 000003E4 DS8 3072 \ 00000FE4 REQUIRE `?` \ away_msg_time: \ 00000FE4 DS8 64 \ 00001024 REQUIRE `?` \ away_msg: \ 00001024 DS8 256 \ 00001124 REQUIRE `?` \ tim_zone: \ 00001124 DS8 24 \ 0000113C REQUIRE `?` \ ext_sound: \ 0000113C DS8 128 \ 000011BC REQUIRE `?` \ LG_MENU2: \ 000011BC DS8 32 \ 000011DC REQUIRE `?` \ mod_info: \ 000011DC DS8 72 \ 00001224 REQUIRE `?` \ a_txt: \ 00001224 DS8 64 \ 00001264 REQUIRE `?` \ s_txt: \ 00001264 DS8 64 \ 000012A4 REQUIRE `?` \ d_txt: \ 000012A4 DS8 64 \ 000012E4 REQUIRE `?` \ f_txt: \ 000012E4 DS8 64 \ 00001324 REQUIRE `?` \ g_txt: \ 00001324 DS8 64 \ 00001364 REQUIRE `?` \ hostname: \ 00001364 DS8 128 \ 000013E4 REQUIRE `?` \ logmsg: \ 000013E4 DS8 256 \ 000014E4 REQUIRE `?` \ tmr_illumination: \ 000014E4 DS8 16 \ 000014F4 REQUIRE `?` \ tmr_vibra: \ 000014F4 DS8 16 \ 00001504 REQUIRE `?` \ reconnect_tmr: \ 00001504 DS8 16 \ 00001514 REQUIRE `?` \ tmr_active: \ 00001514 DS8 16 \ 00001524 REQUIRE `?` \ clm_hdr_text: \ 00001524 DS8 48 \ 00001554 REQUIRE `?` \ clmenu_sk_r: \ 00001554 DS8 16 \ 00001564 REQUIRE `?` 4601 { 4602 Quote, 4603 AddSmile, 4604 GetShortInfo, 4605 AddCurContact, 4606 SendAuthReq, 4607 SendAuthGrant, 4608 OpenLogfile, 4609 ClearLog, 4610 }; 4611 4612 char ecm_contactname[64]; \ ecm_contactname: \ 00001564 DS8 64 \ 000015A4 REQUIRE `?` 4613 \ In segment DATA_C, align 4, align-sorted 4614 static const HEADER_DESC ecmenu_HDR={0,0,NULL,NULL,NULL,(int)ecm_contactname,LGP_NULL}; \ ecmenu_HDR: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 00000000.... DC32 0H, ecm_contactname, 2147483647 \ ....FFFFFF7F \ 00000014 080000000000 DC32 8, 0H, ecmenu_ghook, 0H, menusoftkeys, menu_skt, 0, 0H \ 0000........ \ 00000000.... \ ............ \ 000000000000 \ 0000 \ 00000034 ............ DC32 ecmenu_ITEMS, ecmenu_HNDLS, 8 \ ....08000000 4615 4616 static const MENU_DESC ecmenu_STRUCT= 4617 { 4618 8,NULL,ecmenu_ghook,NULL, 4619 menusoftkeys, 4620 &menu_skt, 4621 0, 4622 NULL, 4623 ecmenu_ITEMS, 4624 ecmenu_HNDLS, 4625 EC_MNU_MAX 4626 }; 4627 \ In segment CODE, align 4, keep-with-next 4628 void ec_menu(EDCHAT_STRUCT *ed_struct) 4629 { \ ec_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 24D04DE2 SUB SP,SP,#+36 \ 00000008 0040A0E1 MOV R4,R0 4630 CLIST *t; 4631 int to_remove[EC_MNU_MAX+1]; 4632 int remove=0; 4633 if ((t=ed_struct->ed_contact)) \ 0000000C 001094E5 LDR R1,[R4, #+0] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 4500000A BEQ ??ec_menu_0 4634 { 4635 if (t->name) \ 00000018 ........ LDR R5,??DataTable185 ;; S_ICONS \ 0000001C 6400A0E3 MOV R0,#+100 \ 00000020 540D80E3 ORR R0,R0,#0x1500 \ 00000024 050080E0 ADD R0,R0,R5 \ 00000028 142091E2 ADDS R2,R1,#+20 \ 0000002C 0300000A BEQ ??ec_menu_1 4636 { 4637 strncpy(ecm_contactname,t->name,63); \ 00000030 3F20A0E3 MOV R2,#+63 \ 00000034 141081E2 ADD R1,R1,#+20 \ 00000038 160100EF SWI +278 \ 0000003C 020000EA B ??ec_menu_2 4638 } 4639 else 4640 { 4641 sprintf(ecm_contactname,"%u",t->uin); \ ??ec_menu_1: \ 00000040 0C2091E5 LDR R2,[R1, #+12] \ 00000044 3B1F8FE2 ADR R1,??ec_menu_3 ;; "%u" \ 00000048 160000EF SWI +22 4642 } 4643 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ec_menu_2: \ 0000004C 040094E5 LDR R0,[R4, #+4] \ 00000050 0160A0E3 MOV R6,#+1 \ 00000054 820100EF SWI +386 \ 00000058 082094E5 LDR R2,[R4, #+8] \ 0000005C 0010A0E3 MOV R1,#+0 \ 00000060 020050E1 CMP R0,R2 4644 { 4645 to_remove[++remove]=0; \ 00000064 04108D05 STREQ R1,[SP, #+4] 4646 } 4647 else 4648 { 4649 to_remove[++remove]=1; \ 00000068 0120A013 MOVNE R2,#+1 \ 0000006C 04208D15 STRNE R2,[SP, #+4] 4650 } 4651 4652 if (ed_struct->ed_answer<=2) to_remove[++remove]=7; \ 00000070 080094E5 LDR R0,[R4, #+8] \ 00000074 030050E3 CMP R0,#+3 \ 00000078 0720A0B3 MOVLT R2,#+7 \ 0000007C 08208DB5 STRLT R2,[SP, #+8] 4653 if (!ed_struct->ed_contact || connect_state!=3) \ 00000080 000094E5 LDR R0,[R4, #+0] \ 00000084 0260A0B3 MOVLT R6,#+2 \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 0200000A BEQ ??ec_menu_4 \ 00000090 540195E5 LDR R0,[R5, #+340] \ 00000094 030050E3 CMP R0,#+3 \ 00000098 0D00000A BEQ ??ec_menu_5 4654 { 4655 to_remove[++remove]=2; \ ??ec_menu_4: \ 0000009C 010086E2 ADD R0,R6,#+1 \ 000000A0 0D20A0E1 MOV R2,SP \ 000000A4 0230A0E3 MOV R3,#+2 \ 000000A8 003182E7 STR R3,[R2, +R0, LSL #+2] 4656 to_remove[++remove]=3; \ 000000AC 010080E2 ADD R0,R0,#+1 \ 000000B0 0330A0E3 MOV R3,#+3 \ 000000B4 003182E7 STR R3,[R2, +R0, LSL #+2] 4657 to_remove[++remove]=4; \ 000000B8 010080E2 ADD R0,R0,#+1 \ 000000BC 0430A0E3 MOV R3,#+4 \ 000000C0 003182E7 STR R3,[R2, +R0, LSL #+2] 4658 to_remove[++remove]=5; \ 000000C4 016080E2 ADD R6,R0,#+1 \ 000000C8 0D00A0E1 MOV R0,SP \ 000000CC 0520A0E3 MOV R2,#+5 \ 000000D0 062180E7 STR R2,[R0, +R6, LSL #+2] 4659 } 4660 4661 patch_header(&ecmenu_HDR); \ ??ec_menu_5: \ 000000D4 60509FE5 LDR R5,??ec_menu_3+0x4 ;; ecmenu_HDR \ 000000D8 1800A0E3 MOV R0,#+24 \ 000000DC B010C5E1 STRH R1,[R5, #+0] \ 000000E0 B200C5E1 STRH R0,[R5, #+2] \ 000000E4 888100EF SWI +33160 \ 000000E8 010040E2 SUB R0,R0,#+1 \ 000000EC B400C5E1 STRH R0,[R5, #+4] \ 000000F0 8A8100EF SWI +33162 \ 000000F4 170080E2 ADD R0,R0,#+23 \ 000000F8 B600C5E1 STRH R0,[R5, #+6] 4662 to_remove[0]=remove; \ 000000FC 00608DE5 STR R6,[SP, #+0] 4663 CreateMenu(0,0,&ecmenu_STRUCT,&ecmenu_HDR,0,EC_MNU_MAX,ed_struct,to_remove); \ 00000100 0D00A0E1 MOV R0,SP \ 00000104 01002DE9 PUSH {R0} \ 00000108 10002DE9 PUSH {R4} \ 0000010C 0530A0E1 MOV R3,R5 \ 00000110 0800A0E3 MOV R0,#+8 \ 00000114 01002DE9 PUSH {R0} \ 00000118 142085E2 ADD R2,R5,#+20 \ 0000011C 0010A0E3 MOV R1,#+0 \ 00000120 0000A0E3 MOV R0,#+0 \ 00000124 01002DE9 PUSH {R0} \ 00000128 520100EF SWI +338 \ 0000012C 10D08DE2 ADD SP,SP,#+16 4664 } 4665 } \ ??ec_menu_0: \ 00000130 24D08DE2 ADD SP,SP,#+36 ;; stack cleaning \ 00000134 7080BDE8 POP {R4-R6,PC} ;; return \ ??ec_menu_3: \ 00000138 25750000 DC8 "%u",+0 \ 0000013C ........ DC32 ecmenu_HDR 4666 4667 \ In segment CODE, align 4, keep-with-next 4668 void AskNickAndAddContact(EDCHAT_STRUCT *ed_struct) 4669 { 4670 CreateAddContactGrpDialog(ed_struct->ed_contact); \ AskNickAndAddContact: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 ........ _BF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA ;; tailcall 4671 } 4672 \ In segment CODE, align 4, keep-with-next 4673 void AddSmile(GUI *data) 4674 { \ AddSmile: \ 00000000 00402DE9 PUSH {LR} 4675 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 4676 CreateSmileSelectGUI(ed_struct); \ 00000008 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 4677 GeneralFuncF1(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0100EF SWI +315 4678 } \ 00000014 0080BDE8 POP {PC} ;; return \ In segment CODE, align 4, keep-with-next \ ??DataTable4: \ 00000000 ........ DC32 SLI_On \ In segment CODE, align 4, keep-with-next \ ??DataTable11: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable13: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable14: \ 00000000 ........ DC32 sndMsg2 \ In segment CODE, align 4, keep-with-next \ ??DataTable16: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable20: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable21: \ 00000000 ........ DC32 def_setting \ In segment CODE, align 4, keep-with-next \ ??DataTable26: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable29: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable35: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable37: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable38: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable40: \ 00000000 ........ DC32 S_ICONS + 144 \ In segment CODE, align 4, keep-with-next \ ??DataTable41: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable42: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable43: \ 00000000 ........ DC32 total_xstatuses \ In segment CODE, align 4, keep-with-next \ ??DataTable45: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable51: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable54: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable55: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable57: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable59: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable60: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable61: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable69: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable70: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable72: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable73: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable74: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable75: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable76: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable77: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable78: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable79: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable82: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable86: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable90: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable91: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable92: \ 00000000 ........ DC32 sndMsg2 \ In segment CODE, align 4, keep-with-next \ ??DataTable93: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable94: \ 00000000 ........ DC32 Is_DRAWMAIN_On \ In segment CODE, align 4, keep-with-next \ ??DataTable95: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable97: \ 00000000 ........ DC32 Show_Ping \ In segment CODE, align 4, keep-with-next \ ??DataTable98: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable99: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable102: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable103: \ 00000000 ........ DC32 total_xstatuses \ In segment CODE, align 4, keep-with-next \ ??DataTable107: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable109: \ 00000000 ........ DC32 process_active_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable119: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable120: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable122: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable124: \ 00000000 ........ DC32 Show_Ping \ In segment CODE, align 4, keep-with-next \ ??DataTable125: \ 00000000 ........ DC32 Is_DRAWMAIN_On \ In segment CODE, align 4, keep-with-next \ ??DataTable131: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable132: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable133: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable136: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable137: \ 00000000 ........ DC32 ClearSendQ \ In segment CODE, align 4, keep-with-next \ ??DataTable140: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable141: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable142: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable143: \ 00000000 ........ DC32 successed_config_filename \ In segment CODE, align 4, keep-with-next \ ??DataTable144: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable145: \ 00000000 ........ DC32 fontpath \ In segment CODE, align 4, keep-with-next \ ??DataTable146: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable147: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable148: \ 00000000 ........ DC32 system_color \ In segment CODE, align 4, keep-with-next \ ??DataTable149: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable151: \ 00000000 ........ DC32 S_ICONS + 144 \ In segment CODE, align 4, keep-with-next \ ??DataTable155: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable157: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable158: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable159: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable160: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable161: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable162: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable163: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable164: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable165: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable166: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable167: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable168: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable169: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable170: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable171: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable173: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable179: \ 00000000 ........ DC32 `?`: \ 00000000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000010 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000020 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000030 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000040 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000050 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000060 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000000000 \ 0000 \ `?`: \ 00000074 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000080 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 0000008C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000090 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000094 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000098 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000009C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000AC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000B0 00000000 DC32 0 \ `?`: \ 000000B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D0 09000000 DC32 9 \ `?`: \ 000000D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000DC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000100 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000104 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000108 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000010C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000110 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000114 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000118 00000000 DC32 0 \ `?`: \ 0000011C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000120 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000124 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000128 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000012C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000130 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000134 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000138 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000013C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000140 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000144 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000148 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000014C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000150 F6FFFFFF DC32 -10 \ `?`: \ 00000154 00000000 DC32 0 \ `?`: \ 00000158 FFFFFFFF DC32 -1 \ `?`: \ 0000015C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000160 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000164 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000168 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000016C 00000000 DC32 0 \ `?`: \ 00000170 00000000 DC32 0H \ `?`: \ 00000174 01000000 DC32 1 \ `?`: \ 00000178 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000017C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000180 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000184 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000188 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000018C 00000000 DC32 0 \ `?`: \ 00000190 03000000 DC32 3 \ `?`: \ 00000194 00000000 DC32 0 \ `?`: \ 00000198 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000019C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000001E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000200 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000210 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000220 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000230 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000240 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000250 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000260 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000270 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000280 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000290 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000002E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000300 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000310 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000320 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000330 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000340 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000350 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000360 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000000000 \ 0000 \ `?`: \ 00000374 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000384 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000394 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000003D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000003E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000404 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000414 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000424 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000434 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000444 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000454 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000464 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000474 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000484 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000494 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000504 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000514 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000524 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000534 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 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 \ 0000 \ `?`: \ 0000113C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000114C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000115C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000116C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000117C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000118C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000119C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000011BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000011DC 326E64206765 DC8 32H, 6EH, 64H, 20H, 67H, 65H, 6EH, 65H \ 6E65 \ 000011E4 726174696F6E DC8 72H, 61H, 74H, 69H, 6FH, 6EH, 20H, 6DH \ 206D \ 000011EC 6F6420626173 DC8 6FH, 64H, 20H, 62H, 61H, 73H, 65H, 64H \ 6564 \ 000011F4 206F6E207265 DC8 20H, 6FH, 6EH, 20H, 72H, 65H, 76H, 69H \ 7669 \ 000011FC 73696F6E2031 DC8 73H, 69H, 6FH, 6EH, 20H, 31H, 38H, 34H \ 3834 \ 00001204 3821206D6F64 DC8 38H, 21H, 20H, 6DH, 6FH, 64H, 20H, 64H \ 2064 \ 0000120C 6174653A2031 DC8 61H, 74H, 65H, 3AH, 20H, 31H, 39H, 2EH \ 392E \ 00001214 30322E303820 DC8 30H, 32H, 2EH, 30H, 38H, 20H, 31H, 34H \ 3134 \ 0000121C 3A30322100 DC8 3AH, 30H, 32H, 21H, 0 \ 00001221 000000 DC8 0, 0, 0 \ `?`: \ 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 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6D6573736167 DC8 "message.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 756E6B6E6F77 DC8 "unknown.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupon.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupoff.png" \ 66662E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E756C6C2E70 DC8 "null.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616464636F6E DC8 "addcont.png" \ 742E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 686561642E70 DC8 "head.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6C6F676F2E70 DC8 "logo.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E672E70 DC8 "ping.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73657474696E DC8 "settings.png" \ 67732E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973312E70 DC8 "vis1.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973322E70 DC8 "vis2.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973332E70 DC8 "vis3.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973342E70 DC8 "vis4.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973352E70 DC8 "vis5.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2FBE1EEF000 DC8 "\302\373\341\356\360" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E0EAF0FBF2 DC8 "\307\340\352\360\373\362\374" \ FC00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CEEFF6E8E800 DC8 "\316\357\366\350\350" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 2573257300 DC8 "%s%s" \ 00000005 000000 DC8 0, 0, 0 \ 00000008 25733A202573 DC8 "%s: %s" \ 00 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ 00000000 2E2E2E00 DC8 "..." \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 286177617920 DC8 "(away since %02d : %02d ( %s ) )" \ 73696E636520 \ 25303264203A \ 202530326420 \ 282025732029 \ 202900 \ 00000021 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 474D54202D31 DC8 "GMT -12:00" \ 323A303000 \ 0000000B 00 DC8 0 \ 0000000C 474D54202D31 DC8 "GMT -11:00" \ 313A303000 \ 00000017 00 DC8 0 \ 00000018 474D54202D31 DC8 "GMT -10:00" \ 303A303000 \ 00000023 00 DC8 0 \ 00000024 474D54202D30 DC8 "GMT -08:00" \ 383A303000 \ 0000002F 00 DC8 0 \ 00000030 474D54202D30 DC8 "GMT -07:00" \ 373A303000 \ 0000003B 00 DC8 0 \ 0000003C 474D54202D30 DC8 "GMT -06:00" \ 363A303000 \ 00000047 00 DC8 0 \ 00000048 474D54202D30 DC8 "GMT -05:00" \ 353A303000 \ 00000053 00 DC8 0 \ 00000054 474D54202D30 DC8 "GMT -04:00" \ 343A303000 \ 0000005F 00 DC8 0 \ 00000060 474D54202D30 DC8 "GMT -09:00" \ 393A303000 \ 0000006B 00 DC8 0 \ 0000006C 474D54202D30 DC8 "GMT -03:30" \ 333A333000 \ 00000077 00 DC8 0 \ 00000078 474D54202D30 DC8 "GMT -03:00" \ 333A303000 \ 00000083 00 DC8 0 \ 00000084 474D54202D30 DC8 "GMT -02:00" \ 323A303000 \ 0000008F 00 DC8 0 \ 00000090 474D54202D30 DC8 "GMT -01:00" \ 313A303000 \ 0000009B 00 DC8 0 \ 0000009C 474D54203030 DC8 "GMT 00:00" \ 3A303000 \ 000000A6 0000 DC8 0, 0 \ 000000A8 474D54202B30 DC8 "GMT +01:00" \ 313A303000 \ 000000B3 00 DC8 0 \ 000000B4 474D54202B30 DC8 "GMT +02:00" \ 323A303000 \ 000000BF 00 DC8 0 \ 000000C0 474D54202B30 DC8 "GMT +03:00" \ 333A303000 \ 000000CB 00 DC8 0 \ 000000CC 474D54202B30 DC8 "GMT +03:30" \ 333A333000 \ 000000D7 00 DC8 0 \ 000000D8 474D54202B30 DC8 "GMT +04:00" \ 343A303000 \ 000000E3 00 DC8 0 \ 000000E4 474D54202B30 DC8 "GMT +04:30" \ 343A333000 \ 000000EF 00 DC8 0 \ 000000F0 474D54202B30 DC8 "GMT +05:00" \ 353A303000 \ 000000FB 00 DC8 0 \ 000000FC 474D54202B30 DC8 "GMT +05:30" \ 353A333000 \ 00000107 00 DC8 0 \ 00000108 474D54202B30 DC8 "GMT +05:45" \ 353A343500 \ 00000113 00 DC8 0 \ 00000114 474D54202B30 DC8 "GMT +06:00" \ 363A303000 \ 0000011F 00 DC8 0 \ 00000120 474D54202B30 DC8 "GMT +06:30" \ 363A333000 \ 0000012B 00 DC8 0 \ 0000012C 474D54202B30 DC8 "GMT +07:00" \ 373A303000 \ 00000137 00 DC8 0 \ 00000138 474D54202B30 DC8 "GMT +08:00" \ 383A303000 \ 00000143 00 DC8 0 \ 00000144 474D54202B30 DC8 "GMT +09:00" \ 393A303000 \ 0000014F 00 DC8 0 \ 00000150 474D54202B30 DC8 "GMT +09:30" \ 393A333000 \ 0000015B 00 DC8 0 \ 0000015C 474D54202B31 DC8 "GMT +10:00" \ 303A303000 \ 00000167 00 DC8 0 \ 00000168 474D54202B31 DC8 "GMT +11:00" \ 313A303000 \ 00000173 00 DC8 0 \ 00000174 474D54202B31 DC8 "GMT +12:00" \ 323A303000 \ 0000017F 00 DC8 0 \ 00000180 474D54202B31 DC8 "GMT +13:00" \ 333A303000 \ 0000018B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C25642E7478 DC8 "\\%d.txt" \ 7400 \ 00000008 5C302E747874 DC8 "\\0.txt" \ 00 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 57616974696E DC8 "Waiting for GPRS up..." \ 6720666F7220 \ 475052532075 \ 702E2E2E00 \ 00000017 00 DC8 0 \ 00000018 0A436F6E6E65 DC8 "\012Connect by IP!" \ 637420627920 \ 49502100 \ 00000028 53656E642044 DC8 "Send DNR..." \ 4E522E2E2E00 \ 00000034 444E52204552 DC8 "DNR ERROR %d!" \ 524F52202564 \ 2100 \ 00000042 0000 DC8 0, 0 \ 00000044 444E52204F6B DC8 "DNR Ok, connecting..." \ 2C20636F6E6E \ 656374696E67 \ 2E2E2E00 \ 0000005A 0000 DC8 0, 0 \ 0000005C CDE5E2EEE7EC DC8 "\315\345\342\356\347\354\356\346\355\356 \357\356\344\352\353\376\367\350\362\374\361\377!" \ EEE6EDEE20EF \ EEE4EAEBFEF7 \ E8F2FCF1FF21 \ 00 \ 00000075 000000 DC8 0, 0, 0 \ 00000078 CDE5E2EEE7EC DC8 "\315\345\342\356\347\354\356\346\355\356 \361\356\347\344\340\362\374 \361\356\352\345\362, \357\345\360\345\347\340\357\363\361\352 GPRS!" \ EEE6EDEE20F1 \ EEE7E4E0F2FC \ 20F1EEEAE5F2 \ 2C20EFE5F0E5 \ E7E0EFF3F1EA \ 204750525321 \ 00 \ 000000A3 00 DC8 0 \ 000000A4 D1E5F0E2E5F0 DC8 "\321\345\360\342\345\360 \355\345 \355\340\351\344\345\355!" \ 20EDE520EDE0 \ E9E4E5ED2100 \ 000000B6 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73656E642072 DC8 "send res %d" \ 657320256400 \ 0000000C 53656E642064 DC8 "Send delayed..." \ 656C61796564 \ 2E2E2E00 \ 0000001C 53656E642065 DC8 "Send error!" \ 72726F722100 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5369655F2530 DC8 "Sie_%04d" \ 346400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 426164207061 DC8 "Bad packet" \ 636B657400 \ 0000000B 00 DC8 0 \ 0000000C 534325643A20 DC8 "SC%d: %04X" \ 2530345800 \ 00000017 00 DC8 0 \ 00000018 4552523A2025 DC8 "ERR: %s" \ 7300 \ 00000020 4D534725643A DC8 "MSG%d: %s" \ 20257300 \ 0000002A 0000 DC8 0, 0 \ 0000002C 50696E672025 DC8 "Ping %d-%d seconds!" \ 642D25642073 \ 65636F6E6473 \ 2100 \ 00000040 50696E673A20 DC8 "Ping: %dsec" \ 256473656300 \ In segment DATA_C, align 1, align-sorted \ 00000000 257300 DC8 "%s" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 253032643A25 DC8 "%02d:%02d %02d-%02d %s:\015\012" \ 303264202530 \ 32642D253032 \ 642025733A0D \ 0A00 \ 0000001A 0000 DC8 0, 0 \ 0000001C 253032643A25 DC8 "%02d:%02d %02d-%02d %s:" \ 303264202530 \ 32642D253032 \ 642025733A00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6E6C696E65 DC8 "online: %02d:%02d:%02d \012Server: %s" \ 3A2025303264 \ 3A253032643A \ 25303264200A \ 536572766572 \ 3A20257300 \ 00000023 00 DC8 0 \ 00000024 4745545F4F4E DC8 "GET_ONLINE_TIME" \ 4C494E455F54 \ 494D4500 \ 00000034 73656E743A20 DC8 "sent: %d \012recieved: %d" \ 2564200A7265 \ 636965766564 \ 3A20256400 \ 0000004B 00 DC8 0 \ 0000004C 4745545F4D53 DC8 "GET_MSG_INFO" \ 475F494E464F \ 00 \ 00000059 000000 DC8 0, 0, 0 \ 0000005C 4745545F4D4F DC8 "GET_MOD_INFO" \ 445F494E464F \ 00 \ 00000069 000000 DC8 0, 0, 0 \ 0000006C 626174746572 DC8 "battery: %d percents" \ 793A20256420 \ 70657263656E \ 747300 \ 00000081 000000 DC8 0, 0, 0 \ 00000084 4745545F4241 DC8 "GET_BAT_INFO" \ 545F494E464F \ 00 \ 00000091 000000 DC8 0, 0, 0 \ 00000094 4175746F4D73 DC8 "AutoMsg: %s %s! im not here! %s %s" \ 673A20257320 \ 25732120696D \ 206E6F742068 \ 657265212025 \ 7320257300 \ 000000B7 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?_1`: \ 00000000 B0B5041C0025 DC8 176, 181, 4, 28, 0, 37, 5, 97 \ 0561 \ In segment DATA_C, align 1, align-sorted \ 00000000 3A0A00 DC8 ":\012" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 686F6D652E70 DC8 "home.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ 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 6C756E63682E DC8 "lunch.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 776F726B2E70 DC8 "work.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6E6C696E65 DC8 "online.png" \ 2E706E6700 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6666632E706E DC8 "ffc.png" \ 6700 Maximum stack usage in bytes: Function CSTACK -------- ------ AddContactT9Key 12 AddCurContact 4 AddLOGQ 0 AddMsgToChat 108 AddSmile 4 AddStringToLog 188 AddToMain 152 AskNickAndAddContact 4 BackSpaceContactT9 8 ChangeSound 4 ChangeVibra 4 CheckComand 44 CheckDoubleRun 8 ClearContactT9Key 4 ClearLog 60 ClearSendQ 8 CreateEditChat 116 DrawAck 80 ElfKiller 4 ExtractAnswer 36 FindContactLOGQByAck 12 FindNextActiveContact 0 FindPrevActiveContact 0 FreeLOGQ 8 FreeTemplates 8 GetHost 0 GetHostsCount 0 GetIconIndex 0 GetLastXTextLOGQ 0 GetOnTotalContact 8 GetPort 16 GetShortInfo 20 IlluminationOff 8 IlluminationOn 24 Init_Ext_Sounds 96 LastLOGQ 0 LoadTemplates 332 NewLOGQ 12 OpenLogfile 16 ParseAnswer 36 ParseXStatusText 20 Play 236 ProcessPacket 308 Quote 152 ReadDefSettings 152 RecountMenu 20 RemoveLOGQ 4 ReqAddMsgToChat 16 RequestXText 8 SLI_Off 4 SLI_On 8 SLI_Timer 4 SMART_REDRAW 8 SaveAnswer 12 SendAnswer 28 SendAuthGrant 44 SendAuthReq 44 SendMSGACK 8 UpdateCLheader 40 UpdateCSMname 4 WriteDefSettings 152 ask_my_info 0 atoi 0 away_engage 24 contactlist_menu_ghook 8 contactlist_menu_iconhndl 668 contactlist_menu_onkey 44 create_connect 184 create_contactlist_menu 24 do_ping 4 do_reconnect 4 ec_menu 68 ecmenu_ghook 4 ed_options_handler 64 edchat_ghook 72 edchat_locret 0 edchat_onkey 84 end_socket 8 free_ICONS 16 get_answer 1088 init_time_zone 4 main 64 maincsm_onclose 8 maincsm_oncreate 24 maincsm_onmessage 104 method0 76 method1 8 method2 8 method3 8 method4 0 method5 24 method8 0 method9 0 my_ed_redraw 12 my_keyhook 16 process_active_timer 16 send_login 36 set_my_status 4 set_my_xstatus 36 setup_ICONS 16 show_pp_sender 56 start_vibra 8 stop_vibra 4 time_count 0 time_counter 16 to_develop 4 Segment part sizes: Function/Label Bytes -------------- ----- In_EXT_On 4 SLI_On 60 SLI_Off 60 SLI_Timer 44 time_count 64 time_counter 96 show_pp_sender 268 AddToMain 332 away_engage 120 my_keyhook 120 init_time_zone 356 Init_Ext_Sounds 252 SMART_REDRAW 48 setup_ICONS 76 free_ICONS 40 IlluminationOff 60 IlluminationOn 120 ReadDefSettings 280 WriteDefSettings 268 Play 304 start_vibra 104 stop_vibra 88 ChangeVibra 56 ChangeSound 56 FreeTemplates 56 LoadTemplates 400 RXbuf 16392 TXbuf 16392 ElfKiller 28 NewLOGQ 52 LastLOGQ 36 FreeLOGQ 48 RemoveLOGQ 52 AddLOGQ 44 GetLastXTextLOGQ 72 GetIconIndex 228 FindContactLOGQByAck 88 UpdateCLheader 284 ClearContactT9Key 24 AddContactT9Key 36 BackSpaceContactT9 36 create_contactlist_menu 108 contactlist_menu_ghook 68 RecountMenu 160 contactlist_menu_onkey 1028 GetOnTotalContact 92 contactlist_menu_iconhndl 548 GetHost 196 atoi 68 GetPort 284 GetHostsCount 120 create_connect 652 ClearSendQ 32 end_socket 40 SendAnswer 388 send_login 148 do_ping 52 SendMSGACK 52 RequestXText 52 get_answer 1128 AddStringToLog 548 ParseXStatusText 152 AddMsgToChat 832 DrawAck 340 ask_my_info 4 set_my_status 72 set_my_xstatus 264 to_develop 80 ReqAddMsgToChat 120 CheckComand 700 ProcessPacket 2252 process_active_timer 300 method0 684 method1 44 method2 36 method3 24 method4 20 method5 204 method8 8 method9 8 maincsm_oncreate 272 maincsm_onclose 192 do_reconnect 40 CheckDoubleRun 104 maincsm_onmessage 2748 maincsm_name_body 280 ? 808 S_OFFLINE 8 S_INVISIBLE 12 S_AWAY 8 S_NA 4 S_OCCUPIED 12 S_DND 4 S_ONLINE 8 S_FFC 4 icons_names 112 ? 5540 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 8 ? 8 ? 8 ? 16 ? 4 ? 36 ? 396 ? 16 ? 184 ? 40 ? 12 ? 76 ? 3 ? 52 ? 184 ?_1 8 ? 3 ? 12 ? 28 ? 3 ? 12 ? 16 ? 12 ? 8 ? 16 ? 8 ? 16 ? 12 ? 12 ? 12 ? 12 ? 8 Others 844 27 396 bytes in segment CODE 3 381 bytes in segment DATA_C 5 540 bytes in segment DATA_I 5 540 bytes in segment DATA_ID 33 068 bytes in segment DATA_Z 24 bytes in segment INITTAB 26 576 bytes of CODE memory (+ 844 bytes shared) 8 921 bytes of CONST memory 38 608 bytes of DATA memory Errors: none Warnings: none