############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 25/Feb/2008 12:17:22 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\_MY_PROJECT_\xtask3\main.c # # Command line = D:\Pasha\elf\_MY_PROJECT_\xtask3\main.c -D NEWSGOLD # # -D ELKA -lC D:\Pasha\elf\_MY_PROJECT_\xtask3\Release # # _ELKA\List\ -o D:\Pasha\elf\_MY_PROJECT_\xtask3\Rele # # ase_ELKA\Obj\ -s9 --no_unroll --no_clustering # # --cpu_mode arm --endian little --cpu ARM926EJ-S # # --stack_align 4 --interwork -e --fpu None # # --dlib_config "D:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\LIB\dl5tpainl8n.h" -I # # "D:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\INC\" --inline_threshold=2 # # List file = D:\Pasha\elf\_MY_PROJECT_\xtask3\Release_ELKA\List\m # # ain.lst # # Object file = D:\Pasha\elf\_MY_PROJECT_\xtask3\Release_ELKA\Obj\ma # # in.r79 # # # # # ############################################################################## D:\Pasha\elf\_MY_PROJECT_\xtask3\main.c 1 #include "..\inc\swilib.h" 2 #include "..\inc\cfg_items.h" 3 #include "conf_loader.h" 4 #include "..\inc\xtask_ipc.h" 5 #include "swaper.h" 6 7 #ifdef NEWSGOLD 8 #define USE_ONE_KEY 9 #endif 10 11 #define TMR_SECOND(A) (1300L*A/6) 12 \ In segment DATA_Z, align 4, align-sorted 13 volatile int SHOW_LOCK; \ SHOW_LOCK: \ 00000000 DS8 4 14 \ In segment DATA_Z, align 4, align-sorted 15 CSM_DESC icsmd; \ icsmd: \ 00000000 DS8 40 \ In segment DATA_Z, align 4, align-sorted 16 int (*old_icsm_onMessage)(CSM_RAM*,GBS_MSG*); \ old_icsm_onMessage: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 17 void (*old_icsm_onClose)(CSM_RAM*); \ old_icsm_onClose: \ 00000000 DS8 4 18 \ In segment DATA_Z, align 4, align-sorted 19 GBSTMR start_tmr; \ start_tmr: \ 00000000 DS8 16 \ In segment DATA_Z, align 4, align-sorted 20 CSM_RAM *under_idle; \ under_idle: \ 00000000 DS8 4 21 22 extern const int ACTIVE_KEY; 23 extern const int ACTIVE_KEY_STYLE; 24 extern const int RED_BUT_MODE; 25 extern const int ENA_LONG_PRESS; 26 extern const int ENA_LOCK; 27 extern int my_csm_id; 28 29 extern const char UNDER_IDLE_CONSTR[]; 30 extern unsigned long strtoul (const char *nptr,char **endptr,int base); 31 32 extern void kill_data(void *p, void (*func_p)(void *)); 33 34 extern const char *successed_config_filename; 35 \ In segment CODE, align 4, keep-with-next 36 void ElfKiller(void) 37 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 38 extern void *ELF_BEGIN; 39 kill_data(&ELF_BEGIN,(void (*)(void *))mfree_adr()); \ 00000004 158000EF SWI +32789 \ 00000008 0010A0E1 MOV R1,R0 \ 0000000C ........ LDR R0,??DataTable14 ;; ELF_BEGIN \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ _BF kill_data,??kill_data??rA ;; tailcall 40 } 41 42 extern void ShowMenu(void); 43 44 // -1 - XTask GUI present 45 // 0 - XTask GUI absent 46 // 1 - IBUT longpressed, ready for exit \ In segment DATA_Z, align 4, align-sorted 47 int mode; \ mode: \ 00000000 DS8 4 48 49 // 0 - no press 50 // 1 - long press REDBUT \ In segment DATA_Z, align 4, align-sorted 51 int mode_red; \ mode_red: \ 00000000 DS8 4 52 53 // 0 - no press 54 // 1 - long press ENTER_BUTTON 55 // 2 - disable KEY_UP process \ In segment DATA_Z, align 4, align-sorted 56 int mode_enter; \ mode_enter: \ 00000000 DS8 4 57 58 \ In segment CODE, align 4, keep-with-next 59 CSM_RAM *GetUnderIdleCSM(void) 60 { \ GetUnderIdleCSM: \ 00000000 30402DE9 PUSH {R4,R5,LR} 61 CSM_RAM *u; 62 CSM_DESC *UnderIdleDesc; 63 if (strlen((char *)UNDER_IDLE_CONSTR)==8) \ 00000004 88409FE5 LDR R4,??GetUnderIdleCSM_0 ;; UNDER_IDLE_CONSTR \ 00000008 0400A0E1 MOV R0,R4 \ 0000000C 1B0000EF SWI +27 \ 00000010 080050E3 CMP R0,#+8 \ 00000014 0500001A BNE ??GetUnderIdleCSM_1 64 { 65 UnderIdleDesc=(CSM_DESC *)strtoul((char *)UNDER_IDLE_CONSTR,0,0x10); \ 00000018 1020A0E3 MOV R2,#+16 \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 0400A0E1 MOV R0,R4 \ 00000024 ........ _BLF strtoul,??strtoul??rA \ 00000028 0050A0E1 MOV R5,R0 \ 0000002C 0B0000EA B ??GetUnderIdleCSM_2 66 } 67 else 68 { 69 UnderIdleDesc=((CSM_RAM *)(FindCSMbyID(CSM_root()->idle_id))->prev)->constr; \ ??GetUnderIdleCSM_1: \ 00000030 068100EF SWI +33030 \ 00000034 040090E5 LDR R0,[R0, #+4] \ 00000038 080100EF SWI +264 \ 0000003C 040090E5 LDR R0,[R0, #+4] 70 sprintf((char *)UNDER_IDLE_CONSTR,"%08X",UnderIdleDesc); \ 00000040 ........ LDR R1,??DataTable3 ;; `?` \ 00000044 085090E5 LDR R5,[R0, #+8] \ 00000048 0400A0E1 MOV R0,R4 \ 0000004C 0520A0E1 MOV R2,R5 \ 00000050 160000EF SWI +22 71 SaveConfigData(successed_config_filename); \ 00000054 ........ LDR R0,??DataTable10 ;; successed_config_filename \ 00000058 000090E5 LDR R0,[R0, #+0] \ 0000005C ........ _BLF SaveConfigData,??SaveConfigData??rA 72 } 73 LockSched(); \ ??GetUnderIdleCSM_2: \ 00000060 460100EF SWI +326 74 u=CSM_root()->csm_q->csm.first; \ 00000064 068100EF SWI +33030 \ 00000068 080090E5 LDR R0,[R0, #+8] \ 0000006C 084090E5 LDR R4,[R0, #+8] \ 00000070 000000EA B ??GetUnderIdleCSM_3 75 while(u && u->constr!=UnderIdleDesc) u=u->next; \ ??GetUnderIdleCSM_4: \ 00000074 004094E5 LDR R4,[R4, #+0] \ ??GetUnderIdleCSM_3: \ 00000078 000054E3 CMP R4,#+0 \ 0000007C 08009415 LDRNE R0,[R4, #+8] \ 00000080 05005011 CMPNE R0,R5 \ 00000084 FAFFFF1A BNE ??GetUnderIdleCSM_4 76 UnlockSched(); \ 00000088 470100EF SWI +327 77 return u; \ 0000008C 0400A0E1 MOV R0,R4 \ 00000090 3080BDE8 POP {R4,R5,PC} ;; return \ ??GetUnderIdleCSM_0: \ 00000094 ........ DC32 UNDER_IDLE_CONSTR 78 } 79 \ In segment CODE, align 4, keep-with-next 80 int IsIdle(void) 81 { \ IsIdle: \ 00000000 00402DE9 PUSH {LR} 82 void *icsm=FindCSMbyID(CSM_root()->idle_id); \ 00000004 068100EF SWI +33030 \ 00000008 040090E5 LDR R0,[R0, #+4] \ 0000000C 080100EF SWI +264 83 if (IsGuiOnTop(((int*)icsm)[DISPLACE_OF_IDLEGUI_ID/4 ])) \ 00000010 2C0090E5 LDR R0,[R0, #+44] \ 00000014 350100EF SWI +309 \ 00000018 000050E3 CMP R0,#+0 84 return(1); \ 0000001C 0100A013 MOVNE R0,#+1 85 else 86 return(0); \ 00000020 0080BDE8 POP {PC} ;; return 87 } 88 extern const char ss[128]; 89 \ In segment DATA_Z, align 4, align-sorted 90 char *s; \ s: \ 00000000 DS8 4 \ In segment CODE, align 4, keep-with-next 91 int start()//Запуск файлов 92 {/* \ start: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 93 WSHDR *ws; 94 ws=AllocWS(256); 95 str_2ws(ws,name,256); 96 ExecuteFile(ws,0,0); 97 FreeWS(ws);*/ 98 if((ss)&&strlen(ss)) \ 00000004 98419FE5 LDR R4,??start_0+0x4 ;; ss \ 00000008 04D04DE2 SUB SP,SP,#+4 \ 0000000C 0400A0E1 MOV R0,R4 \ 00000010 1B0000EF SWI +27 \ 00000014 000050E3 CMP R0,#+0 \ 00000018 5E00000A BEQ ??start_1 99 { 100 if ((ss[2]=='\\')&&((ss[(strlen(ss))-3]=='.')||//Проверяем строку на наличие символов '\\' и '.' 101 (ss[(strlen(ss))-4]=='.')||(ss[(strlen(ss))-5]=='.'))) \ 0000001C 0200D4E5 LDRB R0,[R4, #+2] \ 00000020 5C0050E3 CMP R0,#+92 \ 00000024 0400A0E1 MOV R0,R4 \ 00000028 1E00001A BNE ??start_2 \ 0000002C 1B0000EF SWI +27 \ 00000030 040080E0 ADD R0,R0,R4 \ 00000034 030050E5 LDRB R0,[R0, #-3] \ 00000038 2E0050E3 CMP R0,#+46 \ 0000003C 0B00000A BEQ ??start_3 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1B0000EF SWI +27 \ 00000048 040080E0 ADD R0,R0,R4 \ 0000004C 040050E5 LDRB R0,[R0, #-4] \ 00000050 2E0050E3 CMP R0,#+46 \ 00000054 0500000A BEQ ??start_3 \ 00000058 0400A0E1 MOV R0,R4 \ 0000005C 1B0000EF SWI +27 \ 00000060 040080E0 ADD R0,R0,R4 \ 00000064 050050E5 LDRB R0,[R0, #-5] \ 00000068 2E0050E3 CMP R0,#+46 \ 0000006C 4900001A BNE ??start_1 102 /* Если в строке есть символы '\\' и '.', то запускаем как обычный файл*/ 103 { 104 WSHDR *ws; 105 ws=AllocWS(256); \ ??start_3: \ 00000070 400FA0E3 MOV R0,#+256 \ 00000074 250100EF SWI +293 \ 00000078 0050A0E1 MOV R5,R0 106 str_2ws(ws,ss,256); \ 0000007C 402FA0E3 MOV R2,#+256 \ 00000080 0410A0E1 MOV R1,R4 \ 00000084 6C0100EF SWI +364 107 ExecuteFile(ws,0,0); \ 00000088 0020A0E3 MOV R2,#+0 \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 940000EF SWI +148 108 FreeWS(ws); \ 00000098 0500A0E1 MOV R0,R5 \ 0000009C 290100EF SWI +297 109 return(1); \ 000000A0 0100A0E3 MOV R0,#+1 \ 000000A4 F280BDE8 POP {R1,R4-R7,PC} 110 } 111 if ((ss[2]!='\\')&&(ss[(strlen(ss))-3]!='.')&& 112 (ss[(strlen(ss))-4]!='.')&&(ss[(strlen(ss))-5]!='.')&& 113 (ss[0]!='a')&&(ss[0]!='A')&&(ss[1]!='0')) \ ??start_2: \ 000000A8 1B0000EF SWI +27 \ 000000AC 0150D4E5 LDRB R5,[R4, #+1] \ 000000B0 0060D4E5 LDRB R6,[R4, #+0] \ 000000B4 040080E0 ADD R0,R0,R4 \ 000000B8 030050E5 LDRB R0,[R0, #-3] \ 000000BC 2E0050E3 CMP R0,#+46 \ 000000C0 1800000A BEQ ??start_4 \ 000000C4 0400A0E1 MOV R0,R4 \ 000000C8 1B0000EF SWI +27 \ 000000CC 040080E0 ADD R0,R0,R4 \ 000000D0 040050E5 LDRB R0,[R0, #-4] \ 000000D4 2E0050E3 CMP R0,#+46 \ 000000D8 1200000A BEQ ??start_4 \ 000000DC 0400A0E1 MOV R0,R4 \ 000000E0 1B0000EF SWI +27 \ 000000E4 040080E0 ADD R0,R0,R4 \ 000000E8 050050E5 LDRB R0,[R0, #-5] \ 000000EC 2E0050E3 CMP R0,#+46 \ 000000F0 61005613 CMPNE R6,#+97 \ 000000F4 41005613 CMPNE R6,#+65 \ 000000F8 30005513 CMPNE R5,#+48 \ 000000FC 0900000A BEQ ??start_4 114 { 115 s=malloc(128); \ 00000100 A0709FE5 LDR R7,??start_0+0x8 ;; s \ 00000104 8000A0E3 MOV R0,#+128 \ 00000108 140000EF SWI +20 \ 0000010C 000087E5 STR R0,[R7, #+0] 116 sprintf(s,"%s",ss); \ 00000110 0420A0E1 MOV R2,R4 \ 00000114 211F8FE2 ADR R1,??start_0 ;; "%s" \ 00000118 160000EF SWI +22 117 SUBPROC(GetFunctionPointer(s)); \ 0000011C 000097E5 LDR R0,[R7, #+0] \ 00000120 740000EF SWI +116 \ 00000124 710100EF SWI +369 \ ??start_4: \ 00000128 0400A0E1 MOV R0,R4 \ 0000012C 1B0000EF SWI +27 \ 00000130 040080E0 ADD R0,R0,R4 \ 00000134 030050E5 LDRB R0,[R0, #-3] \ 00000138 2E0050E3 CMP R0,#+46 \ 0000013C 1500000A BEQ ??start_1 \ 00000140 0400A0E1 MOV R0,R4 \ 00000144 1B0000EF SWI +27 \ 00000148 040080E0 ADD R0,R0,R4 \ 0000014C 040050E5 LDRB R0,[R0, #-4] \ 00000150 2E0050E3 CMP R0,#+46 \ 00000154 0F00000A BEQ ??start_1 \ 00000158 0400A0E1 MOV R0,R4 \ 0000015C 1B0000EF SWI +27 \ 00000160 040080E0 ADD R0,R0,R4 \ 00000164 050050E5 LDRB R0,[R0, #-5] \ 00000168 2E0050E3 CMP R0,#+46 \ 0000016C 0900000A BEQ ??start_1 \ 00000170 610056E3 CMP R6,#+97 \ 00000174 41005613 CMPNE R6,#+65 \ 00000178 30005503 CMPEQ R5,#+48 \ 0000017C 0500001A BNE ??start_1 118 } 119 if ((ss[2]!='\\')&&(ss[(strlen(ss))-3]!='.')&& 120 (ss[(strlen(ss))-4]!='.')&&(ss[(strlen(ss))-5]!='.')&& 121 ((ss[0]=='a')||(ss[0]=='A'))&&(ss[1]=='0')) 122 /* Если в строке нет символов '\\' и '.' и первые два символа А0, 123 то запускаем энтрипоинт */ 124 { 125 int entry; 126 sscanf(ss,"%08X",&entry); \ 00000180 ........ LDR R1,??DataTable3 ;; `?` \ 00000184 0D20A0E1 MOV R2,SP \ 00000188 0400A0E1 MOV R0,R4 \ 0000018C F50100EF SWI +501 127 SUBPROC((void*)entry); \ 00000190 00009DE5 LDR R0,[SP, #+0] \ 00000194 710100EF SWI +369 128 } 129 } 130 return(1); \ ??start_1: \ 00000198 0100A0E3 MOV R0,#+1 \ 0000019C F280BDE8 POP {R1,R4-R7,PC} ;; return \ ??start_0: \ 000001A0 25730000 DC8 "%s",+0 \ 000001A4 ........ DC32 ss \ 000001A8 ........ DC32 s 131 } 132 \ In segment CODE, align 4, keep-with-next 133 int my_keyhook(int submsg, int msg) 134 { \ my_keyhook: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 0140A0E1 MOV R4,R1 135 #ifdef NEWSGOLD 136 void *icsm=FindCSMbyID(CSM_root()->idle_id); \ 00000008 0950A0E3 MOV R5,#+9 \ 0000000C 425C85E3 ORR R5,R5,#0x4200 \ 00000010 068100EF SWI +33030 \ 00000014 040090E5 LDR R0,[R0, #+4] \ 00000018 0170A0E3 MOV R7,#+1 \ 0000001C 080100EF SWI +264 \ 00000020 00B0A0E1 MOV R11,R0 \ 00000024 00009DE5 LDR R0,[SP, #+0] \ 00000028 9360A0E3 MOV R6,#+147 \ 0000002C 406F86E3 ORR R6,R6,#0x100 \ 00000030 0080A0E3 MOV R8,#+0 \ 00000034 0C0050E3 CMP R0,#+12 \ 00000038 1500001A BNE ??my_keyhook_0 \ 0000003C 48039FE5 LDR R0,??my_keyhook_1 ;; RED_BUT_MODE \ 00000040 009090E5 LDR R9,[R0, #+0] \ 00000044 000059E3 CMP R9,#+0 \ 00000048 1100000A BEQ ??my_keyhook_0 137 if ((submsg==RED_BUTTON)&&(RED_BUT_MODE)) 138 { 139 if ((CSM_root()->csm_q->csm.last==icsm)||(IsCalling())) //(IsGuiOnTop(((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4])) \ 0000004C 3CA39FE5 LDR R10,??my_keyhook_1+0x4 ;; mode_red \ 00000050 068100EF SWI +33030 \ 00000054 080090E5 LDR R0,[R0, #+8] \ 00000058 0C0090E5 LDR R0,[R0, #+12] \ 0000005C 0B0050E1 CMP R0,R11 \ 00000060 0200000A BEQ ??my_keyhook_2 \ 00000064 6E0000EF SWI +110 \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 2300000A BEQ ??my_keyhook_3 140 { 141 if (msg==KEY_UP) \ ??my_keyhook_2: \ 00000070 650F54E3 CMP R4,#+404 \ 00000074 0400001A BNE ??my_keyhook_4 142 { 143 if (mode_red!=2) \ 00000078 00009AE5 LDR R0,[R10, #+0] \ 0000007C 020050E3 CMP R0,#+2 \ 00000080 0200000A BEQ ??my_keyhook_5 144 { 145 mode_red=0; \ 00000084 00808AE5 STR R8,[R10, #+0] 146 return KEYHOOK_BREAK; \ 00000088 A60000EA B ??my_keyhook_6 147 } 148 } 149 mode_red=2; //Ложим на отпускания \ ??my_keyhook_4: \ 0000008C 0200A0E3 MOV R0,#+2 \ ??my_keyhook_5: \ 00000090 00008AE5 STR R0,[R10, #+0] 150 } 151 else 152 { 153 if (msg==KEY_DOWN) 154 { 155 if (mode_red==1) 156 { 157 mode_red=0; 158 return KEYHOOK_NEXT; //Long press, continue with REDB PRESS 159 } 160 } 161 if (msg==KEY_UP) 162 { 163 if (mode_red) 164 { 165 mode_red=0; //Release after longpress 166 return KEYHOOK_NEXT; 167 } 168 else 169 //Release after short press 170 { 171 if (RED_BUT_MODE==1) 172 { 173 GBS_SendMessage(MMI_CEPID,KEY_DOWN,RIGHT_SOFT); 174 } 175 else 176 { 177 if (!my_csm_id) 178 { 179 CSMtoTop(CSM_root()->idle_id,-1); 180 } 181 } 182 } 183 } 184 if (msg==LONG_PRESS) 185 { 186 mode_red=1; 187 GBS_SendMessage(MMI_CEPID,KEY_DOWN,RED_BUTTON); 188 } 189 return KEYHOOK_BREAK; 190 } 191 } 192 #endif 193 194 //#ifndef NEWSGOLD 195 if (ACTIVE_KEY_STYLE==3) \ ??my_keyhook_0: \ 00000094 F8029FE5 LDR R0,??my_keyhook_1+0x8 ;; ENA_LOCK \ 00000098 ........ LDR R11,??DataTable19 ;; mode \ 0000009C 009090E5 LDR R9,[R0, #+0] \ 000000A0 F0029FE5 LDR R0,??my_keyhook_1+0xC ;; ACTIVE_KEY_STYLE \ 000000A4 00A090E5 LDR R10,[R0, #+0] \ 000000A8 03005AE3 CMP R10,#+3 \ 000000AC 4700001A BNE ??my_keyhook_7 196 {/* 197 if (submsg!=ENTER_BUTTON) return KEYHOOK_NEXT; 198 199 switch(msg) 200 { 201 case KEY_DOWN: 202 if (mode_enter==2) 203 { 204 GBS_SendMessage(MMI_CEPID,KEY_UP,ENTER_BUTTON); 205 return KEYHOOK_NEXT; 206 } 207 mode_enter=0; 208 return KEYHOOK_BREAK; 209 case KEY_UP: 210 if (mode_enter==0) 211 { 212 mode_enter=2; 213 GBS_SendMessage(MMI_CEPID,KEY_DOWN,ENTER_BUTTON); 214 return KEYHOOK_BREAK; 215 } 216 if (mode_enter==2) 217 { 218 mode_enter=0; 219 return KEYHOOK_NEXT; 220 } 221 mode_enter=0; 222 return KEYHOOK_BREAK; 223 case LONG_PRESS: 224 mode_enter=1; 225 if (IsUnlocked()||ENA_LOCK) 226 { 227 ShowMenu(); 228 } 229 mode=0; 230 return KEYHOOK_BREAK; 231 }*/ 232 233 if (submsg==ENTER_BUTTON) \ 000000B0 00009DE5 LDR R0,[SP, #+0] \ 000000B4 1A0050E3 CMP R0,#+26 \ 000000B8 5E00001A BNE ??my_keyhook_8 234 { 235 switch(msg) \ 000000BC D8029FE5 LDR R0,??my_keyhook_1+0x10 ;; mode_enter \ 000000C0 060054E1 CMP R4,R6 \ 000000C4 001090E5 LDR R1,[R0, #+0] \ 000000C8 0500000A BEQ ??my_keyhook_9 \ 000000CC 650F54E3 CMP R4,#+404 \ 000000D0 2900000A BEQ ??my_keyhook_10 \ 000000D4 023086E2 ADD R3,R6,#+2 \ 000000D8 030054E1 CMP R4,R3 \ 000000DC 3400000A BEQ ??my_keyhook_11 \ 000000E0 3A0000EA B ??my_keyhook_7 236 { 237 case KEY_DOWN: 238 if (!ACTIVE_KEY_STYLE) 239 { 240 if (IsUnlocked()||ENA_LOCK) 241 { 242 ShowMenu(); 243 } 244 return(2); 245 } 246 else 247 { 248 if (mode_enter==2) \ ??my_keyhook_9: \ 000000E4 020051E3 CMP R1,#+2 \ 000000E8 2100001A BNE ??my_keyhook_12 249 { 250 GBS_SendMessage(MMI_CEPID,KEY_UP,ENTER_BUTTON); \ 000000EC 1A20A0E3 MOV R2,#+26 \ 000000F0 651FA0E3 MOV R1,#+404 \ 000000F4 0500A0E1 MOV R0,R5 \ 000000F8 000100EF SWI +256 251 return (0); \ 000000FC 2A0000EA B ??my_keyhook_13 252 } \ ??my_keyhook_3: \ 00000100 00009AE5 LDR R0,[R10, #+0] \ 00000104 060054E1 CMP R4,R6 \ 00000108 0400001A BNE ??my_keyhook_14 \ 0000010C 010050E3 CMP R0,#+1 \ 00000110 9500001A BNE ??my_keyhook_15 \ ??my_keyhook_16: \ 00000114 00808AE5 STR R8,[R10, #+0] \ ??my_keyhook_17: \ 00000118 0000A0E3 MOV R0,#+0 \ 0000011C F28FBDE8 POP {R1,R4-R11,PC} \ ??my_keyhook_14: \ 00000120 650F54E3 CMP R4,#+404 \ 00000124 0900001A BNE ??my_keyhook_18 \ 00000128 000050E3 CMP R0,#+0 \ 0000012C F8FFFF1A BNE ??my_keyhook_16 \ 00000130 010059E3 CMP R9,#+1 \ 00000134 0420A003 MOVEQ R2,#+4 \ 00000138 0900000A BEQ ??my_keyhook_19 \ 0000013C ........ LDR R0,??DataTable11 ;; my_csm_id \ 00000140 000090E5 LDR R0,[R0, #+0] \ 00000144 000050E3 CMP R0,#+0 \ 00000148 8700001A BNE ??my_keyhook_15 \ 0000014C 710000EA B ??my_keyhook_20 \ ??my_keyhook_18: \ 00000150 020086E2 ADD R0,R6,#+2 \ 00000154 000054E1 CMP R4,R0 \ 00000158 8300001A BNE ??my_keyhook_15 \ 0000015C 00708AE5 STR R7,[R10, #+0] \ 00000160 0C20A0E3 MOV R2,#+12 \ ??my_keyhook_19: \ 00000164 0610A0E1 MOV R1,R6 \ 00000168 0500A0E1 MOV R0,R5 \ 0000016C 000100EF SWI +256 \ 00000170 6C0000EA B ??my_keyhook_6 253 mode_enter=0; \ ??my_keyhook_12: \ 00000174 008080E5 STR R8,[R0, #+0] 254 return (2); \ 00000178 6A0000EA B ??my_keyhook_6 255 } 256 257 case KEY_UP: 258 if (ACTIVE_KEY_STYLE) 259 { 260 if (mode_enter==0) \ ??my_keyhook_10: \ 0000017C 000051E3 CMP R1,#+0 \ 00000180 0600001A BNE ??my_keyhook_21 261 { 262 mode_enter=2; \ 00000184 0210A0E3 MOV R1,#+2 \ 00000188 001080E5 STR R1,[R0, #+0] 263 GBS_SendMessage(MMI_CEPID,KEY_DOWN,ENTER_BUTTON); \ 0000018C 1A20A0E3 MOV R2,#+26 \ 00000190 0610A0E1 MOV R1,R6 \ 00000194 0500A0E1 MOV R0,R5 \ 00000198 000100EF SWI +256 264 return (2); \ 0000019C 610000EA B ??my_keyhook_6 265 } 266 if (mode_enter==2) \ ??my_keyhook_21: \ 000001A0 020051E3 CMP R1,#+2 \ 000001A4 F2FFFF1A BNE ??my_keyhook_12 267 { 268 mode_enter=0; \ 000001A8 008080E5 STR R8,[R0, #+0] 269 return (0); \ ??my_keyhook_13: \ 000001AC 0000A0E3 MOV R0,#+0 \ 000001B0 F28FBDE8 POP {R1,R4-R11,PC} 270 } 271 mode_enter=0; 272 return (2); 273 } 274 275 case LONG_PRESS: 276 if (ACTIVE_KEY_STYLE) 277 { 278 mode_enter=1; \ ??my_keyhook_11: \ 000001B4 007080E5 STR R7,[R0, #+0] 279 if (IsUnlocked()||ENA_LOCK) \ 000001B8 430000EF SWI +67 \ 000001BC 000050E3 CMP R0,#+0 \ 000001C0 00005903 CMPEQ R9,#+0 \ 000001C4 D3FFFF0A BEQ ??my_keyhook_17 280 { 281 ShowMenu(); \ 000001C8 ........ _BLF ShowMenu,??ShowMenu??rA 282 } 283 } 284 break; 285 } 286 }//if 287 } 288 // * + # implementation 289 if ((ACTIVE_KEY_STYLE==2) && !(my_csm_id)) 290 { 291 if (msg==KEY_UP) 292 { 293 mode=0; 294 return KEYHOOK_NEXT; 295 } 296 if (msg==KEY_DOWN) 297 { 298 switch (submsg) 299 { 300 case '*': 301 mode=1; 302 return (0); 303 case '#': 304 if (mode==1) 305 { 306 if (IsUnlocked()||ENA_LOCK) 307 ShowMenu(); 308 else mode=0; 309 } 310 else return KEYHOOK_NEXT; 311 } 312 } 313 } 314 //#endif 315 if (submsg==GREEN_BUTTON)//(ACTIVE_KEY_STYLE<2) 316 { 317 // if (submsg!=ACTIVE_KEY) return KEYHOOK_NEXT; 318 if (submsg!=GREEN_BUTTON) return KEYHOOK_NEXT; 319 if (my_csm_id) 320 { 321 if (((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=my_csm_id) 322 { 323 CloseCSM(my_csm_id); 324 } 325 if (msg==KEY_UP) 326 { 327 GBS_SendMessage(MMI_CEPID,KEY_DOWN,ENTER_BUTTON); 328 } 329 return KEYHOOK_BREAK; 330 } 331 switch(msg) 332 { 333 case KEY_DOWN: 334 mode=0; 335 if (ACTIVE_KEY_STYLE==0) 336 return KEYHOOK_BREAK; 337 else 338 return KEYHOOK_NEXT; 339 case KEY_UP: 340 if (mode==1) 341 { 342 //Release after longpress 343 mode=0; 344 if ((ACTIVE_KEY_STYLE==1) || (ENA_LONG_PRESS==3)) 345 { 346 //Launch on LongPress or Extra on LP - Launch 347 if (IsUnlocked()||ENA_LOCK) 348 { 349 ShowMenu(); 350 } 351 return KEYHOOK_BREAK; 352 } 353 if (ENA_LONG_PRESS==1) return KEYHOOK_BREAK; 354 if (ENA_LONG_PRESS==2) 355 { 356 if(IsIdle()) 357 { 358 //s=malloc(128); 359 //sprintf(s,"%s",ss); 360 // if(strlen(s)==15) SUBPROC(GetFunctionPointer(s)); 361 //else 362 start(); 363 } 364 else CSMtoTop(CSM_root()->idle_id,-1); 365 return KEYHOOK_BREAK; 366 } 367 if (ENA_LONG_PRESS==4) 368 { 369 CSMtoTop(CSM_root()->idle_id,-1); 370 KbdLock(); 371 return KEYHOOK_BREAK; 372 } 373 break; 374 } 375 if (ACTIVE_KEY_STYLE==0) 376 { 377 if (IsUnlocked()||ENA_LOCK) 378 { 379 ShowMenu(); 380 } 381 return KEYHOOK_BREAK; 382 } 383 break; 384 case LONG_PRESS: 385 mode=1; 386 //#ifndef NEWSGOLD 387 if (ACTIVE_KEY_STYLE==1) 388 { 389 if (ENA_LONG_PRESS) 390 return KEYHOOK_NEXT; 391 else 392 return KEYHOOK_BREAK; 393 } 394 //#else 395 // return KEYHOOK_BREAK; 396 //#endif 397 } 398 } 399 400 /* 401 if(IsUnlocked()) 402 { 403 if (submsg==ACTIVE_KEY) 404 { 405 switch(msg) 406 { 407 case KEY_DOWN: 408 if (!ACTIVE_KEY_STYLE) 409 { 410 if (IsUnlocked()||ENA_LOCK) 411 { 412 ShowMenu(); 413 } 414 return(2); 415 } 416 else 417 { 418 if (mode_enter==2) 419 { 420 GBS_SendMessage(MMI_CEPID,KEY_UP,ACTIVE_KEY); 421 return (0); 422 } 423 mode_enter=0; 424 return (2); 425 } 426 427 case KEY_UP: 428 if (ACTIVE_KEY_STYLE) 429 { 430 if (mode_enter==0) 431 { 432 mode_enter=2; 433 GBS_SendMessage(MMI_CEPID,KEY_DOWN,ACTIVE_KEY); 434 return (2); 435 } 436 if (mode_enter==2) 437 { 438 mode_enter=0; 439 return (0); 440 } 441 mode_enter=0; 442 return (2); 443 } 444 445 case LONG_PRESS: 446 if (ACTIVE_KEY_STYLE) 447 { 448 mode_enter=1; 449 if (IsUnlocked()||ENA_LOCK) 450 { 451 ShowMenu(); 452 } 453 } 454 break; 455 } 456 }//if 457 }*/ 458 return KEYHOOK_NEXT; \ 000001CC F6FFFFEA B ??my_keyhook_13 \ ??my_keyhook_7: \ 000001D0 02005AE3 CMP R10,#+2 \ 000001D4 1700001A BNE ??my_keyhook_8 \ 000001D8 ........ LDR R0,??DataTable11 ;; my_csm_id \ 000001DC 000090E5 LDR R0,[R0, #+0] \ 000001E0 000050E3 CMP R0,#+0 \ 000001E4 1300001A BNE ??my_keyhook_8 \ 000001E8 650F54E3 CMP R4,#+404 \ 000001EC 00808B05 STREQ R8,[R11, #+0] \ 000001F0 F28FBD08 POPEQ {R1,R4-R11,PC} \ 000001F4 060054E1 CMP R4,R6 \ 000001F8 0E00001A BNE ??my_keyhook_8 \ 000001FC 00009DE5 LDR R0,[SP, #+0] \ 00000200 230050E2 SUBS R0,R0,#+35 \ 00000204 0300000A BEQ ??my_keyhook_22 \ 00000208 070050E2 SUBS R0,R0,#+7 \ 0000020C 0900001A BNE ??my_keyhook_8 \ 00000210 00708BE5 STR R7,[R11, #+0] \ 00000214 E4FFFFEA B ??my_keyhook_13 \ ??my_keyhook_22: \ 00000218 00009BE5 LDR R0,[R11, #+0] \ 0000021C 010050E3 CMP R0,#+1 \ 00000220 BCFFFF1A BNE ??my_keyhook_17 \ 00000224 430000EF SWI +67 \ 00000228 000050E3 CMP R0,#+0 \ 0000022C 00005903 CMPEQ R9,#+0 \ 00000230 1800000A BEQ ??my_keyhook_23 \ 00000234 ........ _BLF ShowMenu,??ShowMenu??rA \ ??my_keyhook_8: \ 00000238 00009DE5 LDR R0,[SP, #+0] \ 0000023C 0B0050E3 CMP R0,#+11 \ 00000240 B4FFFF1A BNE ??my_keyhook_17 \ 00000244 ........ LDR R0,??DataTable11 ;; my_csm_id \ 00000248 000090E5 LDR R0,[R0, #+0] \ 0000024C 000050E3 CMP R0,#+0 \ 00000250 1200000A BEQ ??my_keyhook_24 \ 00000254 068100EF SWI +33030 \ 00000258 0010A0E1 MOV R1,R0 \ 0000025C 081091E5 LDR R1,[R1, #+8] \ 00000260 ........ LDR R0,??DataTable11 ;; my_csm_id \ 00000264 0C1091E5 LDR R1,[R1, #+12] \ 00000268 000090E5 LDR R0,[R0, #+0] \ 0000026C 0C1091E5 LDR R1,[R1, #+12] \ 00000270 000051E1 CMP R1,R0 \ 00000274 0000000A BEQ ??my_keyhook_25 \ 00000278 FC0100EF SWI +508 \ ??my_keyhook_25: \ 0000027C 650F54E3 CMP R4,#+404 \ 00000280 3900001A BNE ??my_keyhook_15 \ 00000284 1A20A0E3 MOV R2,#+26 \ 00000288 0610A0E1 MOV R1,R6 \ 0000028C 0500A0E1 MOV R0,R5 \ 00000290 000100EF SWI +256 \ 00000294 230000EA B ??my_keyhook_6 \ ??my_keyhook_23: \ 00000298 00808BE5 STR R8,[R11, #+0] \ 0000029C E5FFFFEA B ??my_keyhook_8 \ ??my_keyhook_24: \ 000002A0 F8009FE5 LDR R0,??my_keyhook_1+0x14 ;; ENA_LONG_PRESS \ 000002A4 060054E1 CMP R4,R6 \ 000002A8 000090E5 LDR R0,[R0, #+0] \ 000002AC 0500000A BEQ ??my_keyhook_26 \ 000002B0 650F54E3 CMP R4,#+404 \ 000002B4 0700000A BEQ ??my_keyhook_27 \ 000002B8 021086E2 ADD R1,R6,#+2 \ 000002BC 010054E1 CMP R4,R1 \ 000002C0 2B00000A BEQ ??my_keyhook_28 \ 000002C4 B8FFFFEA B ??my_keyhook_13 \ ??my_keyhook_26: \ 000002C8 00808BE5 STR R8,[R11, #+0] \ 000002CC 00005AE3 CMP R10,#+0 \ 000002D0 90FFFF1A BNE ??my_keyhook_17 \ 000002D4 130000EA B ??my_keyhook_6 \ ??my_keyhook_27: \ 000002D8 00109BE5 LDR R1,[R11, #+0] \ 000002DC 010051E3 CMP R1,#+1 \ 000002E0 1A00001A BNE ??my_keyhook_29 \ 000002E4 00808BE5 STR R8,[R11, #+0] \ 000002E8 01005AE3 CMP R10,#+1 \ 000002EC 03005013 CMPNE R0,#+3 \ 000002F0 1800000A BEQ ??my_keyhook_30 \ 000002F4 010050E3 CMP R0,#+1 \ 000002F8 1B00000A BEQ ??my_keyhook_15 \ 000002FC 020050E3 CMP R0,#+2 \ 00000300 0A00001A BNE ??my_keyhook_31 \ 00000304 ........ BL IsIdle \ 00000308 000050E3 CMP R0,#+0 \ 0000030C 0100000A BEQ ??my_keyhook_20 \ 00000310 ........ BL start \ 00000314 030000EA B ??my_keyhook_6 \ ??my_keyhook_20: \ 00000318 068100EF SWI +33030 \ 0000031C 040090E5 LDR R0,[R0, #+4] \ 00000320 001067E2 RSB R1,R7,#+0 \ 00000324 ........ _BLF CSMtoTop,??CSMtoTop??rA \ ??my_keyhook_6: \ 00000328 0200A0E3 MOV R0,#+2 \ 0000032C F28FBDE8 POP {R1,R4-R11,PC} \ ??my_keyhook_31: \ 00000330 040050E3 CMP R0,#+4 \ 00000334 77FFFF1A BNE ??my_keyhook_17 \ 00000338 068100EF SWI +33030 \ 0000033C 040090E5 LDR R0,[R0, #+4] \ 00000340 001067E2 RSB R1,R7,#+0 \ 00000344 ........ _BLF CSMtoTop,??CSMtoTop??rA \ 00000348 A90000EF SWI +169 \ 0000034C F5FFFFEA B ??my_keyhook_6 \ ??my_keyhook_29: \ 00000350 00005AE3 CMP R10,#+0 \ 00000354 6FFFFF1A BNE ??my_keyhook_17 \ ??my_keyhook_30: \ 00000358 430000EF SWI +67 \ 0000035C 000050E3 CMP R0,#+0 \ 00000360 00005903 CMPEQ R9,#+0 \ 00000364 0000000A BEQ ??my_keyhook_15 \ 00000368 ........ _BLF ShowMenu,??ShowMenu??rA \ ??my_keyhook_15: \ 0000036C 0200A0E3 MOV R0,#+2 \ 00000370 F28FBDE8 POP {R1,R4-R11,PC} \ ??my_keyhook_28: \ 00000374 00708BE5 STR R7,[R11, #+0] \ 00000378 01005AE3 CMP R10,#+1 \ 0000037C 65FFFF1A BNE ??my_keyhook_17 \ 00000380 000050E3 CMP R0,#+0 \ 00000384 F8FFFF0A BEQ ??my_keyhook_15 \ 00000388 87FFFFEA B ??my_keyhook_13 \ ??my_keyhook_1: \ 0000038C ........ DC32 RED_BUT_MODE \ 00000390 ........ DC32 mode_red \ 00000394 ........ DC32 ENA_LOCK \ 00000398 ........ DC32 ACTIVE_KEY_STYLE \ 0000039C ........ DC32 mode_enter \ 000003A0 ........ DC32 ENA_LONG_PRESS 459 } 460 \ In segment DATA_Z, align 4, align-sorted 461 volatile int callhide_mode=0; \ callhide_mode: \ 00000000 DS8 4 462 463 #pragma inline=forced 464 int toupper(int c) 465 { 466 if ((c>='a')&&(c<='z')) c+='A'-'a'; 467 return(c); 468 } 469 \ In segment CODE, align 4, keep-with-next 470 int strcmp_nocase(const char *s1,const char *s2) 471 { 472 int i; 473 int c; 474 while(!(i=(c=toupper(*s1++))-toupper(*s2++))) if (!c) break; \ strcmp_nocase: \ ??strcmp_nocase_0: \ 00000000 0020D0E5 LDRB R2,[R0, #+0] \ 00000004 610052E3 CMP R2,#+97 \ 00000008 010000BA BLT ??strcmp_nocase_1 \ 0000000C 7B0052E3 CMP R2,#+123 \ 00000010 202042B2 SUBLT R2,R2,#+32 \ ??strcmp_nocase_1: \ 00000014 00C0D1E5 LDRB R12,[R1, #+0] \ 00000018 010080E2 ADD R0,R0,#+1 \ 0000001C 0230A0E1 MOV R3,R2 \ 00000020 61005CE3 CMP R12,#+97 \ 00000024 010000BA BLT ??strcmp_nocase_2 \ 00000028 7B005CE3 CMP R12,#+123 \ 0000002C 20C04CB2 SUBLT R12,R12,#+32 \ ??strcmp_nocase_2: \ 00000030 011081E2 ADD R1,R1,#+1 \ 00000034 0C2052E0 SUBS R2,R2,R12 \ 00000038 0100001A BNE ??strcmp_nocase_3 \ 0000003C 000053E3 CMP R3,#+0 \ 00000040 EEFFFF1A BNE ??strcmp_nocase_0 475 return(i); \ ??strcmp_nocase_3: \ 00000044 0200A0E1 MOV R0,R2 \ 00000048 1EFF2FE1 BX LR ;; return 476 } 477 \ In segment DATA_C, align 4, align-sorted 478 const char my_ipc_name[]=IPC_XTASK_NAME; \ my_ipc_name: \ 00000000 585461736B00 DC8 "XTask" \ 00000006 0000 DC8 0, 0 479 \ In segment CODE, align 4, keep-with-next 480 int MyIDLECSM_onMessage(CSM_RAM* data,GBS_MSG* msg) 481 { 482 int csm_result; 483 int icgui_id; 484 // int ocgui_id; 485 int idlegui_id; 486 487 #ifndef NEWSGOLD 488 #define EXT_BUTTON 0x63 489 if ((ACTIVE_KEY_STYLE!=2)&&(ACTIVE_KEY_STYLE!=3)) //не "* + #" и не "Enter Button" 490 {//чтоб можно было вызвать браузер при этих режимах 491 if (ACTIVE_KEY==EXT_BUTTON) //мнимая кнопка браузера 492 { 493 if (msg->msg==439) //вызван браузер 494 { 495 switch (msg->submess) 496 { 497 case 1: 498 GBS_SendMessage(MMI_CEPID,LONG_PRESS,EXT_BUTTON); 499 break; 500 case 2: 501 GBS_SendMessage(MMI_CEPID,KEY_UP,EXT_BUTTON); 502 break; // Никакого default!!! 503 } 504 } 505 else //браузер не вызывался 506 goto L1; 507 } 508 else //кнопка вызова не является мнимой кнопкой вызова браузера 509 goto L1; 510 } 511 else 512 L1: 513 csm_result=old_icsm_onMessage(data,msg); 514 #else 515 csm_result = old_icsm_onMessage(data, msg); //Вызываем старый обработчик событий \ MyIDLECSM_onMessage: \ 00000000 ........ LDR R2,??DataTable18 ;; old_icsm_onMessage \ 00000004 F04F2DE9 PUSH {R4-R11,LR} \ 00000008 002092E5 LDR R2,[R2, #+0] 516 #endif 517 518 icgui_id=((int *)data)[DISPLACE_OF_INCOMMINGGUI/4]; 519 idlegui_id=((int *)data)[DISPLACE_OF_IDLEGUI_ID/4]; 520 // ocgui_id=((int *)data)[DISPLACE_OF_OUTGOINGGUI/4]; 521 if (!icgui_id) callhide_mode=0; \ 0000000C 74519FE5 LDR R5,??MyIDLECSM_onMessage_0 ;; callhide_mode \ 00000010 0070A0E1 MOV R7,R0 \ 00000014 0180A0E1 MOV R8,R1 \ 00000018 32FF2FE1 BLX R2 \ 0000001C 349097E5 LDR R9,[R7, #+52] \ 00000020 2CA097E5 LDR R10,[R7, #+44] \ 00000024 0040A0E1 MOV R4,R0 \ 00000028 0060A0E3 MOV R6,#+0 \ 0000002C 000059E3 CMP R9,#+0 \ 00000030 00608505 STREQ R6,[R5, #+0] 522 // if (!ocgui_id) callhide_mode=0; 523 524 if(msg->msg == MSG_RECONFIGURE_REQ) \ 00000034 040098E5 LDR R0,[R8, #+4] \ 00000038 AF10A0E3 MOV R1,#+175 \ 0000003C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000040 010050E1 CMP R0,R1 \ 00000044 0900001A BNE ??MyIDLECSM_onMessage_1 525 { 526 if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) \ 00000048 ........ LDR R0,??DataTable10 ;; successed_config_filename \ 0000004C 0C1098E5 LDR R1,[R8, #+12] \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 ........ BL strcmp_nocase \ 00000058 000050E3 CMP R0,#+0 \ 0000005C 3700001A BNE ??MyIDLECSM_onMessage_2 527 { 528 ShowMSG(1,(int)"XTask config updated!"); \ 00000060 24119FE5 LDR R1,??MyIDLECSM_onMessage_0+0x4 ;; `?` \ 00000064 0100A0E3 MOV R0,#+1 \ 00000068 480100EF SWI +328 529 InitConfig(); \ 0000006C ........ _BLF InitConfig,??InitConfig??rA 530 } 531 } 532 //IPC 533 if (msg->msg==MSG_IPC) \ ??MyIDLECSM_onMessage_1: \ 00000070 040098E5 LDR R0,[R8, #+4] \ 00000074 B010A0E3 MOV R1,#+176 \ 00000078 DE1C81E3 ORR R1,R1,#0xDE00 \ 0000007C 010050E1 CMP R0,R1 \ 00000080 2A00001A BNE ??MyIDLECSM_onMessage_3 534 { 535 IPC_REQ *ipc; 536 if ((ipc=(IPC_REQ*)msg->data0)) \ 00000084 0CB098E5 LDR R11,[R8, #+12] \ 00000088 00005BE3 CMP R11,#+0 \ 0000008C 2B00000A BEQ ??MyIDLECSM_onMessage_2 537 { 538 if (strcmp(ipc->name_to,my_ipc_name)==0) \ 00000090 00009BE5 LDR R0,[R11, #+0] \ 00000094 F4109FE5 LDR R1,??MyIDLECSM_onMessage_0+0x8 ;; my_ipc_name \ 00000098 190000EF SWI +25 \ 0000009C 000050E3 CMP R0,#+0 \ 000000A0 2200001A BNE ??MyIDLECSM_onMessage_3 539 { 540 switch (msg->submess) \ 000000A4 ........ LDR R0,??DataTable11 ;; my_csm_id \ 000000A8 081098E5 LDR R1,[R8, #+8] \ 000000AC 000090E5 LDR R0,[R0, #+0] \ 000000B0 011051E2 SUBS R1,R1,#+1 \ 000000B4 1400000A BEQ ??MyIDLECSM_onMessage_4 \ 000000B8 011051E2 SUBS R1,R1,#+1 541 { 542 case IPC_XTASK_SHOW_CSM: 543 if (my_csm_id) break; \ 000000BC 00005003 CMPEQ R0,#+0 \ 000000C0 1A00001A BNE ??MyIDLECSM_onMessage_3 544 if ((!IsCalling())&&(!SHOW_LOCK)) \ 000000C4 6E0000EF SWI +110 \ 000000C8 000050E3 CMP R0,#+0 \ 000000CC 1700001A BNE ??MyIDLECSM_onMessage_3 \ 000000D0 BC009FE5 LDR R0,??MyIDLECSM_onMessage_0+0xC ;; SHOW_LOCK \ 000000D4 000090E5 LDR R0,[R0, #+0] \ 000000D8 000050E3 CMP R0,#+0 \ 000000DC 1300001A BNE ??MyIDLECSM_onMessage_3 545 { 546 if ((CSM_root()->csm_q->csm.last!=data)||IsGuiOnTop(idlegui_id)) \ 000000E0 068100EF SWI +33030 \ 000000E4 080090E5 LDR R0,[R0, #+8] \ 000000E8 0C0090E5 LDR R0,[R0, #+12] \ 000000EC 070050E1 CMP R0,R7 \ 000000F0 0300001A BNE ??MyIDLECSM_onMessage_5 \ 000000F4 0A00A0E1 MOV R0,R10 \ 000000F8 350100EF SWI +309 \ 000000FC 000050E3 CMP R0,#+0 \ 00000100 0A00000A BEQ ??MyIDLECSM_onMessage_3 547 { 548 CSMtoTop((int)(ipc->data),-1); \ ??MyIDLECSM_onMessage_5: \ 00000104 08009BE5 LDR R0,[R11, #+8] \ 00000108 060000EA B ??MyIDLECSM_onMessage_6 549 } 550 } 551 break; 552 case IPC_XTASK_IDLE: 553 if (my_csm_id) break; \ ??MyIDLECSM_onMessage_4: \ 0000010C 000050E3 CMP R0,#+0 \ 00000110 0600001A BNE ??MyIDLECSM_onMessage_3 554 if ((!IsCalling())/*&&(!SHOW_LOCK)*/) \ 00000114 6E0000EF SWI +110 \ 00000118 000050E3 CMP R0,#+0 \ 0000011C 0300001A BNE ??MyIDLECSM_onMessage_3 555 CSMtoTop(CSM_root()->idle_id,-1); \ 00000120 068100EF SWI +33030 \ 00000124 040090E5 LDR R0,[R0, #+4] \ ??MyIDLECSM_onMessage_6: \ 00000128 0610E0E1 MVN R1,R6 \ 0000012C ........ _BLF CSMtoTop,??CSMtoTop??rA 556 break; 557 /* case IPC_XTASK_LOCK_SHOW: 558 SHOW_LOCK++; 559 break; 560 case IPC_XTASK_UNLOCK_SHOW: 561 if (SHOW_LOCK) SHOW_LOCK--; 562 break;*/ 563 } 564 } 565 } 566 } 567 if (msg->msg==MSG_INCOMMING_CALL) \ ??MyIDLECSM_onMessage_3: \ 00000130 040098E5 LDR R0,[R8, #+4] \ 00000134 600C50E3 CMP R0,#+24576 568 { 569 callhide_mode=1; \ 00000138 0100A003 MOVEQ R0,#+1 \ 0000013C 00008505 STREQ R0,[R5, #+0] 570 } 571 // #ifdef NEWSGOLD 572 // if ((msg->msg==MSG_STATE_OF_CALL)&&(msg->submess==0)&&((int)msg->data0==3)) callhide_mode=1; 573 // #else 574 //if ((msg->msg==MSG_STATE_OF_CALL)&&(msg->submess==0)&&((int)msg->data0==0)) callhide_mode=1; 575 // Говно!!!! Лечить!!! 576 // #endif 577 if (callhide_mode) \ ??MyIDLECSM_onMessage_2: \ 00000140 000095E5 LDR R0,[R5, #+0] \ 00000144 000050E3 CMP R0,#+0 \ 00000148 0C00000A BEQ ??MyIDLECSM_onMessage_7 578 { 579 if ((IsGuiOnTop(icgui_id))/*||(IsGuiOnTop(ocgui_id))*/) \ 0000014C 0900A0E1 MOV R0,R9 \ 00000150 350100EF SWI +309 \ 00000154 000050E3 CMP R0,#+0 \ 00000158 0800000A BEQ ??MyIDLECSM_onMessage_7 580 { 581 CSMtoTop(CSM_root()->idle_id,((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id); \ 0000015C 068100EF SWI +33030 \ 00000160 0070A0E1 MOV R7,R0 \ 00000164 068100EF SWI +33030 \ 00000168 081097E5 LDR R1,[R7, #+8] \ 0000016C 040090E5 LDR R0,[R0, #+4] \ 00000170 0C1091E5 LDR R1,[R1, #+12] \ 00000174 0C1091E5 LDR R1,[R1, #+12] \ 00000178 ........ _BLF CSMtoTop,??CSMtoTop??rA 582 callhide_mode=0; \ 0000017C 006085E5 STR R6,[R5, #+0] 583 } 584 } 585 return csm_result; \ ??MyIDLECSM_onMessage_7: \ 00000180 0400A0E1 MOV R0,R4 \ 00000184 F08FBDE8 POP {R4-R11,PC} ;; return \ ??MyIDLECSM_onMessage_0: \ 00000188 ........ DC32 callhide_mode \ 0000018C ........ DC32 `?` \ 00000190 ........ DC32 my_ipc_name \ 00000194 ........ DC32 SHOW_LOCK 586 } 587 \ In segment CODE, align 4, keep-with-next 588 void MyIDLECSM_onClose(CSM_RAM *data) 589 { \ MyIDLECSM_onClose: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 590 extern void seqkill(void *data, void(*next_in_seq)(CSM_RAM *), void *data_to_kill, void *seqkiller); 591 extern void *ELF_BEGIN; 592 GBS_DelTimer(&start_tmr); \ 00000008 ........ LDR R0,??DataTable20 ;; start_tmr \ 0000000C 8C0100EF SWI +396 593 RemoveKeybMsgHook((void *)my_keyhook); \ 00000010 ........ LDR R0,??DataTable16 ;; my_keyhook \ 00000014 2D0100EF SWI +301 594 seqkill(data,old_icsm_onClose,&ELF_BEGIN,SEQKILLER_ADR()); \ 00000018 9C8100EF SWI +33180 \ 0000001C ........ LDR R2,??DataTable14 ;; ELF_BEGIN \ 00000020 0030A0E1 MOV R3,R0 \ 00000024 ........ LDR R0,??DataTable17 ;; old_icsm_onClose \ 00000028 001090E5 LDR R1,[R0, #+0] \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 1040BDE8 POP {R4,LR} ;; Pop \ 00000034 ........ _BF seqkill,??seqkill??rA ;; tailcall 595 } 596 \ In segment CODE, align 4, keep-with-next 597 void DoSplices(void) 598 { 599 extern const int SHOW_DAEMONS; 600 extern int show_daemons; 601 show_daemons=SHOW_DAEMONS; \ DoSplices: \ 00000000 BC009FE5 LDR R0,??DoSplices_0 ;; show_daemons \ 00000004 BC109FE5 LDR R1,??DoSplices_0+0x4 ;; SHOW_DAEMONS \ 00000008 30402DE9 PUSH {R4,R5,LR} \ 0000000C 001091E5 LDR R1,[R1, #+0] \ 00000010 001080E5 STR R1,[R0, #+0] 602 LockSched(); \ 00000014 460100EF SWI +326 603 if (!AddKeybMsgHook_end((void *)my_keyhook)) \ 00000018 ........ LDR R0,??DataTable16 ;; my_keyhook \ 0000001C 2C0100EF SWI +300 \ 00000020 000050E3 CMP R0,#+0 \ 00000024 0600001A BNE ??DoSplices_1 604 { 605 ShowMSG(1,(int)"Невозможно зарегистрировать обработчик!"); \ 00000028 9C109FE5 LDR R1,??DoSplices_0+0x8 ;; `?idle_id); 614 memcpy(&icsmd,icsm->constr,sizeof(icsmd)); \ ??DoSplices_2: \ 00000060 74509FE5 LDR R5,??DoSplices_0+0x18 ;; icsmd \ 00000064 068100EF SWI +33030 \ 00000068 040090E5 LDR R0,[R0, #+4] \ 0000006C 080100EF SWI +264 \ 00000070 0040A0E1 MOV R4,R0 \ 00000074 081094E5 LDR R1,[R4, #+8] \ 00000078 2820A0E3 MOV R2,#+40 \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 1E0100EF SWI +286 615 old_icsm_onClose=icsmd.onClose; \ 00000084 ........ LDR R0,??DataTable17 ;; old_icsm_onClose \ 00000088 181095E5 LDR R1,[R5, #+24] \ 0000008C 001080E5 STR R1,[R0, #+0] 616 old_icsm_onMessage=icsmd.onMessage; \ 00000090 ........ LDR R0,??DataTable18 ;; old_icsm_onMessage \ 00000094 001095E5 LDR R1,[R5, #+0] \ 00000098 001080E5 STR R1,[R0, #+0] 617 icsmd.onClose=MyIDLECSM_onClose; \ 0000009C 3C009FE5 LDR R0,??DoSplices_0+0x1C ;; MyIDLECSM_onClose \ 000000A0 180085E5 STR R0,[R5, #+24] 618 icsmd.onMessage=MyIDLECSM_onMessage; \ 000000A4 38009FE5 LDR R0,??DoSplices_0+0x20 ;; MyIDLECSM_onMessage \ 000000A8 000085E5 STR R0,[R5, #+0] 619 icsm->constr=&icsmd; \ 000000AC 085084E5 STR R5,[R4, #+8] 620 } 621 under_idle=GetUnderIdleCSM(); //Ищем idle_dialog \ 000000B0 ........ BL GetUnderIdleCSM \ 000000B4 2C109FE5 LDR R1,??DoSplices_0+0x24 ;; under_idle \ 000000B8 000081E5 STR R0,[R1, #+0] 622 } 623 UnlockSched(); \ 000000BC 470100EF SWI +327 624 } \ 000000C0 3080BDE8 POP {R4,R5,PC} ;; return \ ??DoSplices_0: \ 000000C4 ........ DC32 show_daemons \ 000000C8 ........ DC32 SHOW_DAEMONS \ 000000CC ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable10: \ 00000000 ........ DC32 successed_config_filename \ In segment CODE, align 4, keep-with-next \ ??DataTable11: \ 00000000 ........ DC32 my_csm_id \ In segment CODE, align 4, keep-with-next \ ??DataTable14: \ 00000000 ........ DC32 ELF_BEGIN \ In segment CODE, align 4, keep-with-next \ ??DataTable16: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable17: \ 00000000 ........ DC32 old_icsm_onClose \ In segment CODE, align 4, keep-with-next \ ??DataTable18: \ 00000000 ........ DC32 old_icsm_onMessage \ In segment CODE, align 4, keep-with-next \ ??DataTable19: \ 00000000 ........ DC32 mode \ In segment CODE, align 4, keep-with-next \ ??DataTable20: \ 00000000 ........ DC32 start_tmr \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 2530385800 DC8 "%08X" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257300 DC8 "%s" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 585461736B20 DC8 "XTask config updated!" \ 636F6E666967 \ 207570646174 \ 65642100 \ 00000016 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `? 8 ? 3 ? 24 ?