############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 06/Aug/2008 20:10:01 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\status_change. # # c # # Command line = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\status_change. # # c -D NEWSGOLD -D ELKA -D UIN_WRITE --preprocess # # D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\Release_ELKA\L # # ist\ -lC D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\Relea # # se_ELKA\List\ -o D:\Pasha\elf\_MY_PROJECT_\naticq_mo # # d2\Release_ELKA\Obj\ -s9 --no_unroll --cpu_mode arm # # --endian little --cpu ARM926EJ-S --stack_align 4 # # --interwork -e --fpu None --dlib_config # # "D:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\LIB\dl5tpainl8n.h" -I # # "D:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\INC\" --inline_threshold=2 # # List file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\Release_ELKA\L # # ist\status_change.lst # # Object file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\Release_ELKA\O # # bj\status_change.r79 # # # # # ############################################################################## D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\status_change.c 1 /* 2 Интерфейс и функции смены своего статуса 3 */ 4 #include "../inc/swilib.h" 5 #include "../inc/cfg_items.h" 6 #include "../inc/pnglist.h" 7 #include "NatICQ.h" 8 #include "main.h" 9 #include "status_change.h" 10 #include "strings.h" 11 #include "language.h" 12 #include "print.h" 13 #include "configs.h" 14 //=============================================================================================== 15 // ELKA Compatibility 16 #pragma inline 17 static void patch_header(const HEADER_DESC* head) 18 { 19 ((HEADER_DESC *)head)->rc.x=0; 20 ((HEADER_DESC *)head)->rc.y=YDISP; 21 ((HEADER_DESC *)head)->rc.x2=ScreenW()-1; 22 ((HEADER_DESC *)head)->rc.y2=HeaderH()-1+YDISP; 23 } 24 #pragma inline 25 void patch_input(const INPUTDIA_DESC* inp) 26 { 27 ((INPUTDIA_DESC *)inp)->rc.x = 0; 28 ((INPUTDIA_DESC *)inp)->rc.y = HeaderH() + 1 + YDISP; 29 ((INPUTDIA_DESC *)inp)->rc.x2=ScreenW() - 1; 30 ((INPUTDIA_DESC *)inp)->rc.y2=ScreenH() - SoftkeyH() - 1; 31 } 32 //=============================================================================================== 33 34 extern char TEMPLATES_PATH[]; \ In segment DATA_C, align 4, align-sorted 35 static const char XS_FILE_NAME[]="\\XStatuses.txt"; \ XS_FILE_NAME: \ 00000000 5C5853746174 DC8 "\\XStatuses.txt" \ 757365732E74 \ 787400 \ 0000000F 00 DC8 0 36 37 \ In segment DATA_Z, align 4, align-sorted 38 char *XStatusText; \ XStatusText: \ 00000000 DS8 4 39 40 extern int CurrentStatus; 41 extern int CurrentXStatus; 42 extern int S_ICONS[]; 43 #ifdef NEWSGOLD 44 extern void SetIconBarHandler(); 45 #endif 46 47 extern int isAutoStatusOn; 48 extern int msg_away_timer; 49 extern void away_timer(); 50 extern int away_m; 51 extern unsigned int AUTO_ENGADE; 52 53 #pragma inline 54 static void Change_Status(int status) 55 { 56 CurrentStatus=status; 57 set_my_status(); 58 #ifdef NEWSGOLD 59 SetIconBarHandler(); 60 #endif 61 62 if(isAutoStatusOn!=12 && isAutoStatusOn==status) 63 { 64 msg_away_timer=(AUTO_ENGADE*12); 65 away_m=1; 66 away_timer(); 67 } 68 else if(status==IS_ONLINE || status==IS_FFC || status== IS_HOME) 69 { 70 msg_away_timer=0; 71 away_m=0; 72 } 73 74 SUBPROC((void*)WriteDefSettings); 75 } 76 77 #pragma inline 78 static void Change_XStatus(int xstatus) 79 { 80 CurrentXStatus=xstatus; 81 set_my_xstatus(); 82 #ifdef NEWSGOLD 83 SetIconBarHandler(); 84 #endif 85 SUBPROC((void*)WriteDefSettings); 86 } 87 88 /////////////////////////////////////////////////////////////////////////////// 89 #pragma inline 90 static unsigned int GetStatusIndexInMenu(unsigned int status) 91 { 92 switch(status) 93 { 94 case IS_ONLINE: {return 0;} 95 case IS_AWAY: {return 1;} 96 case IS_NA: {return 2;} 97 case IS_DND: {return 3;} 98 case IS_OCCUPIED: {return 4;} 99 case IS_FFC: {return 5;} 100 case IS_INVISIBLE: {return 6;} 101 case IS_DEPRESSION: return 7; 102 case IS_EVIL: return 8; 103 case IS_HOME: return 9; 104 case IS_LUNCH: return 10; 105 case IS_WORK: return 11; 106 } 107 return 0; 108 } 109 110 #pragma inline 111 static unsigned int GetStatusInMenuByPos(int pos) 112 { 113 switch(pos) 114 { 115 case 0: 116 return IS_ONLINE; 117 case 1: 118 return IS_AWAY; 119 case 2: 120 return IS_NA; 121 case 3: 122 return IS_DND; 123 case 4: 124 return IS_OCCUPIED; 125 case 5: 126 return IS_FFC; 127 case 6: 128 return IS_INVISIBLE; 129 case 7: 130 return IS_DEPRESSION; 131 case 8: 132 return IS_EVIL; 133 case 9: 134 return IS_HOME; 135 case 10: 136 return IS_LUNCH; 137 case 11: 138 return IS_WORK; 139 } 140 return IS_UNKNOWN; 141 } 142 \ In segment CODE, align 4, keep-with-next 143 static int st_onkey(void *data, GUI_MSG *msg) 144 { \ st_onkey: \ 00000000 10402DE9 PUSH {R4,LR} 145 int i; 146 if (msg->keys==0x18 || msg->keys==0x3D) \ 00000004 F210D1E1 LDRSH R1,[R1, #+2] \ 00000008 180051E3 CMP R1,#+24 \ 0000000C 3D005113 CMPNE R1,#+61 \ 00000010 4000001A BNE ??st_onkey_1 147 { 148 i=GetCurMenuItem(data); 149 Change_Status(GetStatusInMenuByPos(i)); \ 00000014 8F0100EF SWI +399 \ 00000018 0B0050E3 CMP R0,#+11 \ 0000001C 1D00008A BHI ??st_onkey_2 \ 00000020 011F8FE2 ADR R1,??st_onkey_0 \ 00000024 0010D1E7 LDRB R1,[R1, R0] \ 00000028 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??st_onkey_0: \ 0000002C 02040608 DC8 +2,+4,+6,+8 \ 00000030 0A0C0E10 DC8 +10,+12,+14,+16 \ 00000034 12141618 DC8 +18,+20,+22,+24 \ ??st_onkey_3: \ 00000038 0B40A0E3 MOV R4,#+11 \ 0000003C 160000EA B ??st_onkey_4 \ ??st_onkey_5: \ 00000040 0240A0E3 MOV R4,#+2 \ 00000044 140000EA B ??st_onkey_4 \ ??st_onkey_6: \ 00000048 0340A0E3 MOV R4,#+3 \ 0000004C 120000EA B ??st_onkey_4 \ ??st_onkey_7: \ 00000050 0540A0E3 MOV R4,#+5 \ 00000054 100000EA B ??st_onkey_4 \ ??st_onkey_8: \ 00000058 0440A0E3 MOV R4,#+4 \ 0000005C 0E0000EA B ??st_onkey_4 \ ??st_onkey_9: \ 00000060 0C40A0E3 MOV R4,#+12 \ 00000064 0C0000EA B ??st_onkey_4 \ ??st_onkey_10: \ 00000068 0140A0E3 MOV R4,#+1 \ 0000006C 0A0000EA B ??st_onkey_4 \ ??st_onkey_11: \ 00000070 0640A0E3 MOV R4,#+6 \ 00000074 080000EA B ??st_onkey_4 \ ??st_onkey_12: \ 00000078 0740A0E3 MOV R4,#+7 \ 0000007C 060000EA B ??st_onkey_4 \ ??st_onkey_13: \ 00000080 0840A0E3 MOV R4,#+8 \ 00000084 040000EA B ??st_onkey_4 \ ??st_onkey_14: \ 00000088 0940A0E3 MOV R4,#+9 \ 0000008C 020000EA B ??st_onkey_4 \ ??st_onkey_15: \ 00000090 0A40A0E3 MOV R4,#+10 \ 00000094 000000EA B ??st_onkey_4 \ ??st_onkey_2: \ 00000098 0E40A0E3 MOV R4,#+14 \ ??st_onkey_4: \ 0000009C ........ LDR R0,??DataTable22 ;; CurrentStatus \ 000000A0 004080E5 STR R4,[R0, #+0] \ 000000A4 ........ _BLF set_my_status,??set_my_status??rA \ 000000A8 ........ _BLF SetIconBarHandler,??SetIconBarHandler??rA \ 000000AC ........ LDR R0,??DataTable23 ;; isAutoStatusOn \ 000000B0 ........ LDR R1,??DataTable24 ;; away_m \ 000000B4 000090E5 LDR R0,[R0, #+0] \ 000000B8 ........ LDR R2,??DataTable25 ;; msg_away_timer \ 000000BC 0C0050E3 CMP R0,#+12 \ 000000C0 0A00000A BEQ ??st_onkey_16 \ 000000C4 040050E1 CMP R0,R4 \ 000000C8 0800001A BNE ??st_onkey_16 \ 000000CC ........ LDR R0,??DataTable26 ;; AUTO_ENGADE \ 000000D0 0C30A0E3 MOV R3,#+12 \ 000000D4 000090E5 LDR R0,[R0, #+0] \ 000000D8 930000E0 MUL R0,R3,R0 \ 000000DC 000082E5 STR R0,[R2, #+0] \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 000081E5 STR R0,[R1, #+0] \ 000000E8 ........ _BLF away_timer,??away_timer??rA \ 000000EC 050000EA B ??st_onkey_17 \ ??st_onkey_16: \ 000000F0 0B0054E3 CMP R4,#+11 \ 000000F4 0C005413 CMPNE R4,#+12 \ 000000F8 08005413 CMPNE R4,#+8 \ 000000FC 0000A003 MOVEQ R0,#+0 \ 00000100 00008205 STREQ R0,[R2, #+0] \ 00000104 00008105 STREQ R0,[R1, #+0] \ ??st_onkey_17: \ 00000108 ........ LDR R0,??DataTable27 ;; WriteDefSettings \ 0000010C 710100EF SWI +369 150 return (1); \ 00000110 0100A0E3 MOV R0,#+1 \ 00000114 1080BDE8 POP {R4,PC} 151 } 152 return (0); \ ??st_onkey_1: \ 00000118 0000A0E3 MOV R0,#+0 \ 0000011C 1080BDE8 POP {R4,PC} ;; return 153 } 154 155 /////////////////////////////////////////////////////////////////////////////// 156 157 #define STATUSES_NUM 12 158 159 char *menutexts2[STATUSES_NUM]= 160 { 161 LG_STONLINE, 162 LG_STAWAY, 163 LG_STNA, 164 LG_STDND, 165 LG_STOCCUP, 166 LG_STFFC, 167 LG_STINVIS, 168 LG_STDEPRESSION, 169 LG_STEVIL, 170 LG_STHOME, 171 LG_STLUNCH, 172 LG_STWORK 173 }; 174 \ In segment CODE, align 4, keep-with-next 175 void st_icons_set(void *data, int curitem, void *unk) 176 { \ st_icons_set: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 177 WSHDR *ws; 178 void *item=AllocMenuItem(data); \ 0000000C 970100EF SWI +407 \ 00000010 0060A0E1 MOV R6,R0 179 extern const char percent_t[]; 180 ws=AllocMenuWS(data,strlen(menutexts2[curitem])); \ 00000014 ........ LDR R0,??DataTable15 ;; _rc \ 00000018 058180E0 ADD R8,R0,R5, LSL #+2 \ 0000001C 080098E5 LDR R0,[R8, #+8] \ 00000020 1B0000EF SWI +27 \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0400A0E1 MOV R0,R4 \ 0000002C 980100EF SWI +408 181 wsprintf(ws,percent_t,menutexts2[curitem]); \ 00000030 082098E5 LDR R2,[R8, #+8] \ 00000034 ........ LDR R1,??DataTable7 ;; percent_t \ 00000038 0070A0E1 MOV R7,R0 \ 0000003C 240100EF SWI +292 182 SetMenuItemIconArray(data,item,S_ICONS+GetStatusInMenuByPos(curitem)); \ 00000040 0500A0E1 MOV R0,R5 \ 00000044 0B0050E3 CMP R0,#+11 \ 00000048 1D00008A BHI ??st_icons_set_1 \ 0000004C 011F8FE2 ADR R1,??st_icons_set_0 \ 00000050 0010D1E7 LDRB R1,[R1, R0] \ 00000054 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??st_icons_set_0: \ 00000058 02040608 DC8 +2,+4,+6,+8 \ 0000005C 0A0C0E10 DC8 +10,+12,+14,+16 \ 00000060 12141618 DC8 +18,+20,+22,+24 \ ??st_icons_set_2: \ 00000064 0B00A0E3 MOV R0,#+11 \ 00000068 160000EA B ??st_icons_set_3 \ ??st_icons_set_4: \ 0000006C 0200A0E3 MOV R0,#+2 \ 00000070 140000EA B ??st_icons_set_3 \ ??st_icons_set_5: \ 00000074 0300A0E3 MOV R0,#+3 \ 00000078 120000EA B ??st_icons_set_3 \ ??st_icons_set_6: \ 0000007C 0500A0E3 MOV R0,#+5 \ 00000080 100000EA B ??st_icons_set_3 \ ??st_icons_set_7: \ 00000084 0400A0E3 MOV R0,#+4 \ 00000088 0E0000EA B ??st_icons_set_3 \ ??st_icons_set_8: \ 0000008C 0C00A0E3 MOV R0,#+12 \ 00000090 0C0000EA B ??st_icons_set_3 \ ??st_icons_set_9: \ 00000094 0100A0E3 MOV R0,#+1 \ 00000098 0A0000EA B ??st_icons_set_3 \ ??st_icons_set_10: \ 0000009C 0600A0E3 MOV R0,#+6 \ 000000A0 080000EA B ??st_icons_set_3 \ ??st_icons_set_11: \ 000000A4 0700A0E3 MOV R0,#+7 \ 000000A8 060000EA B ??st_icons_set_3 \ ??st_icons_set_12: \ 000000AC 0800A0E3 MOV R0,#+8 \ 000000B0 040000EA B ??st_icons_set_3 \ ??st_icons_set_13: \ 000000B4 0900A0E3 MOV R0,#+9 \ 000000B8 020000EA B ??st_icons_set_3 \ ??st_icons_set_14: \ 000000BC 0A00A0E3 MOV R0,#+10 \ 000000C0 000000EA B ??st_icons_set_3 \ ??st_icons_set_1: \ 000000C4 0E00A0E3 MOV R0,#+14 \ ??st_icons_set_3: \ 000000C8 ........ LDR R1,??DataTable9 ;; S_ICONS \ 000000CC 002181E0 ADD R2,R1,R0, LSL #+2 \ 000000D0 0610A0E1 MOV R1,R6 \ 000000D4 0400A0E1 MOV R0,R4 \ 000000D8 990100EF SWI +409 183 SetMenuItemText(data, item, ws, curitem); \ 000000DC 0530A0E1 MOV R3,R5 \ 000000E0 0720A0E1 MOV R2,R7 \ 000000E4 0610A0E1 MOV R1,R6 \ 000000E8 0400A0E1 MOV R0,R4 \ 000000EC 9A0100EF SWI +410 184 } \ 000000F0 F081BDE8 POP {R4-R8,PC} ;; return 185 186 static const HEADER_DESC st_menuhdr={0,0,0,0,NULL,(int)LG_CHGSTATUS,LGP_NULL}; 187 188 static const int st_menusoftkeys[]={0,1,2}; 189 190 static const SOFTKEY_DESC st_menu_sk[]= 191 { 192 {0x0018,0x0000,(int)LG_SELECT}, 193 {0x0001,0x0000,(int)LG_BACK}, 194 {0x003D,0x0000,(int)LGP_DOIT_PIC} 195 }; 196 197 static const SOFTKEYSTAB st_menu_skt= 198 { 199 st_menu_sk,0 200 }; 201 \ In segment CODE, align 4, keep-with-next 202 static void stmenu_ghook(void *data, int cmd) 203 { \ stmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 204 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 205 { 206 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 207 } 208 } \ 00000010 0080BDE8 POP {PC} ;; return \ In segment DATA_C, align 4, align-sorted \ st_menuhdr: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 00000000.... DC32 0H, `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ st_menu_skt: \ 00000000 ........0000 DC32 st_menu_sk, 0 \ 0000 209 210 static const MENU_DESC st_tmenu= 211 { 212 8,st_onkey,stmenu_ghook,NULL, 213 st_menusoftkeys, 214 &st_menu_skt, 215 0x11,//MENU_FLAG, 216 st_icons_set, 217 NULL,//st_menuitems, 218 NULL, 219 STATUSES_NUM 220 }; 221 222 \ In segment CODE, align 4, keep-with-next 223 void DispStatusChangeMenu() 224 { 225 *((int **)(&st_menuhdr.icon))=S_ICONS+CurrentStatus; \ DispStatusChangeMenu: \ 00000000 ........ LDR R1,??DataTable9 ;; S_ICONS \ 00000004 70402DE9 PUSH {R4-R6,LR} \ 00000008 E0409FE5 LDR R4,??DispStatusChangeMenu_1 ;; st_menuhdr \ 0000000C ........ LDR R5,??DataTable22 ;; CurrentStatus 226 patch_header(&st_menuhdr); \ 00000010 0060A0E3 MOV R6,#+0 \ 00000014 000095E5 LDR R0,[R5, #+0] \ 00000018 B060C4E1 STRH R6,[R4, #+0] \ 0000001C 000181E0 ADD R0,R1,R0, LSL #+2 \ 00000020 080084E5 STR R0,[R4, #+8] \ 00000024 1800A0E3 MOV R0,#+24 \ 00000028 B200C4E1 STRH R0,[R4, #+2] \ 0000002C 888100EF SWI +33160 \ 00000030 010040E2 SUB R0,R0,#+1 \ 00000034 B400C4E1 STRH R0,[R4, #+4] \ 00000038 8A8100EF SWI +33162 \ 0000003C 170080E2 ADD R0,R0,#+23 \ 00000040 B600C4E1 STRH R0,[R4, #+6] 227 CreateMenu(0,0,&st_tmenu,&st_menuhdr,GetStatusIndexInMenu(CurrentStatus),STATUSES_NUM,0,0); \ 00000044 000095E5 LDR R0,[R5, #+0] \ 00000048 010040E2 SUB R0,R0,#+1 \ 0000004C 0B0050E3 CMP R0,#+11 \ 00000050 1A00008A BHI ??DispStatusChangeMenu_2 \ 00000054 011F8FE2 ADR R1,??DispStatusChangeMenu_0 \ 00000058 0010D1E7 LDRB R1,[R1, R0] \ 0000005C 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??DispStatusChangeMenu_0: \ 00000060 0C020408 DC8 +12,+2,+4,+8 \ 00000064 060E1012 DC8 +6,+14,+16,+18 \ 00000068 1416170A DC8 +20,+22,+23,+10 \ ??DispStatusChangeMenu_3: \ 0000006C 0160A0E3 MOV R6,#+1 \ 00000070 120000EA B ??DispStatusChangeMenu_2 \ ??DispStatusChangeMenu_4: \ 00000074 0260A0E3 MOV R6,#+2 \ 00000078 100000EA B ??DispStatusChangeMenu_2 \ ??DispStatusChangeMenu_5: \ 0000007C 0360A0E3 MOV R6,#+3 \ 00000080 0E0000EA B ??DispStatusChangeMenu_2 \ ??DispStatusChangeMenu_6: \ 00000084 0460A0E3 MOV R6,#+4 \ 00000088 0C0000EA B ??DispStatusChangeMenu_2 \ ??DispStatusChangeMenu_7: \ 0000008C 0560A0E3 MOV R6,#+5 \ 00000090 0A0000EA B ??DispStatusChangeMenu_2 \ ??DispStatusChangeMenu_8: \ 00000094 0660A0E3 MOV R6,#+6 \ 00000098 080000EA B ??DispStatusChangeMenu_2 \ ??DispStatusChangeMenu_9: \ 0000009C 0760A0E3 MOV R6,#+7 \ 000000A0 060000EA B ??DispStatusChangeMenu_2 \ ??DispStatusChangeMenu_10: \ 000000A4 0860A0E3 MOV R6,#+8 \ 000000A8 040000EA B ??DispStatusChangeMenu_2 \ ??DispStatusChangeMenu_11: \ 000000AC 0960A0E3 MOV R6,#+9 \ 000000B0 020000EA B ??DispStatusChangeMenu_2 \ ??DispStatusChangeMenu_12: \ 000000B4 0A60A0E3 MOV R6,#+10 \ 000000B8 000000EA B ??DispStatusChangeMenu_2 \ ??DispStatusChangeMenu_13: \ 000000BC 0B60A0E3 MOV R6,#+11 \ ??DispStatusChangeMenu_2: \ 000000C0 0000A0E3 MOV R0,#+0 \ 000000C4 01002DE9 PUSH {R0} \ 000000C8 01002DE9 PUSH {R0} \ 000000CC 0430A0E1 MOV R3,R4 \ 000000D0 142084E2 ADD R2,R4,#+20 \ 000000D4 0010A0E3 MOV R1,#+0 \ 000000D8 0C00A0E3 MOV R0,#+12 \ 000000DC 01002DE9 PUSH {R0} \ 000000E0 40002DE9 PUSH {R6} \ 000000E4 0000A0E3 MOV R0,#+0 \ 000000E8 520100EF SWI +338 228 } \ 000000EC 7F80BDE8 POP {R0-R6,PC} ;; return \ ??DispStatusChangeMenu_1: \ 000000F0 ........ DC32 st_menuhdr 229 230 231 232 //int startItem=0; 233 234 extern char clrBlack[]; 235 extern char clrWhite[]; 236 extern char clrRed[]; 237 extern char transparent[]; 238 extern char blue[]; 239 extern const int clfont; 240 extern IMGHDR *icons[]; 241 //char clrRed2[]={0xFF,0x00,0x00,0x15}; 242 int _itemFromDisp;//кол-во на экране \ In segment DATA_Z, align 4, align-sorted 243 int _totalItems;//общее количество итемов \ _totalItems: \ 00000000 DS8 4 \ In segment DATA_I, align 4, align-sorted 244 int _curpos=0;//позичия курсора 245 int _curpage=1;//текущая страница 246 247 248 extern void DrwImage(IMGHDR *img, int x, int y, char *pen, char *brush); 249 RECT _rc;// \ _rc: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ menutexts2: \ 00000008 DS8 48 \ 00000038 REQUIRE `?` \ _itemFromDisp: \ 00000038 DS8 4 \ 0000003C REQUIRE `?` \ _curpos: \ 0000003C DS8 4 \ 00000040 REQUIRE `?` \ _curpage: \ 00000040 DS8 4 \ 00000044 REQUIRE `?` 250 #define _font 108 251 \ In segment CODE, align 4, keep-with-next 252 static void SC_DrawList() 253 { \ SC_DrawList: \ 00000000 B04F2DE9 PUSH {R4,R5,R7-R11,LR} 254 int font_y = FontH(_font)+1; 255 int scr_h=ScreenH()-1; 256 int scr_w=ScreenW()-1; 257 // _itemFromDisp = sdiv(font_y,scr_h-CLIST_Y1-FontH(_font)-2)-1; 258 259 LockSched(); 260 261 int i=0; 262 int start_y=0; 263 int start_x=_rc.x+2; \ 00000004 ........ LDR R8,??DataTable15 ;; _rc \ 00000008 10D04DE2 SUB SP,SP,#+16 264 265 char *s=malloc(128); \ 0000000C 94A29FE5 LDR R10,??SC_DrawList_2+0x4 ;; icons \ 00000010 6C00A0E3 MOV R0,#+108 \ 00000014 ........ _BLF FontH,??FontH??rA \ 00000018 010080E2 ADD R0,R0,#+1 \ 0000001C 08008DE5 STR R0,[SP, #+8] \ 00000020 898100EF SWI +33161 \ 00000024 888100EF SWI +33160 \ 00000028 460100EF SWI +326 \ 0000002C F010D8E1 LDRSH R1,[R8, #+0] \ 00000030 0070A0E3 MOV R7,#+0 \ 00000034 8000A0E3 MOV R0,#+128 \ 00000038 021081E2 ADD R1,R1,#+2 \ 0000003C 0C108DE5 STR R1,[SP, #+12] \ 00000040 140000EF SWI +20 \ 00000044 0090A0E1 MOV R9,R0 266 RECT rc; 267 while(iw,rc.y-1,s,0,_font,1,0,0,0,rc.x2-5);//item name \ 000001AC 0700A0E1 MOV R0,R7 \ 000001B0 04D08DE2 ADD SP,SP,#+4 \ 000001B4 0B0050E3 CMP R0,#+11 \ 000001B8 1B00008A BHI ??SC_DrawList_19 \ 000001BC 011F8FE2 ADR R1,??SC_DrawList_1 \ 000001C0 0010D1E7 LDRB R1,[R1, R0] \ 000001C4 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??SC_DrawList_1: \ 000001C8 02040608 DC8 +2,+4,+6,+8 \ 000001CC 0A0C0E10 DC8 +10,+12,+14,+16 \ 000001D0 12191416 DC8 +18,+25,+20,+22 \ ??SC_DrawList_20: \ 000001D4 0B40A0E3 MOV R4,#+11 \ 000001D8 140000EA B ??SC_DrawList_21 \ ??SC_DrawList_22: \ 000001DC 0240A0E3 MOV R4,#+2 \ 000001E0 120000EA B ??SC_DrawList_21 \ ??SC_DrawList_23: \ 000001E4 0340A0E3 MOV R4,#+3 \ 000001E8 100000EA B ??SC_DrawList_21 \ ??SC_DrawList_24: \ 000001EC 0540A0E3 MOV R4,#+5 \ 000001F0 0E0000EA B ??SC_DrawList_21 \ ??SC_DrawList_25: \ 000001F4 0440A0E3 MOV R4,#+4 \ 000001F8 0C0000EA B ??SC_DrawList_21 \ ??SC_DrawList_26: \ 000001FC 0C40A0E3 MOV R4,#+12 \ 00000200 0A0000EA B ??SC_DrawList_21 \ ??SC_DrawList_27: \ 00000204 0140A0E3 MOV R4,#+1 \ 00000208 080000EA B ??SC_DrawList_21 \ ??SC_DrawList_28: \ 0000020C 0640A0E3 MOV R4,#+6 \ 00000210 060000EA B ??SC_DrawList_21 \ ??SC_DrawList_29: \ 00000214 0740A0E3 MOV R4,#+7 \ 00000218 040000EA B ??SC_DrawList_21 \ ??SC_DrawList_30: \ 0000021C 0940A0E3 MOV R4,#+9 \ 00000220 020000EA B ??SC_DrawList_21 \ ??SC_DrawList_31: \ 00000224 0A40A0E3 MOV R4,#+10 \ 00000228 000000EA B ??SC_DrawList_21 \ ??SC_DrawList_19: \ 0000022C 0E40A0E3 MOV R4,#+14 \ ??SC_DrawList_21: \ 00000230 F400DDE1 LDRSH R0,[SP, #+4] \ 00000234 0030A0E3 MOV R3,#+0 \ 00000238 0920A0E1 MOV R2,R9 \ 0000023C 050040E2 SUB R0,R0,#+5 \ 00000240 01002DE9 PUSH {R0} 280 i++; \ 00000244 017087E2 ADD R7,R7,#+1 \ 00000248 0000A0E3 MOV R0,#+0 \ 0000024C 01002DE9 PUSH {R0} \ 00000250 01002DE9 PUSH {R0} \ 00000254 01002DE9 PUSH {R0} \ 00000258 0100A0E3 MOV R0,#+1 \ 0000025C 01002DE9 PUSH {R0} \ 00000260 6C00A0E3 MOV R0,#+108 \ 00000264 01002DE9 PUSH {R0} \ 00000268 FA01DDE1 LDRSH R0,[SP, #+26] \ 0000026C 011040E2 SUB R1,R0,#+1 \ 00000270 04019AE7 LDR R0,[R10, +R4, LSL #+2] \ 00000274 F841DDE1 LDRSH R4,[SP, #+24] \ 00000278 B000D0E1 LDRH R0,[R0, #+0] \ 0000027C 000084E0 ADD R0,R4,R0 \ 00000280 050080E2 ADD R0,R0,#+5 \ 00000284 ........ _BLF PrintText,??PrintText??rA 281 if(i >= STATUSES_NUM) break; \ 00000288 0C0057E3 CMP R7,#+12 \ 0000028C 18D08DE2 ADD SP,SP,#+24 \ 00000290 6CFFFFBA BLT ??SC_DrawList_3 282 } 283 mfree(s); \ 00000294 0900A0E1 MOV R0,R9 \ 00000298 150000EF SWI +21 284 UnlockSched(); \ 0000029C 470100EF SWI +327 285 } \ 000002A0 BF8FBDE8 POP {R0-R5,R7-R11,PC} \ ??SC_DrawList_2: \ 000002A4 25730000 DC8 "%s",+0 \ 000002A8 ........ DC32 icons 286 287 // Управление курсором \ In segment CODE, align 4, keep-with-next 288 void SC_MoveUp(int i) 289 { 290 //if(_curpos > _itemFromDisp){ _curpos--; } 291 // else 292 if(_curpos > 0){ _curpos--; /*if(startItem>0) startItem--; */} \ SC_MoveUp: \ 00000000 ........ LDR R0,??DataTable15 ;; _rc \ 00000004 3C1090E5 LDR R1,[R0, #+60] \ 00000008 010051E3 CMP R1,#+1 \ 0000000C 011041A2 SUBGE R1,R1,#+1 293 else 294 { 295 _curpos=STATUSES_NUM-1; \ 00000010 0B10A0B3 MOVLT R1,#+11 \ 00000014 3C1080E5 STR R1,[R0, #+60] 296 //startItem=STATUSES_NUM-_itemFromDisp; 297 } 298 } \ 00000018 1EFF2FE1 BX LR ;; return 299 300 \ In segment CODE, align 4, keep-with-next 301 void SC_MoveDown(int i) 302 { 303 //if(_curpos <_itemFromDisp - 5) _curpos++; 304 //else 305 if(_curpos < STATUSES_NUM - 1 ){/*if(startItem < STATUSES_NUM-mm_itemFromDisp) startItem++;*/ _curpos++; } \ SC_MoveDown: \ 00000000 ........ LDR R0,??DataTable15 ;; _rc \ 00000004 3C1090E5 LDR R1,[R0, #+60] \ 00000008 0B0051E3 CMP R1,#+11 \ 0000000C 011081B2 ADDLT R1,R1,#+1 306 else 307 { 308 _curpos=0; \ 00000010 0010A0A3 MOVGE R1,#+0 \ 00000014 3C1080E5 STR R1,[R0, #+60] 309 //startItem=0; 310 } 311 } \ 00000018 1EFF2FE1 BX LR ;; return 312 313 extern IMGHDR screen; 314 extern void DrawSoftKeys(char *right,char *left); 315 extern void DoScreen(); \ In segment DATA_Z, align 4, align-sorted 316 IMGHDR *mmscreen; \ mmscreen: \ 00000000 DS8 4 317 extern void DrawContactList(); \ In segment CODE, align 4, keep-with-next 318 static void SC_OnRedraw(MAIN_GUI *data) 319 { \ SC_OnRedraw: \ 00000000 00402DE9 PUSH {LR} 320 // ClearScreen(); 321 LockSched(); \ 00000004 460100EF SWI +326 322 // DrawContactList(); 323 // DrwImage(&screen,0,0,0,0); 324 // DrwImage(mmscreen,0,0,0,0); 325 DrawRoundedFrame(_rc.x,_rc.y-2,_rc.x2,_rc.y2,0,0,0,clrWhite,clrBlack);//"\xF5\x22\x19\x64" \ 00000008 ........ LDR R1,??DataTable16 ;; clrBlack \ 0000000C ........ LDR R0,??DataTable20 ;; _rc \ 00000010 02002DE9 PUSH {R1} \ 00000014 ........ LDR R1,??DataTable18 ;; clrWhite \ 00000018 02002DE9 PUSH {R1} \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 02002DE9 PUSH {R1} \ 00000024 02002DE9 PUSH {R1} \ 00000028 02002DE9 PUSH {R1} \ 0000002C F630D0E1 LDRSH R3,[R0, #+6] \ 00000030 F420D0E1 LDRSH R2,[R0, #+4] \ 00000034 F210D0E1 LDRSH R1,[R0, #+2] \ 00000038 F000D0E1 LDRSH R0,[R0, #+0] \ 0000003C 021041E2 SUB R1,R1,#+2 \ 00000040 500100EF SWI +336 326 DrawSoftKeys(LG_SELECT,LG_CLOSE); \ 00000044 ........ LDR R0,??DataTable19 ;; `?` \ 00000048 0010A0E1 MOV R1,R0 \ 0000004C 100080E2 ADD R0,R0,#+16 \ 00000050 ........ _BLF DrawSoftKeys,??DrawSoftKeys??rA 327 UnlockSched(); \ 00000054 470100EF SWI +327 328 SC_DrawList(); \ 00000058 ........ BL SC_DrawList 329 } \ 0000005C 14D08DE2 ADD SP,SP,#+20 \ 00000060 0080BDE8 POP {PC} ;; return 330 \ In segment CODE, align 4, keep-with-next 331 static void SC_onCreate(MAIN_GUI *data, void *(*malloc_adr)(int)) 332 { \ SC_onCreate: \ 00000000 70402DE9 PUSH {R4-R6,LR} 333 #ifdef ELKA 334 DisableIconBar(1); 335 #endif 336 //DoScreen(); 337 _rc.x=30; \ 00000004 ........ LDR R5,??DataTable20 ;; _rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0200EF SWI +571 \ 00000014 1E00A0E3 MOV R0,#+30 \ 00000018 B000C5E1 STRH R0,[R5, #+0] 338 _rc.y=YDISP+2; \ 0000001C 1A00A0E3 MOV R0,#+26 \ 00000020 B200C5E1 STRH R0,[R5, #+2] 339 _rc.x2=ScreenW()-53; \ 00000024 888100EF SWI +33160 \ 00000028 350040E2 SUB R0,R0,#+53 \ 0000002C B400C5E1 STRH R0,[R5, #+4] 340 _rc.y2=YDISP+16+(FontH(_font)*STATUSES_NUM); \ 00000030 6C00A0E3 MOV R0,#+108 \ 00000034 ........ _BLF FontH,??FontH??rA \ 00000038 0C10A0E3 MOV R1,#+12 \ 0000003C 910000E0 MUL R0,R1,R0 341 _curpos=GetStatusIndexInMenu(CurrentStatus); \ 00000040 0160A0E3 MOV R6,#+1 \ 00000044 280080E2 ADD R0,R0,#+40 \ 00000048 B600C5E1 STRH R0,[R5, #+6] \ 0000004C ........ LDR R0,??DataTable22 ;; CurrentStatus \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 010040E2 SUB R0,R0,#+1 \ 00000058 0B0050E3 CMP R0,#+11 \ 0000005C 0500008A BHI ??SC_onCreate_1 \ 00000060 011F8FE2 ADR R1,??SC_onCreate_0 \ 00000064 0010D1E7 LDRB R1,[R1, R0] \ 00000068 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??SC_onCreate_0: \ 0000006C 0E04060A DC8 +14,+4,+6,+10 \ 00000070 08101214 DC8 +8,+16,+18,+20 \ 00000074 1618020C DC8 +22,+24,+2,+12 \ ??SC_onCreate_1: \ 00000078 0000A0E3 MOV R0,#+0 \ 0000007C 140000EA B ??SC_onCreate_2 \ ??SC_onCreate_3: \ 00000080 0100A0E3 MOV R0,#+1 \ 00000084 120000EA B ??SC_onCreate_2 \ ??SC_onCreate_4: \ 00000088 0200A0E3 MOV R0,#+2 \ 0000008C 100000EA B ??SC_onCreate_2 \ ??SC_onCreate_5: \ 00000090 0300A0E3 MOV R0,#+3 \ 00000094 0E0000EA B ??SC_onCreate_2 \ ??SC_onCreate_6: \ 00000098 0400A0E3 MOV R0,#+4 \ 0000009C 0C0000EA B ??SC_onCreate_2 \ ??SC_onCreate_7: \ 000000A0 0500A0E3 MOV R0,#+5 \ 000000A4 0A0000EA B ??SC_onCreate_2 \ ??SC_onCreate_8: \ 000000A8 0600A0E3 MOV R0,#+6 \ 000000AC 080000EA B ??SC_onCreate_2 \ ??SC_onCreate_9: \ 000000B0 0700A0E3 MOV R0,#+7 \ 000000B4 060000EA B ??SC_onCreate_2 \ ??SC_onCreate_10: \ 000000B8 0800A0E3 MOV R0,#+8 \ 000000BC 040000EA B ??SC_onCreate_2 \ ??SC_onCreate_11: \ 000000C0 0900A0E3 MOV R0,#+9 \ 000000C4 020000EA B ??SC_onCreate_2 \ ??SC_onCreate_12: \ 000000C8 0A00A0E3 MOV R0,#+10 \ 000000CC 000000EA B ??SC_onCreate_2 \ ??SC_onCreate_13: \ 000000D0 0B00A0E3 MOV R0,#+11 \ ??SC_onCreate_2: \ 000000D4 3C0085E5 STR R0,[R5, #+60] 342 SetCanvasFlag(1); \ 000000D8 0100A0E3 MOV R0,#+1 \ 000000DC ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 343 data->gui.state=1; \ 000000E0 0C60C4E5 STRB R6,[R4, #+12] 344 } \ 000000E4 7080BDE8 POP {R4-R6,PC} ;; return 345 \ In segment CODE, align 4, keep-with-next 346 static void SC_onClose(MAIN_GUI *data, void (*mfree_adr)(void *)) 347 { 348 //if(mmscreen) mfree(mmscreen->bitmap); 349 data->gui.state=0; \ SC_onClose: \ 00000000 0010A0E3 MOV R1,#+0 \ 00000004 0C10C0E5 STRB R1,[R0, #+12] 350 } \ 00000008 1EFF2FE1 BX LR ;; return 351 \ In segment CODE, align 4, keep-with-next 352 static void SC_onFocus(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) 353 { \ SC_onFocus: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 354 #ifdef ELKA 355 DisableIconBar(1); \ 00000008 0100A0E3 MOV R0,#+1 \ 0000000C 3B0200EF SWI +571 356 #endif 357 data->gui.state=2; \ 00000010 0200A0E3 MOV R0,#+2 \ 00000014 0C00C4E5 STRB R0,[R4, #+12] 358 DisableIDLETMR(); \ 00000018 7F0100EF SWI +383 359 } \ 0000001C 1080BDE8 POP {R4,PC} ;; return 360 \ In segment CODE, align 4, keep-with-next 361 static void SC_onUnfocus(MAIN_GUI *data, void (*mfree_adr)(void *)) 362 { 363 if (data->gui.state!=2) return; \ SC_onUnfocus: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 364 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 365 } \ 00000010 1EFF2FE1 BX LR ;; return 366 \ In segment CODE, align 4, keep-with-next 367 static int SC_OnKey(MAIN_GUI *data, GUI_MSG *msg) 368 { \ SC_OnKey: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0140A0E1 MOV R4,R1 369 DirectRedrawGUI(); \ 00000008 3F0100EF SWI +319 370 int k=msg->gbsmsg->submess; \ 0000000C 044094E5 LDR R4,[R4, #+4] 371 372 if (msg->gbsmsg->msg==KEY_DOWN || msg->gbsmsg->msg==LONG_PRESS) \ 00000010 9360A0E3 MOV R6,#+147 \ 00000014 040094E5 LDR R0,[R4, #+4] \ 00000018 085094E5 LDR R5,[R4, #+8] \ 0000001C 406F86E3 ORR R6,R6,#0x100 \ 00000020 060050E1 CMP R0,R6 \ 00000024 02108612 ADDNE R1,R6,#+2 \ 00000028 01005011 CMPNE R0,R1 \ 0000002C 0B00001A BNE ??SC_OnKey_1 373 { 374 switch(k) \ 00000030 040055E2 SUBS R0,R5,#+4 \ 00000034 08005012 SUBSNE R0,R0,#+8 \ 00000038 5200000A BEQ ??SC_OnKey_2 \ 0000003C 2F0050E2 SUBS R0,R0,#+47 \ 00000040 0400000A BEQ ??SC_OnKey_3 \ 00000044 010050E2 SUBS R0,R0,#+1 \ 00000048 1700000A BEQ ??SC_OnKey_4 \ 0000004C 010050E2 SUBS R0,R0,#+1 \ 00000050 4C00000A BEQ ??SC_OnKey_2 \ 00000054 010000EA B ??SC_OnKey_1 375 { 376 case UP_BUTTON: SC_MoveUp(0); break; \ ??SC_OnKey_3: \ 00000058 0000A0E3 MOV R0,#+0 \ 0000005C ........ BL SC_MoveUp 377 case DOWN_BUTTON: SC_MoveDown(0); break; 378 case LEFT_BUTTON: case RIGHT_SOFT:case RED_BUTTON: return (1); 379 // case ENTER_BUTTON: case LEFT_SOFT: ((void (*)(void))(menuprocs[mm_curpos]))(); REDRAW(); break; 380 } 381 } 382 383 if (msg->gbsmsg->msg==KEY_DOWN) \ ??SC_OnKey_1: \ 00000060 040094E5 LDR R0,[R4, #+4] \ 00000064 060050E1 CMP R0,R6 \ 00000068 4800001A BNE ??SC_OnKey_5 384 { 385 switch(k) \ 0000006C 015055E2 SUBS R5,R5,#+1 \ 00000070 19505512 SUBSNE R5,R5,#+25 \ 00000074 24505512 SUBSNE R5,R5,#+36 \ 00000078 4400001A BNE ??SC_OnKey_5 386 { 387 case ENTER_BUTTON: case LEFT_SOFT:case RIGHT_BUTTON: 388 Change_Status(GetStatusInMenuByPos(_curpos)); \ 0000007C 14019FE5 LDR R0,??SC_OnKey_6 ;; _rc + 60 \ 00000080 000090E5 LDR R0,[R0, #+0] \ 00000084 0B0050E3 CMP R0,#+11 \ 00000088 2000008A BHI ??SC_OnKey_7 \ 0000008C 011F8FE2 ADR R1,??SC_OnKey_0 \ 00000090 0010D1E7 LDRB R1,[R1, R0] \ 00000094 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??SC_OnKey_0: \ 00000098 0207090B DC8 +2,+7,+9,+11 \ 0000009C 0D0F1113 DC8 +13,+15,+17,+19 \ 000000A0 1517191B DC8 +21,+23,+25,+27 \ ??SC_OnKey_8: \ 000000A4 0B40A0E3 MOV R4,#+11 \ 000000A8 190000EA B ??SC_OnKey_9 \ ??SC_OnKey_4: \ 000000AC 0000A0E3 MOV R0,#+0 \ 000000B0 ........ BL SC_MoveDown \ 000000B4 E9FFFFEA B ??SC_OnKey_1 \ ??SC_OnKey_10: \ 000000B8 0240A0E3 MOV R4,#+2 \ 000000BC 140000EA B ??SC_OnKey_9 \ ??SC_OnKey_11: \ 000000C0 0340A0E3 MOV R4,#+3 \ 000000C4 120000EA B ??SC_OnKey_9 \ ??SC_OnKey_12: \ 000000C8 0540A0E3 MOV R4,#+5 \ 000000CC 100000EA B ??SC_OnKey_9 \ ??SC_OnKey_13: \ 000000D0 0440A0E3 MOV R4,#+4 \ 000000D4 0E0000EA B ??SC_OnKey_9 \ ??SC_OnKey_14: \ 000000D8 0C40A0E3 MOV R4,#+12 \ 000000DC 0C0000EA B ??SC_OnKey_9 \ ??SC_OnKey_15: \ 000000E0 0140A0E3 MOV R4,#+1 \ 000000E4 0A0000EA B ??SC_OnKey_9 \ ??SC_OnKey_16: \ 000000E8 0640A0E3 MOV R4,#+6 \ 000000EC 080000EA B ??SC_OnKey_9 \ ??SC_OnKey_17: \ 000000F0 0740A0E3 MOV R4,#+7 \ 000000F4 060000EA B ??SC_OnKey_9 \ ??SC_OnKey_18: \ 000000F8 0840A0E3 MOV R4,#+8 \ 000000FC 040000EA B ??SC_OnKey_9 \ ??SC_OnKey_19: \ 00000100 0940A0E3 MOV R4,#+9 \ 00000104 020000EA B ??SC_OnKey_9 \ ??SC_OnKey_20: \ 00000108 0A40A0E3 MOV R4,#+10 \ 0000010C 000000EA B ??SC_OnKey_9 \ ??SC_OnKey_7: \ 00000110 0E40A0E3 MOV R4,#+14 \ ??SC_OnKey_9: \ 00000114 ........ LDR R0,??DataTable22 ;; CurrentStatus \ 00000118 004080E5 STR R4,[R0, #+0] \ 0000011C ........ _BLF set_my_status,??set_my_status??rA \ 00000120 ........ _BLF SetIconBarHandler,??SetIconBarHandler??rA \ 00000124 ........ LDR R0,??DataTable23 ;; isAutoStatusOn \ 00000128 ........ LDR R1,??DataTable24 ;; away_m \ 0000012C 000090E5 LDR R0,[R0, #+0] \ 00000130 ........ LDR R2,??DataTable25 ;; msg_away_timer \ 00000134 0C0050E3 CMP R0,#+12 \ 00000138 0A00000A BEQ ??SC_OnKey_21 \ 0000013C 040050E1 CMP R0,R4 \ 00000140 0800001A BNE ??SC_OnKey_21 \ 00000144 ........ LDR R0,??DataTable26 ;; AUTO_ENGADE \ 00000148 0C30A0E3 MOV R3,#+12 \ 0000014C 000090E5 LDR R0,[R0, #+0] \ 00000150 930000E0 MUL R0,R3,R0 \ 00000154 000082E5 STR R0,[R2, #+0] \ 00000158 0100A0E3 MOV R0,#+1 \ 0000015C 000081E5 STR R0,[R1, #+0] \ 00000160 ........ _BLF away_timer,??away_timer??rA \ 00000164 050000EA B ??SC_OnKey_22 \ ??SC_OnKey_21: \ 00000168 0B0054E3 CMP R4,#+11 \ 0000016C 0C005413 CMPNE R4,#+12 \ 00000170 08005413 CMPNE R4,#+8 \ 00000174 0000A003 MOVEQ R0,#+0 \ 00000178 00008205 STREQ R0,[R2, #+0] \ 0000017C 00008105 STREQ R0,[R1, #+0] \ ??SC_OnKey_22: \ 00000180 ........ LDR R0,??DataTable27 ;; WriteDefSettings \ 00000184 710100EF SWI +369 389 return (1); \ ??SC_OnKey_2: \ 00000188 0100A0E3 MOV R0,#+1 \ 0000018C 7080BDE8 POP {R4-R6,PC} 390 } 391 } 392 393 return(0); \ ??SC_OnKey_5: \ 00000190 0000A0E3 MOV R0,#+0 \ 00000194 7080BDE8 POP {R4-R6,PC} ;; return \ ??SC_OnKey_6: \ 00000198 ........ DC32 _rc + 60 394 } 395 396 extern void kill_data(void *p, void (*func_p)(void *)); 397 \ In segment CODE, align 4, keep-with-next 398 int SC_method8(void){return(0);} \ SC_method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return \ In segment CODE, align 4, keep-with-next 399 int SC_method9(void){return(0);} \ SC_method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 400 \ In segment DATA_C, align 4, align-sorted 401 const void * const gui_methods_SC[11]={ \ gui_methods_SC: \ 00000000 ............ DC32 SC_OnRedraw, SC_onCreate, SC_onClose, SC_onFocus, SC_onUnfocus \ ............ \ ............ \ .... \ 00000014 ........0000 DC32 SC_OnKey, 0H, kill_data, SC_method8, SC_method9, 0H \ 0000........ \ ............ \ ....00000000 402 (void *)SC_OnRedraw, 403 (void *)SC_onCreate, 404 (void *)SC_onClose, 405 (void *)SC_onFocus, 406 (void *)SC_onUnfocus, 407 (void *)SC_OnKey, 408 0, 409 (void *)kill_data, 410 (void *)SC_method8, 411 (void *)SC_method9, 412 0 413 }; 414 415 const RECT SC_Canvas={0,0,0,0}; \ SC_Canvas: \ 0000002C 000000000000 DC16 0, 0, 0, 0 \ 0000 416 \ In segment CODE, align 4, keep-with-next 417 void CreateSCMenu() 418 { \ CreateSCMenu: \ 00000000 10402DE9 PUSH {R4,LR} 419 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000004 4000A0E3 MOV R0,#+64 \ 00000008 140000EF SWI +20 \ 0000000C 0040A0E1 MOV R4,R0 420 zeromem(main_gui,sizeof(MAIN_GUI)); \ 00000010 4010A0E3 MOV R1,#+64 \ 00000014 1D0100EF SWI +285 421 main_gui->gui.canvas=(void *)(&SC_Canvas); \ 00000018 1C009FE5 LDR R0,??CreateSCMenu_0 ;; gui_methods_SC \ 0000001C 2C1080E2 ADD R1,R0,#+44 \ 00000020 001084E5 STR R1,[R4, #+0] 422 main_gui->gui.methods=(void *)gui_methods_SC; \ 00000024 040084E5 STR R0,[R4, #+4] 423 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000028 158000EF SWI +32789 \ 0000002C 200084E5 STR R0,[R4, #+32] 424 CreateGUI(main_gui); \ 00000030 0400A0E1 MOV R0,R4 \ 00000034 370100EF SWI +311 425 } \ 00000038 1080BDE8 POP {R4,PC} ;; return \ ??CreateSCMenu_0: \ 0000003C ........ DC32 gui_methods_SC 426 427 428 //-------------------------------- 429 // XStatuses 430 //-------------------------------- 431 extern DYNPNGICONLIST *XStatusesImgList; 432 extern int *XStatusesIconArray; 433 extern volatile int total_xstatuses; 434 \ In segment DATA_I, align 4, align-sorted 435 SOFTKEY_DESC edit_x_sk[]= \ edit_x_sk: \ 00000000 DS8 24 \ 00000018 REQUIRE `?` 436 { 437 {0x0018,0x0000,(int)"Save!"}, 438 {0x0001,0x0000,(int)""}, 439 {0x003D,0x0000,(int)LGP_DOIT_PIC} 440 }; 441 \ In segment DATA_I, align 4, align-sorted 442 SOFTKEYSTAB edit_x_skt= \ edit_x_skt: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` 443 { 444 edit_x_sk,0 445 }; 446 \ In segment CODE, align 4, keep-with-next 447 void edit_xstatus_locret(void){} \ edit_xstatus_locret: \ 00000000 1EFF2FE1 BX LR ;; return 448 \ In segment CODE, align 4, keep-with-next 449 void ReplaceStr(char **str, int start_prev, int prev_len, char *next, int next_len) 450 { \ ReplaceStr: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 24809DE5 LDR R8,[SP, #+36] \ 00000008 0040A0E1 MOV R4,R0 451 char *d, *buf; 452 char *s=*str; \ 0000000C 009094E5 LDR R9,[R4, #+0] \ 00000010 0150A0E1 MOV R5,R1 \ 00000014 0260A0E1 MOV R6,R2 \ 00000018 0370A0E1 MOV R7,R3 453 if (s) \ 0000001C 000059E3 CMP R9,#+0 \ 00000020 F08FBD08 POPEQ {R4-R11,PC} 454 { 455 d=buf=malloc(strlen(s)+next_len-prev_len+1); \ 00000024 0900A0E1 MOV R0,R9 \ 00000028 1B0000EF SWI +27 \ 0000002C 000088E0 ADD R0,R8,R0 \ 00000030 060040E0 SUB R0,R0,R6 \ 00000034 010080E2 ADD R0,R0,#+1 \ 00000038 140000EF SWI +20 \ 0000003C 00B0A0E1 MOV R11,R0 \ 00000040 0BA0A0E1 MOV R10,R11 456 if (start_prev) \ 00000044 000055E3 CMP R5,#+0 \ 00000048 0300000A BEQ ??ReplaceStr_0 457 { 458 memcpy(buf, s, start_prev); \ 0000004C 0520A0E1 MOV R2,R5 \ 00000050 0910A0E1 MOV R1,R9 \ 00000054 1E0100EF SWI +286 459 buf+=start_prev; \ 00000058 0BB085E0 ADD R11,R5,R11 460 } 461 if (next_len) \ ??ReplaceStr_0: \ 0000005C 000058E3 CMP R8,#+0 \ 00000060 0400000A BEQ ??ReplaceStr_1 462 { 463 memcpy(buf,next,next_len); \ 00000064 0820A0E1 MOV R2,R8 \ 00000068 0710A0E1 MOV R1,R7 \ 0000006C 0B00A0E1 MOV R0,R11 \ 00000070 1E0100EF SWI +286 464 buf+=next_len; \ 00000074 0BB088E0 ADD R11,R8,R11 465 } 466 strcpy(buf, s+start_prev+prev_len); \ ??ReplaceStr_1: \ 00000078 090085E0 ADD R0,R5,R9 \ 0000007C 001086E0 ADD R1,R6,R0 \ 00000080 0B00A0E1 MOV R0,R11 \ 00000084 1A0000EF SWI +26 467 mfree(s); \ 00000088 0900A0E1 MOV R0,R9 \ 0000008C 150000EF SWI +21 468 *str=d; \ 00000090 00A084E5 STR R10,[R4, #+0] 469 } 470 } \ 00000094 F08FBDE8 POP {R4-R11,PC} ;; return 471 \ In segment CODE, align 4, keep-with-next 472 int edit_xstatus_onkey(GUI *data, GUI_MSG *msg) 473 { \ edit_xstatus_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 B8D04DE2 SUB SP,SP,#+184 \ 00000008 0040A0E1 MOV R4,R0 474 WSHDR *ws; 475 char *s, *d, tmp[132]; 476 int cur_x_st; 477 int len, l; 478 int is_any_change=0; 479 if (msg->keys==0xFFF) \ 0000000C F200D1E1 LDRSH R0,[R1, #+2] \ 00000010 0060A0E3 MOV R6,#+0 \ 00000014 FF10A0E3 MOV R1,#+255 \ 00000018 F01E81E3 ORR R1,R1,#0xF00 \ 0000001C 010050E1 CMP R0,R1 \ 00000020 9400001A BNE ??edit_xstatus_onkey_0 480 { 481 cur_x_st=(int)EDIT_GetUserPointer(data); \ 00000024 0400A0E1 MOV R0,R4 \ 00000028 DF0100EF SWI +479 \ 0000002C 0050A0E1 MOV R5,R0 482 EDITCONTROL ec; 483 ExtractEditControl(data,2,&ec); // Комментарий \ 00000030 08208DE2 ADD R2,SP,#+8 \ 00000034 0210A0E3 MOV R1,#+2 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 690100EF SWI +361 484 ws=ec.pWS; \ 00000040 30809DE5 LDR R8,[SP, #+48] 485 486 s=GetXStatusStr(cur_x_st*3,&len); \ 00000044 851085E0 ADD R1,R5,R5, LSL #+1 487 d=tmp; 488 489 if (s) \ 00000048 ........ LDR R5,??DataTable60 ;; XStatusText \ 0000004C 04108DE5 STR R1,[SP, #+4] \ 00000050 04009DE5 LDR R0,[SP, #+4] \ 00000054 0D10A0E1 MOV R1,SP \ 00000058 ........ BL GetXStatusStr \ 0000005C 0090B0E1 MOVS R9,R0 \ 00000060 34A08DE2 ADD R10,SP,#+52 \ 00000064 2100000A BEQ ??edit_xstatus_onkey_1 490 { 491 l=ws->wsbody[0]; \ 00000068 000098E5 LDR R0,[R8, #+0] 492 for (int i=0; iwsbody[i+1]); \ ??edit_xstatus_onkey_4: \ 00000080 000098E5 LDR R0,[R8, #+0] \ 00000084 8B0080E0 ADD R0,R0,R11, LSL #+1 \ 00000088 B200D0E1 LDRH R0,[R0, #+2] 495 } \ 0000008C 01B08BE2 ADD R11,R11,#+1 \ 00000090 ........ _BLF char16to8,??char16to8??rA \ 00000094 ........ STRB R0,[R10], #+1 \ ??edit_xstatus_onkey_2: \ 00000098 07005BE1 CMP R11,R7 \ 0000009C F7FFFFBA BLT ??edit_xstatus_onkey_4 496 *d=0; \ ??edit_xstatus_onkey_3: \ 000000A0 0000A0E3 MOV R0,#+0 \ 000000A4 0000CAE5 STRB R0,[R10, #+0] 497 if (len!=l || strncmp(s,tmp,len)) \ 000000A8 00009DE5 LDR R0,[SP, #+0] \ 000000AC 070050E1 CMP R0,R7 \ 000000B0 0500001A BNE ??edit_xstatus_onkey_5 \ 000000B4 0020A0E1 MOV R2,R0 \ 000000B8 34108DE2 ADD R1,SP,#+52 \ 000000BC 0900A0E1 MOV R0,R9 \ 000000C0 150100EF SWI +277 \ 000000C4 000050E3 CMP R0,#+0 \ 000000C8 0800000A BEQ ??edit_xstatus_onkey_1 498 { 499 ReplaceStr(&XStatusText,s-XStatusText,len,tmp,l); \ ??edit_xstatus_onkey_5: \ 000000CC 80002DE9 PUSH {R7} \ 000000D0 000095E5 LDR R0,[R5, #+0] \ 000000D4 04209DE5 LDR R2,[SP, #+4] \ 000000D8 38308DE2 ADD R3,SP,#+56 \ 000000DC 001049E0 SUB R1,R9,R0 \ 000000E0 0500A0E1 MOV R0,R5 \ 000000E4 ........ BL ReplaceStr 500 is_any_change=1; \ 000000E8 0160A0E3 MOV R6,#+1 \ 000000EC 04D08DE2 ADD SP,SP,#+4 501 } 502 } 503 504 ExtractEditControl(data,4,&ec); // Короткий икс статус \ ??edit_xstatus_onkey_1: \ 000000F0 08208DE2 ADD R2,SP,#+8 \ 000000F4 0410A0E3 MOV R1,#+4 \ 000000F8 0400A0E1 MOV R0,R4 \ 000000FC 690100EF SWI +361 505 ws=ec.pWS; 506 507 s=GetXStatusStr(cur_x_st*3+1,&len); \ 00000100 04009DE5 LDR R0,[SP, #+4] \ 00000104 30809DE5 LDR R8,[SP, #+48] \ 00000108 0D10A0E1 MOV R1,SP \ 0000010C 010080E2 ADD R0,R0,#+1 \ 00000110 ........ BL GetXStatusStr \ 00000114 0090B0E1 MOVS R9,R0 508 d=tmp; \ 00000118 34A08DE2 ADD R10,SP,#+52 509 510 if (s) \ 0000011C 2100000A BEQ ??edit_xstatus_onkey_6 511 { 512 l=ws->wsbody[0]; \ 00000120 000098E5 LDR R0,[R8, #+0] 513 for (int i=0; iwsbody[i+1]); \ ??edit_xstatus_onkey_9: \ 00000138 000098E5 LDR R0,[R8, #+0] \ 0000013C 8B0080E0 ADD R0,R0,R11, LSL #+1 \ 00000140 B200D0E1 LDRH R0,[R0, #+2] 516 } \ 00000144 01B08BE2 ADD R11,R11,#+1 \ 00000148 ........ _BLF char16to8,??char16to8??rA \ 0000014C ........ STRB R0,[R10], #+1 \ ??edit_xstatus_onkey_7: \ 00000150 07005BE1 CMP R11,R7 \ 00000154 F7FFFFBA BLT ??edit_xstatus_onkey_9 517 *d=0; \ ??edit_xstatus_onkey_8: \ 00000158 0000A0E3 MOV R0,#+0 \ 0000015C 0000CAE5 STRB R0,[R10, #+0] 518 if (len!=l || strncmp(s,tmp,len)) \ 00000160 00009DE5 LDR R0,[SP, #+0] \ 00000164 070050E1 CMP R0,R7 \ 00000168 0500001A BNE ??edit_xstatus_onkey_10 \ 0000016C 0020A0E1 MOV R2,R0 \ 00000170 34108DE2 ADD R1,SP,#+52 \ 00000174 0900A0E1 MOV R0,R9 \ 00000178 150100EF SWI +277 \ 0000017C 000050E3 CMP R0,#+0 \ 00000180 0800000A BEQ ??edit_xstatus_onkey_6 519 { 520 ReplaceStr(&XStatusText,s-XStatusText,len,tmp,l); \ ??edit_xstatus_onkey_10: \ 00000184 80002DE9 PUSH {R7} \ 00000188 000095E5 LDR R0,[R5, #+0] \ 0000018C 04209DE5 LDR R2,[SP, #+4] \ 00000190 38308DE2 ADD R3,SP,#+56 \ 00000194 001049E0 SUB R1,R9,R0 \ 00000198 0500A0E1 MOV R0,R5 \ 0000019C ........ BL ReplaceStr 521 is_any_change=1; \ 000001A0 0160A0E3 MOV R6,#+1 \ 000001A4 04D08DE2 ADD SP,SP,#+4 522 } 523 } 524 525 ExtractEditControl(data,6,&ec); // Длинный икс статус \ ??edit_xstatus_onkey_6: \ 000001A8 08208DE2 ADD R2,SP,#+8 \ 000001AC 0610A0E3 MOV R1,#+6 \ 000001B0 0400A0E1 MOV R0,R4 \ 000001B4 690100EF SWI +361 526 ws=ec.pWS; 527 528 s=GetXStatusStr(cur_x_st*3+2,&len); \ 000001B8 04009DE5 LDR R0,[SP, #+4] \ 000001BC 30409DE5 LDR R4,[SP, #+48] \ 000001C0 0D10A0E1 MOV R1,SP \ 000001C4 020080E2 ADD R0,R0,#+2 \ 000001C8 ........ BL GetXStatusStr \ 000001CC 0080B0E1 MOVS R8,R0 529 d=tmp; \ 000001D0 34908DE2 ADD R9,SP,#+52 530 531 if (s) \ 000001D4 2100000A BEQ ??edit_xstatus_onkey_11 532 { 533 l=ws->wsbody[0]; \ 000001D8 000094E5 LDR R0,[R4, #+0] 534 for (int i=0; iwsbody[i+1]); \ ??edit_xstatus_onkey_14: \ 000001F0 000094E5 LDR R0,[R4, #+0] \ 000001F4 8A0080E0 ADD R0,R0,R10, LSL #+1 \ 000001F8 B200D0E1 LDRH R0,[R0, #+2] 537 } \ 000001FC 01A08AE2 ADD R10,R10,#+1 \ 00000200 ........ _BLF char16to8,??char16to8??rA \ 00000204 ........ STRB R0,[R9], #+1 \ ??edit_xstatus_onkey_12: \ 00000208 07005AE1 CMP R10,R7 \ 0000020C F7FFFFBA BLT ??edit_xstatus_onkey_14 538 *d=0; \ ??edit_xstatus_onkey_13: \ 00000210 0000A0E3 MOV R0,#+0 \ 00000214 0000C9E5 STRB R0,[R9, #+0] 539 if (len!=l || strncmp(s,tmp,len)) \ 00000218 00009DE5 LDR R0,[SP, #+0] \ 0000021C 070050E1 CMP R0,R7 \ 00000220 0500001A BNE ??edit_xstatus_onkey_15 \ 00000224 0020A0E1 MOV R2,R0 \ 00000228 34108DE2 ADD R1,SP,#+52 \ 0000022C 0800A0E1 MOV R0,R8 \ 00000230 150100EF SWI +277 \ 00000234 000050E3 CMP R0,#+0 \ 00000238 0800000A BEQ ??edit_xstatus_onkey_11 540 { 541 ReplaceStr(&XStatusText,s-XStatusText,len,tmp,l); \ ??edit_xstatus_onkey_15: \ 0000023C 80002DE9 PUSH {R7} \ 00000240 000095E5 LDR R0,[R5, #+0] \ 00000244 04209DE5 LDR R2,[SP, #+4] \ 00000248 38308DE2 ADD R3,SP,#+56 \ 0000024C 001048E0 SUB R1,R8,R0 \ 00000250 0500A0E1 MOV R0,R5 \ 00000254 ........ BL ReplaceStr 542 is_any_change=1; \ 00000258 04D08DE2 ADD SP,SP,#+4 \ 0000025C 010000EA B ??edit_xstatus_onkey_16 543 } 544 } 545 546 if (is_any_change) \ ??edit_xstatus_onkey_11: \ 00000260 000056E3 CMP R6,#+0 \ 00000264 0000000A BEQ ??edit_xstatus_onkey_17 547 { 548 SaveXStatusText(); \ ??edit_xstatus_onkey_16: \ 00000268 ........ BL SaveXStatusText 549 } 550 return (1); \ ??edit_xstatus_onkey_17: \ 0000026C 0100A0E3 MOV R0,#+1 \ 00000270 B8D08DE2 ADD SP,SP,#+184 \ 00000274 F08FBDE8 POP {R4-R11,PC} 551 } 552 return (0); \ ??edit_xstatus_onkey_0: \ 00000278 0000A0E3 MOV R0,#+0 \ 0000027C B8D08DE2 ADD SP,SP,#+184 \ 00000280 F08FBDE8 POP {R4-R11,PC} ;; return 553 } 554 \ In segment CODE, align 4, keep-with-next 555 void edit_xstatus_ghook(GUI *data, int cmd) 556 { \ edit_xstatus_ghook: \ 00000000 00402DE9 PUSH {LR} 557 static SOFTKEY_DESC sk={0x0FFF,0x0000,(int)"Save!"}; 558 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0100001A BNE ??edit_xstatus_ghook_0 559 { 560 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 \ 00000010 0080BDE8 POP {PC} 561 } 562 if (cmd==7) \ ??edit_xstatus_ghook_0: \ 00000014 070051E3 CMP R1,#+7 \ 00000018 0080BD18 POPNE {PC} 563 { 564 SetSoftKey(data,&sk,SET_SOFT_KEY_N); \ 0000001C 08109FE5 LDR R1,??edit_xstatus_ghook_1 ;; ??sk \ 00000020 0020A0E3 MOV R2,#+0 \ 00000024 680100EF SWI +360 565 } 566 } \ 00000028 0080BDE8 POP {PC} ;; return \ ??edit_xstatus_ghook_1: \ 0000002C ........ DC32 ??sk \ In segment DATA_I, align 4, align-sorted \ ??sk: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` 567 \ In segment DATA_I, align 4, align-sorted 568 HEADER_DESC edit_xstatus_hdr={0,0,0,0,NULL,(int)"X-Статус",LGP_NULL}; 569 570 INPUTDIA_DESC edit_xstatus_desc = \ edit_xstatus_desc: \ 00000000 DS8 56 \ 00000038 REQUIRE `?` \ edit_xstatus_hdr: \ 00000038 DS8 20 \ 0000004C REQUIRE `?` 571 { 572 1, 573 edit_xstatus_onkey, 574 edit_xstatus_ghook, 575 (void *)edit_xstatus_locret, 576 0, 577 &edit_x_skt, 578 {0,0,0,0}, 579 FONT_SMALL, 580 100, 581 101, 582 0, 583 // 0x00000001 - Выровнять по правому краю 584 // 0x00000002 - Выровнять по центру 585 // 0x00000004 - Инверсия знакомест 586 // 0x00000008 - UnderLine 587 // 0x00000020 - Не переносить слова 588 // 0x00000200 - bold 589 0, 590 // 0x00000002 - ReadOnly 591 // 0x00000004 - Не двигается курсор 592 // 0x40000000 - Поменять местами софт-кнопки 593 0x40000000 594 }; 595 596 \ In segment CODE, align 4, keep-with-next 597 static void EditXStatus(int xstatus) 598 { \ EditXStatus: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 599 void *ma=malloc_adr(); 600 void *eq; 601 EDITCONTROL ec; 602 char *s; 603 int len; 604 int c; 605 606 eq=AllocEQueue(ma,mfree_adr()); 607 WSHDR *ews=AllocWS(128); 608 ascii2ws(ews,"Комментарий:"); // Коментарий \ 00000004 24839FE5 LDR R8,??EditXStatus_0 ;; `?wsbody[0]); \ 00000048 000097E5 LDR R0,[R7, #+0] \ 0000004C 0730A0E1 MOV R3,R7 \ 00000050 B000D0E1 LDRH R0,[R0, #+0] \ 00000054 4020A0E3 MOV R2,#+64 \ 00000058 0110A0E3 MOV R1,#+1 \ 0000005C 01002DE9 PUSH {R0} 611 AddEditControlToEditQend(eq,&ec,ma); //1 612 613 CutWSTR(ews,0); 614 s=GetXStatusStr(xstatus*3, &len); \ 00000060 849084E0 ADD R9,R4,R4, LSL #+1 \ 00000064 08008DE2 ADD R0,SP,#+8 \ 00000068 650100EF SWI +357 \ 0000006C 0520A0E1 MOV R2,R5 \ 00000070 08108DE2 ADD R1,SP,#+8 \ 00000074 0600A0E1 MOV R0,R6 \ 00000078 660100EF SWI +358 \ 0000007C 0010A0E3 MOV R1,#+0 \ 00000080 0700A0E1 MOV R0,R7 \ 00000084 260100EF SWI +294 \ 00000088 04108DE2 ADD R1,SP,#+4 \ 0000008C 0900A0E1 MOV R0,R9 \ 00000090 ........ BL GetXStatusStr \ 00000094 00A0B0E1 MOVS R10,R0 615 if (s) \ 00000098 04D08DE2 ADD SP,SP,#+4 \ 0000009C 0C00000A BEQ ??EditXStatus_1 \ 000000A0 060000EA B ??EditXStatus_2 616 { 617 while((c=*s++) && len) 618 { 619 wsAppendChar(ews,char8to16(c)); \ ??EditXStatus_3: \ 000000A4 ........ _BLF char8to16,??char8to16??rA \ 000000A8 0010A0E1 MOV R1,R0 \ 000000AC 0700A0E1 MOV R0,R7 \ 000000B0 1C0000EF SWI +28 620 len--; \ 000000B4 00109DE5 LDR R1,[SP, #+0] \ 000000B8 011041E2 SUB R1,R1,#+1 \ 000000BC 00108DE5 STR R1,[SP, #+0] 621 } \ ??EditXStatus_2: \ 000000C0 ........ LDRB R0,[R10], #+1 \ 000000C4 000050E3 CMP R0,#+0 \ 000000C8 00109D15 LDRNE R1,[SP, #+0] \ 000000CC 00005113 CMPNE R1,#+0 \ 000000D0 F3FFFF1A BNE ??EditXStatus_3 622 } 623 PrepareEditControl(&ec); \ ??EditXStatus_1: \ 000000D4 04008DE2 ADD R0,SP,#+4 \ 000000D8 640100EF SWI +356 624 ConstructEditControl(&ec,ECT_NORMAL_TEXT,0x40,ews,20); \ 000000DC 1400A0E3 MOV R0,#+20 \ 000000E0 01002DE9 PUSH {R0} \ 000000E4 0730A0E1 MOV R3,R7 \ 000000E8 4020A0E3 MOV R2,#+64 \ 000000EC 0310A0E3 MOV R1,#+3 \ 000000F0 08008DE2 ADD R0,SP,#+8 \ 000000F4 650100EF SWI +357 625 AddEditControlToEditQend(eq,&ec,ma); //2 \ 000000F8 0520A0E1 MOV R2,R5 \ 000000FC 08108DE2 ADD R1,SP,#+8 \ 00000100 0600A0E1 MOV R0,R6 \ 00000104 660100EF SWI +358 626 627 ascii2ws(ews,"Short X:"); // Короткий Икс Статус \ 00000108 101088E2 ADD R1,R8,#+16 \ 0000010C 0700A0E1 MOV R0,R7 \ 00000110 ........ _BLF ascii2ws,??ascii2ws??rA 628 PrepareEditControl(&ec); \ 00000114 08008DE2 ADD R0,SP,#+8 \ 00000118 640100EF SWI +356 629 ConstructEditControl(&ec,ECT_HEADER,0x40,ews,ews->wsbody[0]); \ 0000011C 000097E5 LDR R0,[R7, #+0] \ 00000120 0730A0E1 MOV R3,R7 \ 00000124 B000D0E1 LDRH R0,[R0, #+0] \ 00000128 4020A0E3 MOV R2,#+64 \ 0000012C 0110A0E3 MOV R1,#+1 \ 00000130 01002DE9 PUSH {R0} \ 00000134 0C008DE2 ADD R0,SP,#+12 \ 00000138 650100EF SWI +357 630 AddEditControlToEditQend(eq,&ec,ma); //3 \ 0000013C 0520A0E1 MOV R2,R5 \ 00000140 0C108DE2 ADD R1,SP,#+12 \ 00000144 0600A0E1 MOV R0,R6 \ 00000148 660100EF SWI +358 631 632 CutWSTR(ews,0); \ 0000014C 0010A0E3 MOV R1,#+0 \ 00000150 0700A0E1 MOV R0,R7 \ 00000154 260100EF SWI +294 633 s=GetXStatusStr(xstatus*3+1, &len); \ 00000158 08108DE2 ADD R1,SP,#+8 \ 0000015C 010089E2 ADD R0,R9,#+1 \ 00000160 ........ BL GetXStatusStr \ 00000164 00A0B0E1 MOVS R10,R0 634 if (s) \ 00000168 08D08DE2 ADD SP,SP,#+8 \ 0000016C 0C00000A BEQ ??EditXStatus_4 \ 00000170 060000EA B ??EditXStatus_5 635 { 636 while((c=*s++) && len) 637 { 638 wsAppendChar(ews,char8to16(c)); \ ??EditXStatus_6: \ 00000174 ........ _BLF char8to16,??char8to16??rA \ 00000178 0010A0E1 MOV R1,R0 \ 0000017C 0700A0E1 MOV R0,R7 \ 00000180 1C0000EF SWI +28 639 len--; \ 00000184 00109DE5 LDR R1,[SP, #+0] \ 00000188 011041E2 SUB R1,R1,#+1 \ 0000018C 00108DE5 STR R1,[SP, #+0] 640 } \ ??EditXStatus_5: \ 00000190 ........ LDRB R0,[R10], #+1 \ 00000194 000050E3 CMP R0,#+0 \ 00000198 00109D15 LDRNE R1,[SP, #+0] \ 0000019C 00005113 CMPNE R1,#+0 \ 000001A0 F3FFFF1A BNE ??EditXStatus_6 641 } 642 PrepareEditControl(&ec); \ ??EditXStatus_4: \ 000001A4 04008DE2 ADD R0,SP,#+4 \ 000001A8 640100EF SWI +356 643 ConstructEditControl(&ec,ECT_NORMAL_TEXT,0x40,ews,128); \ 000001AC 8000A0E3 MOV R0,#+128 \ 000001B0 01002DE9 PUSH {R0} \ 000001B4 0730A0E1 MOV R3,R7 \ 000001B8 4020A0E3 MOV R2,#+64 \ 000001BC 0310A0E3 MOV R1,#+3 \ 000001C0 08008DE2 ADD R0,SP,#+8 \ 000001C4 650100EF SWI +357 644 AddEditControlToEditQend(eq,&ec,ma); //4 \ 000001C8 0520A0E1 MOV R2,R5 \ 000001CC 08108DE2 ADD R1,SP,#+8 \ 000001D0 0600A0E1 MOV R0,R6 \ 000001D4 660100EF SWI +358 645 646 ascii2ws(ews,"Large X:"); // Длинный Икс Статус \ 000001D8 1C1088E2 ADD R1,R8,#+28 \ 000001DC 0700A0E1 MOV R0,R7 \ 000001E0 ........ _BLF ascii2ws,??ascii2ws??rA 647 PrepareEditControl(&ec); \ 000001E4 08008DE2 ADD R0,SP,#+8 \ 000001E8 640100EF SWI +356 648 ConstructEditControl(&ec,ECT_HEADER,0x40,ews,ews->wsbody[0]); \ 000001EC 000097E5 LDR R0,[R7, #+0] \ 000001F0 0730A0E1 MOV R3,R7 \ 000001F4 B000D0E1 LDRH R0,[R0, #+0] \ 000001F8 4020A0E3 MOV R2,#+64 \ 000001FC 0110A0E3 MOV R1,#+1 \ 00000200 01002DE9 PUSH {R0} \ 00000204 0C008DE2 ADD R0,SP,#+12 \ 00000208 650100EF SWI +357 649 AddEditControlToEditQend(eq,&ec,ma); //5 \ 0000020C 0520A0E1 MOV R2,R5 \ 00000210 0C108DE2 ADD R1,SP,#+12 \ 00000214 0600A0E1 MOV R0,R6 \ 00000218 660100EF SWI +358 650 651 CutWSTR(ews,0); \ 0000021C 0010A0E3 MOV R1,#+0 \ 00000220 0700A0E1 MOV R0,R7 \ 00000224 260100EF SWI +294 652 s=GetXStatusStr(xstatus*3+2, &len); \ 00000228 08108DE2 ADD R1,SP,#+8 \ 0000022C 020089E2 ADD R0,R9,#+2 \ 00000230 ........ BL GetXStatusStr \ 00000234 0080B0E1 MOVS R8,R0 653 if (s) \ 00000238 08D08DE2 ADD SP,SP,#+8 \ 0000023C 0C00000A BEQ ??EditXStatus_7 \ 00000240 060000EA B ??EditXStatus_8 654 { 655 while((c=*s++) && len) 656 { 657 wsAppendChar(ews,char8to16(c)); \ ??EditXStatus_9: \ 00000244 ........ _BLF char8to16,??char8to16??rA \ 00000248 0010A0E1 MOV R1,R0 \ 0000024C 0700A0E1 MOV R0,R7 \ 00000250 1C0000EF SWI +28 658 len--; \ 00000254 00109DE5 LDR R1,[SP, #+0] \ 00000258 011041E2 SUB R1,R1,#+1 \ 0000025C 00108DE5 STR R1,[SP, #+0] 659 } \ ??EditXStatus_8: \ 00000260 ........ LDRB R0,[R8], #+1 \ 00000264 000050E3 CMP R0,#+0 \ 00000268 00109D15 LDRNE R1,[SP, #+0] \ 0000026C 00005113 CMPNE R1,#+0 \ 00000270 F3FFFF1A BNE ??EditXStatus_9 660 } 661 PrepareEditControl(&ec); \ ??EditXStatus_7: \ 00000274 04008DE2 ADD R0,SP,#+4 \ 00000278 640100EF SWI +356 662 ConstructEditControl(&ec,ECT_NORMAL_TEXT,0x40,ews,128); \ 0000027C 8000A0E3 MOV R0,#+128 \ 00000280 01002DE9 PUSH {R0} \ 00000284 0730A0E1 MOV R3,R7 \ 00000288 4020A0E3 MOV R2,#+64 \ 0000028C 0310A0E3 MOV R1,#+3 \ 00000290 08008DE2 ADD R0,SP,#+8 \ 00000294 650100EF SWI +357 663 AddEditControlToEditQend(eq,&ec,ma); //6 \ 00000298 0520A0E1 MOV R2,R5 664 665 FreeWS(ews); 666 patch_header(&edit_xstatus_hdr); \ 0000029C 90509FE5 LDR R5,??EditXStatus_0+0x4 ;; edit_xstatus_desc \ 000002A0 08108DE2 ADD R1,SP,#+8 \ 000002A4 0600A0E1 MOV R0,R6 \ 000002A8 660100EF SWI +358 \ 000002AC 0700A0E1 MOV R0,R7 \ 000002B0 290100EF SWI +297 \ 000002B4 0070A0E3 MOV R7,#+0 \ 000002B8 B873C5E1 STRH R7,[R5, #+56] \ 000002BC 1800A0E3 MOV R0,#+24 \ 000002C0 BA03C5E1 STRH R0,[R5, #+58] \ 000002C4 888100EF SWI +33160 \ 000002C8 010040E2 SUB R0,R0,#+1 \ 000002CC BC03C5E1 STRH R0,[R5, #+60] \ 000002D0 8A8100EF SWI +33162 \ 000002D4 170080E2 ADD R0,R0,#+23 \ 000002D8 BE03C5E1 STRH R0,[R5, #+62] 667 patch_input(&edit_xstatus_desc); \ 000002DC B871C5E1 STRH R7,[R5, #+24] \ 000002E0 8A8100EF SWI +33162 \ 000002E4 190080E2 ADD R0,R0,#+25 \ 000002E8 BA01C5E1 STRH R0,[R5, #+26] \ 000002EC 888100EF SWI +33160 \ 000002F0 010040E2 SUB R0,R0,#+1 \ 000002F4 BC01C5E1 STRH R0,[R5, #+28] \ 000002F8 898100EF SWI +33161 \ 000002FC 0070A0E1 MOV R7,R0 \ 00000300 8B8100EF SWI +33163 \ 00000304 000047E0 SUB R0,R7,R0 \ 00000308 010040E2 SUB R0,R0,#+1 \ 0000030C BE01C5E1 STRH R0,[R5, #+30] 668 CreateInputTextDialog(&edit_xstatus_desc,&edit_xstatus_hdr,eq,1,(void *)xstatus); \ 00000310 10002DE9 PUSH {R4} \ 00000314 0130A0E3 MOV R3,#+1 \ 00000318 0620A0E1 MOV R2,R6 \ 0000031C 381085E2 ADD R1,R5,#+56 \ 00000320 0500A0E1 MOV R0,R5 \ 00000324 670100EF SWI +359 669 } \ 00000328 38D08DE2 ADD SP,SP,#+56 \ 0000032C F087BDE8 POP {R4-R10,PC} ;; return \ ??EditXStatus_0: \ 00000330 ........ DC32 `?keys==0x18) \ 00000010 F200D4E1 LDRSH R0,[R4, #+2] \ 00000014 180050E3 CMP R0,#+24 \ 00000018 0300001A BNE ??xst_onkey_0 695 { 696 EditXStatus(i); \ 0000001C 0500A0E1 MOV R0,R5 \ 00000020 ........ BL EditXStatus 697 return(0); \ 00000024 0000A0E3 MOV R0,#+0 \ 00000028 3080BDE8 POP {R4,R5,PC} 698 } 699 if (msg->keys==0x3D) \ ??xst_onkey_0: \ 0000002C 3D0050E3 CMP R0,#+61 \ 00000030 3B00001A BNE ??xst_onkey_1 700 { 701 702 Change_XStatus(i); \ 00000034 ........ LDR R0,??DataTable82 ;; CurrentXStatus \ 00000038 005080E5 STR R5,[R0, #+0] \ 0000003C ........ _BLF set_my_xstatus,??set_my_xstatus??rA \ 00000040 ........ _BLF SetIconBarHandler,??SetIconBarHandler??rA \ 00000044 ........ LDR R0,??DataTable83 ;; WriteDefSettings \ 00000048 710100EF SWI +369 703 if(ind_set_xstatus) \ 0000004C ........ LDR R0,??DataTable84 ;; ind_set_xstatus \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 000050E3 CMP R0,#+0 \ 00000058 2F00000A BEQ ??xst_onkey_2 704 { 705 Is_Vibra_Enabled=def_set[i].vibra_status; \ 0000005C ........ LDR R0,??DataTable85 ;; def_set \ 00000060 0B10A0E3 MOV R1,#+11 \ 00000064 910520E0 MLA R0,R1,R5,R0 \ 00000068 ........ LDR R1,??DataTable86 ;; Is_Vibra_Enabled \ 0000006C 0020D0E5 LDRB R2,[R0, #+0] \ 00000070 012002E2 AND R2,R2,#0x1 \ 00000074 002081E5 STR R2,[R1, #+0] 706 #ifdef NEWSGOLD 707 Is_Id3tag_Enabled=def_set[i].Id3tag_status; \ 00000078 0920D0E5 LDRB R2,[R0, #+9] \ 0000007C ........ LDR R1,??DataTable87 ;; Is_Id3tag_Enabled \ 00000080 002081E5 STR R2,[R1, #+0] 708 #endif 709 Is_Sounds_Enabled=def_set[i].sound_status; \ 00000084 0020D0E5 LDRB R2,[R0, #+0] \ 00000088 ........ LDR R1,??DataTable88 ;; Is_Sounds_Enabled \ 0000008C 022002E2 AND R2,R2,#0x2 \ 00000090 A220A0E1 LSR R2,R2,#+1 \ 00000094 002081E5 STR R2,[R1, #+0] 710 #ifdef ELKA 711 Is_SLI_On=def_set[i].sli_state; \ 00000098 0320D0E5 LDRB R2,[R0, #+3] \ 0000009C ........ LDR R1,??DataTable89 ;; Is_SLI_On \ 000000A0 012002E2 AND R2,R2,#0x1 \ 000000A4 002081E5 STR R2,[R1, #+0] 712 #endif 713 Is_SMARTCPU_On=def_set[i].smartcpu_state; \ 000000A8 0420D0E5 LDRB R2,[R0, #+4] \ 000000AC ........ LDR R1,??DataTable90 ;; Is_SMARTCPU_On \ 000000B0 002081E5 STR R2,[R1, #+0] 714 Is_INC_On=def_set[i].inc_state; \ 000000B4 0510D0E5 LDRB R1,[R0, #+5] \ 000000B8 ........ LDR R2,??DataTable91 ;; Is_INC_On \ 000000BC 013001E2 AND R3,R1,#0x1 \ 000000C0 003082E5 STR R3,[R2, #+0] 715 Is_ILU_On=def_set[i].ilu_state; \ 000000C4 ........ LDR R2,??DataTable92 ;; Is_ILU_On \ 000000C8 021001E2 AND R1,R1,#0x2 \ 000000CC A110A0E1 LSR R1,R1,#+1 \ 000000D0 001082E5 STR R1,[R2, #+0] 716 Is_PING_On=def_set[i].ping_state; \ 000000D4 0720D0E5 LDRB R2,[R0, #+7] \ 000000D8 ........ LDR R1,??DataTable93 ;; Is_PING_On \ 000000DC 002081E5 STR R2,[R1, #+0] 717 Is_UPTIME_On=def_set[i].uptime_state; \ 000000E0 0820D0E5 LDRB R2,[R0, #+8] \ 000000E4 ........ LDR R1,??DataTable94 ;; Is_UPTIME_On \ 000000E8 002081E5 STR R2,[R1, #+0] 718 Is_Show_Offline=def_set[i].off_contacts; \ 000000EC 0120D0E5 LDRB R2,[R0, #+1] \ 000000F0 ........ LDR R1,??DataTable95 ;; Is_Show_Offline \ 000000F4 002081E5 STR R2,[R1, #+0] 719 Is_Show_Groups=def_set[i].show_groups; \ 000000F8 0220D0E5 LDRB R2,[R0, #+2] \ 000000FC ........ LDR R1,??DataTable96 ;; Is_Show_Groups \ 00000100 002081E5 STR R2,[R1, #+0] 720 Is_Double_Vibra_On=def_set[i].remind_state; \ 00000104 0620D0E5 LDRB R2,[R0, #+6] \ 00000108 ........ LDR R1,??DataTable97 ;; Is_Double_Vibra_On \ 0000010C 002081E5 STR R2,[R1, #+0] 721 Show_XTX=def_set[i].isXTX;//Показывать хстатус или время он лайн \ 00000110 0A00D0E5 LDRB R0,[R0, #+10] \ 00000114 ........ LDR R1,??DataTable98 ;; Show_XTX \ 00000118 000081E5 STR R0,[R1, #+0] 722 } 723 return(1); \ ??xst_onkey_2: \ 0000011C 0100A0E3 MOV R0,#+1 \ 00000120 3080BDE8 POP {R4,R5,PC} 724 } 725 return (0); \ ??xst_onkey_1: \ 00000124 0000A0E3 MOV R0,#+0 \ 00000128 3080BDE8 POP {R4,R5,PC} ;; return 726 } 727 \ In segment CODE, align 4, keep-with-next 728 static void xst_ghook(void *data, int cmd) 729 { \ xst_ghook: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0140A0E1 MOV R4,R1 730 PNGTOP_DESC *pltop=PNG_TOP(); \ 00000008 B98100EF SWI +33209 731 if (cmd==9) \ 0000000C 090054E3 CMP R4,#+9 732 { 733 pltop->dyn_pltop=NULL; \ 00000010 0010A003 MOVEQ R1,#+0 \ 00000014 08108005 STREQ R1,[R0, #+8] \ 00000018 1080BD08 POPEQ {R4,PC} 734 } 735 if (cmd==0x0A) \ 0000001C 0A0054E3 CMP R4,#+10 \ 00000020 1080BD18 POPNE {R4,PC} 736 { 737 pltop->dyn_pltop=XStatusesImgList; \ 00000024 ........ LDR R1,??DataTable63 ;; XStatusesImgList \ 00000028 001091E5 LDR R1,[R1, #+0] \ 0000002C 081080E5 STR R1,[R0, #+8] 738 DisableIDLETMR(); \ 00000030 7F0100EF SWI +383 739 //Загрузка текста при фокусе 740 LoadXStatusText(); \ 00000034 ........ BL LoadXStatusText 741 } 742 } \ 00000038 1080BDE8 POP {R4,PC} ;; return 743 \ In segment CODE, align 4, keep-with-next 744 static void xst_itemh(void *data, int curitem, void *unk) 745 { \ xst_itemh: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 746 void *item=AllocMLMenuItem(data); 747 WSHDR ws1loc, *ws1, *ws2; 748 unsigned short num[128]; 749 WSHDR ws3loc, *ws3, *ws4; 750 unsigned short num3[128]; 751 char ss[128]; 752 char *s; 753 int l; 754 extern const char percent_t[]; 755 756 ws1=CreateLocalWS(&ws1loc,num,128); 757 ws3=CreateLocalWS(&ws3loc,num3,128); 758 759 if (s=GetXStatusStr(curitem*3+1,&l)) \ 00000004 ........ LDR R9,??DataTable47 ;; percent_t \ 00000008 ........ LDR R10,??DataTable66 ;; `?` \ 0000000C ACDF4DE2 SUB SP,SP,#+688 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 190200EF SWI +537 \ 0000001C 0060A0E1 MOV R6,R0 \ 00000020 8020A0E3 MOV R2,#+128 \ 00000024 08108DE2 ADD R1,SP,#+8 \ 00000028 A20F8DE2 ADD R0,SP,#+648 \ 0000002C 270100EF SWI +295 \ 00000030 0070A0E1 MOV R7,R0 \ 00000034 8020A0E3 MOV R2,#+128 \ 00000038 421F8DE2 ADD R1,SP,#+264 \ 0000003C A70F8DE2 ADD R0,SP,#+668 \ 00000040 270100EF SWI +295 \ 00000044 0080A0E1 MOV R8,R0 \ 00000048 85B085E0 ADD R11,R5,R5, LSL #+1 \ 0000004C 0D10A0E1 MOV R1,SP \ 00000050 01008BE2 ADD R0,R11,#+1 \ 00000054 ........ BL GetXStatusStr \ 00000058 04008DE5 STR R0,[SP, #+4] \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 0E00000A BEQ ??xst_itemh_0 760 { 761 memset(ss,0,128); \ 00000064 8020A0E3 MOV R2,#+128 \ 00000068 0010A0E3 MOV R1,#+0 \ 0000006C 820F8DE2 ADD R0,SP,#+520 \ 00000070 BB0000EF SWI +187 762 if (l>127) l=127; \ 00000074 00009DE5 LDR R0,[SP, #+0] \ 00000078 800050E3 CMP R0,#+128 \ 0000007C 7F10A0A3 MOVGE R1,#+127 \ 00000080 00108DA5 STRGE R1,[SP, #+0] 763 strncpy(ss,s,l); \ 00000084 00209DE5 LDR R2,[SP, #+0] \ 00000088 04109DE5 LDR R1,[SP, #+4] \ 0000008C 820F8DE2 ADD R0,SP,#+520 \ 00000090 160100EF SWI +278 764 wsprintf(ws1,percent_t,ss); \ 00000094 822F8DE2 ADD R2,SP,#+520 \ 00000098 0910A0E1 MOV R1,R9 \ 0000009C 010000EA B ??xst_itemh_1 765 } 766 else 767 { 768 wsprintf(ws1,"Short XS %d",curitem); \ ??xst_itemh_0: \ 000000A0 0520A0E1 MOV R2,R5 \ 000000A4 0A10A0E1 MOV R1,R10 \ ??xst_itemh_1: \ 000000A8 0700A0E1 MOV R0,R7 \ 000000AC 240100EF SWI +292 769 } 770 if (s=GetXStatusStr(curitem*3+2,&l)) \ 000000B0 0D10A0E1 MOV R1,SP \ 000000B4 02008BE2 ADD R0,R11,#+2 \ 000000B8 ........ BL GetXStatusStr \ 000000BC 00B0B0E1 MOVS R11,R0 \ 000000C0 0E00000A BEQ ??xst_itemh_2 771 { 772 memset(ss,0,128); \ 000000C4 8020A0E3 MOV R2,#+128 \ 000000C8 0010A0E3 MOV R1,#+0 \ 000000CC 820F8DE2 ADD R0,SP,#+520 \ 000000D0 BB0000EF SWI +187 773 if (l>127) l=127; \ 000000D4 00009DE5 LDR R0,[SP, #+0] \ 000000D8 800050E3 CMP R0,#+128 \ 000000DC 7F10A0A3 MOVGE R1,#+127 \ 000000E0 00108DA5 STRGE R1,[SP, #+0] 774 strncpy(ss,s,l); \ 000000E4 00209DE5 LDR R2,[SP, #+0] \ 000000E8 0B10A0E1 MOV R1,R11 \ 000000EC 820F8DE2 ADD R0,SP,#+520 \ 000000F0 160100EF SWI +278 775 wsprintf(ws3,percent_t,ss); \ 000000F4 822F8DE2 ADD R2,SP,#+520 \ 000000F8 0910A0E1 MOV R1,R9 \ 000000FC 010000EA B ??xst_itemh_3 776 } 777 else 778 { 779 wsprintf(ws3,"Large XS %d",curitem); \ ??xst_itemh_2: \ 00000100 0520A0E1 MOV R2,R5 \ 00000104 0C108AE2 ADD R1,R10,#+12 \ ??xst_itemh_3: \ 00000108 0800A0E1 MOV R0,R8 \ 0000010C 240100EF SWI +292 780 } 781 ws2=AllocMenuWS(data,ws1->wsbody[0]); \ 00000110 000097E5 LDR R0,[R7, #+0] \ 00000114 B010D0E1 LDRH R1,[R0, #+0] \ 00000118 0400A0E1 MOV R0,R4 \ 0000011C 980100EF SWI +408 \ 00000120 0090A0E1 MOV R9,R0 782 783 wstrcpy(ws2,ws1); \ 00000124 0710A0E1 MOV R1,R7 \ 00000128 1F0100EF SWI +287 784 ws4=AllocMenuWS(data,ws3->wsbody[0]); \ 0000012C 000098E5 LDR R0,[R8, #+0] \ 00000130 B010D0E1 LDRH R1,[R0, #+0] \ 00000134 0400A0E1 MOV R0,R4 \ 00000138 980100EF SWI +408 \ 0000013C 0070A0E1 MOV R7,R0 785 wstrcpy(ws4,ws3); \ 00000140 0810A0E1 MOV R1,R8 \ 00000144 1F0100EF SWI +287 786 SetMenuItemIconArray(data, item, XStatusesIconArray+curitem); \ 00000148 ........ LDR R0,??DataTable50 ;; XStatusesIconArray \ 0000014C 0610A0E1 MOV R1,R6 \ 00000150 000090E5 LDR R0,[R0, #+0] \ 00000154 052180E0 ADD R2,R0,R5, LSL #+2 \ 00000158 0400A0E1 MOV R0,R4 \ 0000015C 990100EF SWI +409 787 SetMLMenuItemText(data, item, ws2, ws4, curitem); \ 00000160 20002DE9 PUSH {R5} \ 00000164 0730A0E1 MOV R3,R7 \ 00000168 0920A0E1 MOV R2,R9 \ 0000016C 0610A0E1 MOV R1,R6 \ 00000170 0400A0E1 MOV R0,R4 \ 00000174 180200EF SWI +536 788 } \ 00000178 ADDF8DE2 ADD SP,SP,#+692 \ 0000017C F08FBDE8 POP {R4-R11,PC} ;; return 789 \ In segment DATA_C, align 4, align-sorted 790 static const SOFTKEY_DESC xst_menu_sk[]= \ xst_menu_sk: \ 00000000 18000000 DC16 24, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 791 { 792 {0x0018,0x0000,(int)LG_TEXT}, 793 {0x0001,0x0000,(int)LG_BACK}, 794 {0x003D,0x0000,(int)LGP_DOIT_PIC} 795 }; 796 \ In segment DATA_C, align 4, align-sorted 797 static const SOFTKEYSTAB xst_menu_skt= \ xst_menu_skt: \ 00000000 ........0000 DC32 xst_menu_sk, 0 \ 0000 798 { 799 xst_menu_sk,0 800 }; 801 \ In segment DATA_C, align 4, align-sorted 802 static const HEADER_DESC xst_menuhdr={0,0,0,0,NULL,(int)LG_CHGXSTATUS,LGP_NULL}; \ xst_menuhdr: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 00000000.... DC32 0H, `?=32); \ ??GetXStatusStr_2: \ 00000028 ........ LDRB R12,[R2], #+1 \ 0000002C 20005CE3 CMP R12,#+32 \ 00000030 FCFFFFAA BGE ??GetXStatusStr_2 889 if (!c) return NULL; \ 00000034 00005CE3 CMP R12,#+0 \ 00000038 F8FFFF0A BEQ ??GetXStatusStr_1 890 n--; \ 0000003C 010040E2 SUB R0,R0,#+1 891 } \ ??GetXStatusStr_0: \ 00000040 000050E3 CMP R0,#+0 \ 00000044 F7FFFF1A BNE ??GetXStatusStr_2 892 pp=p; \ 00000048 0200A0E1 MOV R0,R2 \ 0000004C 000000EA B ??GetXStatusStr_3 893 while((*pp++)>=32) l++; \ ??GetXStatusStr_4: \ 00000050 013083E2 ADD R3,R3,#+1 \ ??GetXStatusStr_3: \ 00000054 ........ LDRB R12,[R0], #+1 \ 00000058 20005CE3 CMP R12,#+32 \ 0000005C FBFFFF2A BCS ??GetXStatusStr_4 894 if (len) *len=l; \ 00000060 000051E3 CMP R1,#+0 \ 00000064 00308115 STRNE R3,[R1, #+0] 895 return p; \ 00000068 0200A0E1 MOV R0,R2 \ 0000006C 1EFF2FE1 BX LR ;; return 896 } 897 898 899 \ In segment DATA_Z, align 4, align-sorted 900 int xstartItem=0; 901 int xs_itemFromDisp;//кол-во на экране 902 //int xs_totalItems;//общее количество итемов 903 int xs_curpos=0;//позичия курсора 904 //int xs_curpage=1;//текущая страница 905 906 907 RECT xs_rc;//MainMenu Rect \ xs_rc: \ 00000000 DS8 8 \ xstartItem: \ 00000008 DS8 4 \ xs_itemFromDisp: \ 0000000C DS8 4 \ xs_curpos: \ 00000010 DS8 4 908 #define xs_font 108 909 910 #define CLIST_Y1 (YDISP+2) 911 \ In segment CODE, align 4, keep-with-next 912 void DrawXScrollBar(int cur,int total) 913 { \ DrawXScrollBar: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 914 int scr_h=ScreenH()-1; 915 int scr_w=ScreenW()-1; 916 int y=xs_rc.y2-xs_rc.y;//scr_h-CLIST_Y1-FontH(clfont)-2; \ 00000004 ........ LDR R6,??DataTable81 ;; xs_rc \ 00000008 0080A0E1 MOV R8,R0 \ 0000000C 0140A0E1 MOV R4,R1 \ 00000010 898100EF SWI +33161 \ 00000014 888100EF SWI +33160 \ 00000018 F270D6E1 LDRSH R7,[R6, #+2] \ 0000001C F630D6E1 LDRSH R3,[R6, #+6] 917 int pos=y*cur/total; \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 075043E0 SUB R5,R3,R7 \ 00000028 980500E0 MUL R0,R8,R5 \ 0000002C ........ LDR R8,??DataTable78 ;; clrWhite \ 00000030 ........ _BLF ??div32_a,??rA??div32_a \ 00000034 F400D6E1 LDRSH R0,[R6, #+4] \ 00000038 0190A0E1 MOV R9,R1 \ 0000003C 0810A0E1 MOV R1,R8 \ 00000040 02002DE9 PUSH {R1} \ 00000044 020040E2 SUB R0,R0,#+2 \ 00000048 0020A0E1 MOV R2,R0 \ 0000004C 0110A0E3 MOV R1,#+1 \ 00000050 02002DE9 PUSH {R1} \ 00000054 0710A0E1 MOV R1,R7 918 int y2=y/total; 919 // int i=0; 920 921 DrawLine(xs_rc.x2-2,xs_rc.y,xs_rc.x2-2,xs_rc.y2,1,clrWhite); \ 00000058 B30100EF SWI +435 922 DrawRoundedFrame(xs_rc.x2-3,xs_rc.y+pos+1,xs_rc.x2-1,xs_rc.y+pos+y2,0,0,0,clrWhite,clrWhite); \ 0000005C F200D6E1 LDRSH R0,[R6, #+2] \ 00000060 F460D6E1 LDRSH R6,[R6, #+4] \ 00000064 0410A0E1 MOV R1,R4 \ 00000068 007089E0 ADD R7,R9,R0 \ 0000006C 0800A0E1 MOV R0,R8 \ 00000070 01002DE9 PUSH {R0} \ 00000074 00012DE9 PUSH {R8} \ 00000078 012046E2 SUB R2,R6,#+1 \ 0000007C 0000A0E3 MOV R0,#+0 \ 00000080 01002DE9 PUSH {R0} \ 00000084 01002DE9 PUSH {R0} \ 00000088 01002DE9 PUSH {R0} \ 0000008C 0500A0E1 MOV R0,R5 \ 00000090 ........ _BLF ??div32_a,??rA??div32_a \ 00000094 073081E0 ADD R3,R1,R7 \ 00000098 011087E2 ADD R1,R7,#+1 \ 0000009C 030046E2 SUB R0,R6,#+3 \ 000000A0 500100EF SWI +336 923 } \ 000000A4 1CD08DE2 ADD SP,SP,#+28 \ 000000A8 F083BDE8 POP {R4-R9,PC} ;; return 924 925 extern const char percent_s[]; 926 /* 927 typedef struct 928 { 929 char *xshort; 930 char *xlong; 931 }XSTTEXT; 932 933 XSTTEXT xtexttop; 934 */ \ In segment CODE, align 4, keep-with-next 935 DYNPNGICONLIST *GetXSByItem(int curitem) 936 { \ GetXSByItem: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 937 PNGTOP_DESC *pltop=PNG_TOP(); \ 00000008 B98100EF SWI +33209 938 pltop->dyn_pltop=XStatusesImgList; \ 0000000C ........ LDR R1,??DataTable63 ;; XStatusesImgList \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 081080E5 STR R1,[R0, #+8] 939 int i=total_xstatuses-1; \ 00000018 ........ LDR R1,??DataTable75 ;; total_xstatuses \ 0000001C 001091E5 LDR R1,[R1, #+0] \ 00000020 012041E2 SUB R2,R1,#+1 \ 00000024 010000EA B ??GetXSByItem_0 940 while(pltop->dyn_pltop && i>0) 941 { 942 if(i==curitem) 943 return pltop->dyn_pltop; 944 i--; 945 if(pltop->dyn_pltop->next) pltop->dyn_pltop=pltop->dyn_pltop->next; \ ??GetXSByItem_1: \ 00000028 0310A0E1 MOV R1,R3 \ 0000002C 081080E5 STR R1,[R0, #+8] \ ??GetXSByItem_0: \ 00000030 081090E5 LDR R1,[R0, #+8] \ 00000034 000051E3 CMP R1,#+0 \ 00000038 0800000A BEQ ??GetXSByItem_2 \ 0000003C 010052E3 CMP R2,#+1 \ 00000040 060000BA BLT ??GetXSByItem_2 \ 00000044 040052E1 CMP R2,R4 \ 00000048 0100A001 MOVEQ R0,R1 \ 0000004C 1080BD08 POPEQ {R4,PC} \ 00000050 003091E5 LDR R3,[R1, #+0] \ 00000054 012042E2 SUB R2,R2,#+1 \ 00000058 000053E3 CMP R3,#+0 \ 0000005C F1FFFF1A BNE ??GetXSByItem_1 946 else return 0; \ ??GetXSByItem_2: \ 00000060 0000A0E3 MOV R0,#+0 \ 00000064 1080BDE8 POP {R4,PC} ;; return 947 } 948 return 0; 949 } 950 \ In segment CODE, align 4, keep-with-next 951 static void XS_DrawList() 952 { \ XS_DrawList: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 953 int font_y = FontH(xs_font)+2; 954 int scr_h=ScreenH()-1; 955 int scr_w=ScreenW()-1; 956 xs_itemFromDisp = sdiv(font_y,scr_h-CLIST_Y1-FontH(xs_font)-2)-1; \ 00000004 ........ LDR R5,??DataTable81 ;; xs_rc \ 00000008 0CD04DE2 SUB SP,SP,#+12 \ 0000000C 6C00A0E3 MOV R0,#+108 \ 00000010 ........ _BLF FontH,??FontH??rA \ 00000014 024080E2 ADD R4,R0,#+2 \ 00000018 898100EF SWI +33161 \ 0000001C 016040E2 SUB R6,R0,#+1 \ 00000020 888100EF SWI +33160 \ 00000024 6C00A0E3 MOV R0,#+108 \ 00000028 ........ _BLF FontH,??FontH??rA \ 0000002C 1A1046E2 SUB R1,R6,#+26 \ 00000030 000041E0 SUB R0,R1,R0 \ 00000034 021040E2 SUB R1,R0,#+2 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C B80000EF SWI +184 \ 00000040 010040E2 SUB R0,R0,#+1 \ 00000044 0C0085E5 STR R0,[R5, #+12] 957 int l; 958 959 LockSched(); \ 00000048 460100EF SWI +326 960 int i=0; \ 0000004C 0060A0E3 MOV R6,#+0 961 int start_y=0; 962 char *xshort=malloc(128); \ 00000050 8000A0E3 MOV R0,#+128 \ 00000054 140000EF SWI +20 \ 00000058 0070A0E1 MOV R7,R0 963 char *s; 964 char *xlong=malloc(128); \ 0000005C 8000A0E3 MOV R0,#+128 \ 00000060 140000EF SWI +20 \ 00000064 0080A0E1 MOV R8,R0 965 966 RECT rc; 967 DYNPNGICONLIST *xs; 968 969 while(i` \ 00000080 08108DE2 ADD R1,SP,#+8 \ 00000084 000086E0 ADD R0,R6,R0 \ 00000088 800080E0 ADD R0,R0,R0, LSL #+1 \ 0000008C 010080E2 ADD R0,R0,#+1 \ 00000090 ........ BL GetXStatusStr \ 00000094 0030B0E1 MOVS R3,R0 972 { 973 snprintf(xshort,128,percent_s,s); 974 } 975 else 976 { 977 snprintf(xshort,128,"Short XS %d",xstartItem+i); \ 00000098 08009505 LDREQ R0,[R5, #+8] \ 0000009C 0920A011 MOVNE R2,R9 \ 000000A0 00308600 ADDEQ R3,R6,R0 \ 000000A4 0A20A001 MOVEQ R2,R10 \ 000000A8 8010A0E3 MOV R1,#+128 \ 000000AC 0700A0E1 MOV R0,R7 \ 000000B0 1B0100EF SWI +283 978 } 979 980 if (s=GetXStatusStr((xstartItem+i)*3+2,&l)) \ 000000B4 080095E5 LDR R0,[R5, #+8] \ 000000B8 08108DE2 ADD R1,SP,#+8 \ 000000BC 000086E0 ADD R0,R6,R0 \ 000000C0 800080E0 ADD R0,R0,R0, LSL #+1 \ 000000C4 020080E2 ADD R0,R0,#+2 \ 000000C8 ........ BL GetXStatusStr \ 000000CC 000050E3 CMP R0,#+0 \ 000000D0 0500000A BEQ ??XS_DrawList_3 981 { 982 snprintf(xlong,128,percent_s,s); \ 000000D4 0030A0E1 MOV R3,R0 \ 000000D8 0920A0E1 MOV R2,R9 \ 000000DC 8010A0E3 MOV R1,#+128 \ 000000E0 0800A0E1 MOV R0,R8 \ 000000E4 1B0100EF SWI +283 \ 000000E8 040000EA B ??XS_DrawList_4 983 } 984 else 985 { 986 sprintf(xlong,"Large XS %d",(xstartItem+i)); \ ??XS_DrawList_3: \ 000000EC 080095E5 LDR R0,[R5, #+8] \ 000000F0 0C108AE2 ADD R1,R10,#+12 \ 000000F4 002086E0 ADD R2,R6,R0 \ 000000F8 0800A0E1 MOV R0,R8 \ 000000FC 160000EF SWI +22 987 } 988 989 if(i+xstartItem==0) snprintf(xshort,128,"Без статуса"); \ ??XS_DrawList_4: \ 00000100 080095E5 LDR R0,[R5, #+8] \ 00000104 060090E0 ADDS R0,R0,R6 \ 00000108 0300001A BNE ??XS_DrawList_5 \ 0000010C 18208AE2 ADD R2,R10,#+24 \ 00000110 8010A0E3 MOV R1,#+128 \ 00000114 0700A0E1 MOV R0,R7 \ 00000118 1B0100EF SWI +283 990 991 start_y=0; 992 993 if(i+xstartItem > xs_curpos) start_y+=font_y+3; \ ??XS_DrawList_5: \ 0000011C 101095E5 LDR R1,[R5, #+16] \ 00000120 082095E5 LDR R2,[R5, #+8] 994 995 start_y += (xs_rc.y + 2 + (i/* - (xs_curpage-1)*xs_itemFromDisp*/)*font_y); //определяем начальное смещение по у 996 StoreXYXYtoRECT(&rc,xs_rc.x,start_y,xs_rc.x2-2,start_y+font_y); \ 00000124 ........ LDR R11,??DataTable67 ;; transparent \ 00000128 062082E0 ADD R2,R2,R6 \ 0000012C 020051E1 CMP R1,R2 \ 00000130 F210D5E1 LDRSH R1,[R5, #+2] \ 00000134 0000A0E3 MOV R0,#+0 \ 00000138 030084B2 ADDLT R0,R4,#+3 \ 0000013C 941621E0 MLA R1,R4,R6,R1 \ 00000140 5EA0A0E3 MOV R10,#+94 \ 00000144 021081E2 ADD R1,R1,#+2 \ 00000148 009081E0 ADD R9,R1,R0 \ 0000014C 090084E0 ADD R0,R4,R9 \ 00000150 01002DE9 PUSH {R0} \ 00000154 F010D5E1 LDRSH R1,[R5, #+0] \ 00000158 F400D5E1 LDRSH R0,[R5, #+4] \ 0000015C 0920A0E1 MOV R2,R9 \ 00000160 40AF8AE3 ORR R10,R10,#0x100 \ 00000164 023040E2 SUB R3,R0,#+2 \ 00000168 04008DE2 ADD R0,SP,#+4 \ 0000016C 340100EF SWI +308 \ 00000170 ........ LDR R0,??DataTable78 ;; clrWhite \ 00000174 0020A0E3 MOV R2,#+0 \ 00000178 0B10A0E1 MOV R1,R11 997 998 SetFontColor(clrWhite,transparent,0); \ 0000017C ........ _BLF SetFontColor,??SetFontColor??rA \ 00000180 080095E5 LDR R0,[R5, #+8] \ 00000184 101095E5 LDR R1,[R5, #+16] \ 00000188 060080E0 ADD R0,R0,R6 \ 0000018C 010050E1 CMP R0,R1 \ 00000190 04D08DE2 ADD SP,SP,#+4 \ 00000194 2B00001A BNE ??XS_DrawList_6 999 if(i+xstartItem==xs_curpos)//Если наш итем то выделяем 1000 { 1001 DrawRoundedFrame(rc.x+1,rc.y-1,rc.x2-5,rc.y2+font_y-1,0,0,0,clrWhite,transparent);//cursor \ 00000198 ........ LDR R0,??DataTable78 ;; clrWhite \ 0000019C 00082DE9 PUSH {R11} \ 000001A0 01002DE9 PUSH {R0} \ 000001A4 0000A0E3 MOV R0,#+0 \ 000001A8 01002DE9 PUSH {R0} \ 000001AC 01002DE9 PUSH {R0} \ 000001B0 01002DE9 PUSH {R0} \ 000001B4 FA01DDE1 LDRSH R0,[SP, #+26] \ 000001B8 040080E0 ADD R0,R0,R4 \ 000001BC 013040E2 SUB R3,R0,#+1 \ 000001C0 F801DDE1 LDRSH R0,[SP, #+24] \ 000001C4 052040E2 SUB R2,R0,#+5 \ 000001C8 F601DDE1 LDRSH R0,[SP, #+22] \ 000001CC 011040E2 SUB R1,R0,#+1 \ 000001D0 F401DDE1 LDRSH R0,[SP, #+20] \ 000001D4 010080E2 ADD R0,R0,#+1 \ 000001D8 500100EF SWI +336 1002 PrintText(rc.x+18,rc.y+font_y,xlong,0,xs_font,1,350,0,0,xs_rc.x2-xs_rc.x-22);//description under item name \ 000001DC F400D5E1 LDRSH R0,[R5, #+4] \ 000001E0 F010D5E1 LDRSH R1,[R5, #+0] \ 000001E4 0030A0E3 MOV R3,#+0 \ 000001E8 0820A0E1 MOV R2,R8 \ 000001EC 010040E0 SUB R0,R0,R1 \ 000001F0 160040E2 SUB R0,R0,#+22 \ 000001F4 01002DE9 PUSH {R0} \ 000001F8 0000A0E3 MOV R0,#+0 \ 000001FC 01002DE9 PUSH {R0} \ 00000200 01002DE9 PUSH {R0} \ 00000204 0A00A0E1 MOV R0,R10 \ 00000208 01002DE9 PUSH {R0} \ 0000020C 0100A0E3 MOV R0,#+1 \ 00000210 01002DE9 PUSH {R0} \ 00000214 6C00A0E3 MOV R0,#+108 \ 00000218 01002DE9 PUSH {R0} \ 0000021C FE02DDE1 LDRSH R0,[SP, #+46] \ 00000220 001084E0 ADD R1,R4,R0 \ 00000224 FC02DDE1 LDRSH R0,[SP, #+44] \ 00000228 120080E2 ADD R0,R0,#+18 \ 0000022C ........ _BLF PrintText,??PrintText??rA 1003 DrawXScrollBar(xstartItem+i,total_xstatuses); \ 00000230 ........ LDR R0,??DataTable75 ;; total_xstatuses \ 00000234 2CD08DE2 ADD SP,SP,#+44 \ 00000238 001090E5 LDR R1,[R0, #+0] \ 0000023C 080095E5 LDR R0,[R5, #+8] \ 00000240 000086E0 ADD R0,R6,R0 \ 00000244 ........ BL DrawXScrollBar 1004 } 1005 // DrawImg(xs_rc.x+4,start_y,NumXStatusToIconBar+xstartItem+i); 1006 xs=GetXSByItem(i+xstartItem); \ ??XS_DrawList_6: \ 00000248 080095E5 LDR R0,[R5, #+8] \ 0000024C 060080E0 ADD R0,R0,R6 \ 00000250 ........ BL GetXSByItem \ 00000254 00B0B0E1 MOVS R11,R0 1007 if(xs) \ 00000258 0D00000A BEQ ??XS_DrawList_7 1008 { 1009 DrwImage(xs->img,xs_rc.x+4,start_y,0,0); \ 0000025C 0000A0E3 MOV R0,#+0 \ 00000260 01002DE9 PUSH {R0} \ 00000264 F000D5E1 LDRSH R0,[R5, #+0] \ 00000268 0030A0E3 MOV R3,#+0 \ 0000026C 0920A0E1 MOV R2,R9 \ 00000270 041080E2 ADD R1,R0,#+4 \ 00000274 08009BE5 LDR R0,[R11, #+8] \ 00000278 ........ _BLF DrwImage,??DrwImage??rA 1010 rc.x+=xs->img->w; \ 0000027C 08209BE5 LDR R2,[R11, #+8] \ 00000280 F410DDE1 LDRSH R1,[SP, #+4] \ 00000284 F020D2E1 LDRSH R2,[R2, #+0] \ 00000288 011082E0 ADD R1,R2,R1 \ 0000028C B410CDE1 STRH R1,[SP, #+4] \ 00000290 04D08DE2 ADD SP,SP,#+4 1011 } 1012 PrintText(rc.x+6,rc.y-1,xshort,0,xs_font,1,350,0,0,xs_rc.x2-xs_rc.x-10);//item name \ ??XS_DrawList_7: \ 00000294 F400D5E1 LDRSH R0,[R5, #+4] \ 00000298 F010D5E1 LDRSH R1,[R5, #+0] \ 0000029C 0030A0E3 MOV R3,#+0 \ 000002A0 0720A0E1 MOV R2,R7 \ 000002A4 010040E0 SUB R0,R0,R1 \ 000002A8 0A0040E2 SUB R0,R0,#+10 \ 000002AC 01002DE9 PUSH {R0} 1013 i++; \ 000002B0 016086E2 ADD R6,R6,#+1 \ 000002B4 0000A0E3 MOV R0,#+0 \ 000002B8 01002DE9 PUSH {R0} \ 000002BC 01002DE9 PUSH {R0} \ 000002C0 00042DE9 PUSH {R10} \ 000002C4 0100A0E3 MOV R0,#+1 \ 000002C8 01002DE9 PUSH {R0} \ 000002CC 6C00A0E3 MOV R0,#+108 \ 000002D0 01002DE9 PUSH {R0} \ 000002D4 FA01DDE1 LDRSH R0,[SP, #+26] \ 000002D8 011040E2 SUB R1,R0,#+1 \ 000002DC F801DDE1 LDRSH R0,[SP, #+24] \ 000002E0 060080E2 ADD R0,R0,#+6 \ 000002E4 ........ _BLF PrintText,??PrintText??rA 1014 if(xstartItem+i >= total_xstatuses) break; \ 000002E8 ........ LDR R1,??DataTable75 ;; total_xstatuses \ 000002EC 080095E5 LDR R0,[R5, #+8] \ 000002F0 001091E5 LDR R1,[R1, #+0] \ 000002F4 000086E0 ADD R0,R6,R0 \ 000002F8 010050E1 CMP R0,R1 \ 000002FC 18D08DE2 ADD SP,SP,#+24 \ 00000300 58FFFFBA BLT ??XS_DrawList_0 1015 } 1016 // mfree(s); 1017 UnlockSched(); \ ??XS_DrawList_1: \ 00000304 470100EF SWI +327 1018 mfree(xshort); \ 00000308 0700A0E1 MOV R0,R7 \ 0000030C 150000EF SWI +21 1019 mfree(xlong); \ 00000310 0800A0E1 MOV R0,R8 \ 00000314 150000EF SWI +21 1020 } \ 00000318 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??XS_DrawList_2: \ 0000031C ........ DC32 percent_s 1021 1022 // Управление курсором \ In segment CODE, align 4, keep-with-next 1023 void XS_MoveUp(int i) 1024 { 1025 if(xs_curpos > xs_itemFromDisp + 2 ){ xs_curpos--; } \ XS_MoveUp: \ 00000000 ........ LDR R0,??DataTable81 ;; xs_rc \ 00000004 101090E5 LDR R1,[R0, #+16] \ 00000008 0C3090E5 LDR R3,[R0, #+12] \ 0000000C 082090E5 LDR R2,[R0, #+8] \ 00000010 02C083E2 ADD R12,R3,#+2 \ 00000014 01005CE1 CMP R12,R1 \ 00000018 011041B2 SUBLT R1,R1,#+1 \ 0000001C 0B0000BA BLT ??XS_MoveUp_0 1026 else 1027 if(xs_curpos > 0){ xs_curpos--; if(xstartItem>0) xstartItem--; } \ 00000020 010051E3 CMP R1,#+1 \ 00000024 040000BA BLT ??XS_MoveUp_1 \ 00000028 011041E2 SUB R1,R1,#+1 \ 0000002C 010052E3 CMP R2,#+1 \ 00000030 060000BA BLT ??XS_MoveUp_0 \ 00000034 012042E2 SUB R2,R2,#+1 \ 00000038 040000EA B ??XS_MoveUp_0 1028 else 1029 { 1030 xs_curpos=total_xstatuses-1; \ ??XS_MoveUp_1: \ 0000003C ........ LDR R2,??DataTable75 ;; total_xstatuses \ 00000040 001092E5 LDR R1,[R2, #+0] 1031 xstartItem=total_xstatuses-xs_itemFromDisp; \ 00000044 002092E5 LDR R2,[R2, #+0] \ 00000048 011041E2 SUB R1,R1,#+1 \ 0000004C 032042E0 SUB R2,R2,R3 \ ??XS_MoveUp_0: \ 00000050 082080E5 STR R2,[R0, #+8] \ 00000054 101080E5 STR R1,[R0, #+16] 1032 } 1033 } \ 00000058 1EFF2FE1 BX LR ;; return 1034 1035 \ In segment CODE, align 4, keep-with-next 1036 void XS_MoveDown(int i) 1037 { 1038 if(xs_curpos < xs_itemFromDisp - 5) xs_curpos++; \ XS_MoveDown: \ 00000000 ........ LDR R0,??DataTable81 ;; xs_rc \ 00000004 10002DE9 PUSH {R4} \ 00000008 101090E5 LDR R1,[R0, #+16] \ 0000000C 0C3090E5 LDR R3,[R0, #+12] \ 00000010 082090E5 LDR R2,[R0, #+8] \ 00000014 05C043E2 SUB R12,R3,#+5 \ 00000018 0C0051E1 CMP R1,R12 \ 0000001C 010000AA BGE ??XS_MoveDown_0 \ ??XS_MoveDown_1: \ 00000020 011081E2 ADD R1,R1,#+1 \ 00000024 0C0000EA B ??XS_MoveDown_2 1039 else 1040 if(xs_curpos < total_xstatuses - 1 ) \ ??XS_MoveDown_0: \ 00000028 ........ LDR R12,??DataTable75 ;; total_xstatuses \ 0000002C 00409CE5 LDR R4,[R12, #+0] \ 00000030 014044E2 SUB R4,R4,#+1 \ 00000034 040051E1 CMP R1,R4 \ 00000038 050000AA BGE ??XS_MoveDown_3 1041 { 1042 if(xstartItem < total_xstatuses-xs_itemFromDisp) \ 0000003C 00409CE5 LDR R4,[R12, #+0] \ 00000040 033044E0 SUB R3,R4,R3 \ 00000044 030052E1 CMP R2,R3 \ 00000048 F4FFFFAA BGE ??XS_MoveDown_1 1043 xstartItem++; \ 0000004C 012082E2 ADD R2,R2,#+1 \ 00000050 F2FFFFEA B ??XS_MoveDown_1 1044 xs_curpos++; 1045 } 1046 else 1047 { 1048 xs_curpos=0; \ ??XS_MoveDown_3: \ 00000054 0010A0E3 MOV R1,#+0 1049 xstartItem=0; \ 00000058 0020A0E3 MOV R2,#+0 \ ??XS_MoveDown_2: \ 0000005C 082080E5 STR R2,[R0, #+8] \ 00000060 101080E5 STR R1,[R0, #+16] 1050 } 1051 } \ 00000064 1000BDE8 POP {R4} \ 00000068 1EFF2FE1 BX LR ;; return 1052 \ In segment CODE, align 4, keep-with-next 1053 static void XS_OnRedraw(MAIN_GUI *data) 1054 { \ XS_OnRedraw: \ 00000000 00402DE9 PUSH {LR} 1055 LockSched(); \ 00000004 460100EF SWI +326 1056 //DrwImage(&screen,0,0,0,0);//"\x00\x00\x00\x45" 1057 // DrawRoundedFrame(0,xs_rc.y-2,ScreenW()-1,xs_rc.y2,0,0,0,"\xFF\xFF\xFF\x15","\xFF\xFF\xFF\x15"); 1058 DrawRoundedFrame(xs_rc.x,xs_rc.y-2,xs_rc.x2,xs_rc.y2,0,0,0,clrWhite,clrBlack); \ 00000008 ........ LDR R1,??DataTable76 ;; clrBlack \ 0000000C ........ LDR R0,??DataTable80 ;; xs_rc \ 00000010 02002DE9 PUSH {R1} \ 00000014 ........ LDR R1,??DataTable78 ;; clrWhite \ 00000018 02002DE9 PUSH {R1} \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 02002DE9 PUSH {R1} \ 00000024 02002DE9 PUSH {R1} \ 00000028 02002DE9 PUSH {R1} \ 0000002C F630D0E1 LDRSH R3,[R0, #+6] \ 00000030 F420D0E1 LDRSH R2,[R0, #+4] \ 00000034 F210D0E1 LDRSH R1,[R0, #+2] \ 00000038 F000D0E1 LDRSH R0,[R0, #+0] \ 0000003C 021041E2 SUB R1,R1,#+2 \ 00000040 500100EF SWI +336 1059 DrawSoftKeys(LG_TEXT,LG_CLOSE); \ 00000044 ........ LDR R0,??DataTable79 ;; `?` \ 00000048 0010A0E1 MOV R1,R0 \ 0000004C 080080E2 ADD R0,R0,#+8 \ 00000050 ........ _BLF DrawSoftKeys,??DrawSoftKeys??rA 1060 XS_DrawList(); \ 00000054 ........ BL XS_DrawList 1061 } \ 00000058 14D08DE2 ADD SP,SP,#+20 \ 0000005C 0080BDE8 POP {PC} ;; return 1062 \ In segment CODE, align 4, keep-with-next 1063 static void XS_onCreate(MAIN_GUI *data, void *(*malloc_adr)(int)) 1064 { \ XS_onCreate: \ 00000000 70402DE9 PUSH {R4-R6,LR} 1065 #ifdef ELKA 1066 DisableIconBar(1); 1067 #endif 1068 // DoScreen(); 1069 xs_rc.x=30; \ 00000004 ........ LDR R5,??DataTable80 ;; xs_rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0200EF SWI +571 \ 00000014 1E00A0E3 MOV R0,#+30 \ 00000018 B000C5E1 STRH R0,[R5, #+0] 1070 xs_rc.y=YDISP+2; \ 0000001C 1A00A0E3 MOV R0,#+26 \ 00000020 B200C5E1 STRH R0,[R5, #+2] 1071 xs_rc.x2=ScreenW()-10; \ 00000024 888100EF SWI +33160 \ 00000028 0A0040E2 SUB R0,R0,#+10 \ 0000002C B400C5E1 STRH R0,[R5, #+4] 1072 xs_rc.y2=ScreenH()-FontH(clfont)-3; \ 00000030 898100EF SWI +33161 \ 00000034 0060A0E1 MOV R6,R0 \ 00000038 24009FE5 LDR R0,??XS_onCreate_0 ;; clfont \ 0000003C 000090E5 LDR R0,[R0, #+0] \ 00000040 ........ _BLF FontH,??FontH??rA \ 00000044 000046E0 SUB R0,R6,R0 \ 00000048 030040E2 SUB R0,R0,#+3 \ 0000004C B600C5E1 STRH R0,[R5, #+6] 1073 // xs_curpos=CurrentXStatus; 1074 //int i=sdiv(xs_itemFromDisp,total_xstatuses-5); 1075 // xstartItem=sdiv(i,CurrentXStaus); 1076 SetCanvasFlag(1); \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 1077 data->gui.state=1; \ 00000058 0100A0E3 MOV R0,#+1 \ 0000005C 0C00C4E5 STRB R0,[R4, #+12] 1078 } \ 00000060 7080BDE8 POP {R4-R6,PC} ;; return \ ??XS_onCreate_0: \ 00000064 ........ DC32 clfont 1079 \ In segment CODE, align 4, keep-with-next 1080 static void XS_onClose(MAIN_GUI *data, void (*mfree_adr)(void *)) 1081 { 1082 //mfree(screen.bitmap); 1083 // zeromem(screen.bitmap,(screen.w*screen.h*2)); 1084 data->gui.state=0; \ XS_onClose: \ 00000000 0010A0E3 MOV R1,#+0 \ 00000004 0C10C0E5 STRB R1,[R0, #+12] 1085 } \ 00000008 1EFF2FE1 BX LR ;; return 1086 \ In segment CODE, align 4, keep-with-next 1087 static void XS_onFocus(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) 1088 { \ XS_onFocus: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 1089 #ifdef ELKA 1090 DisableIconBar(1); \ 00000008 0100A0E3 MOV R0,#+1 \ 0000000C 3B0200EF SWI +571 1091 #endif 1092 data->gui.state=2; \ 00000010 0200A0E3 MOV R0,#+2 \ 00000014 0C00C4E5 STRB R0,[R4, #+12] 1093 DisableIDLETMR(); \ 00000018 7F0100EF SWI +383 1094 } \ 0000001C 1080BDE8 POP {R4,PC} ;; return 1095 \ In segment CODE, align 4, keep-with-next 1096 static void XS_onUnfocus(MAIN_GUI *data, void (*mfree_adr)(void *)) 1097 { 1098 if (data->gui.state!=2) return; \ XS_onUnfocus: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 1099 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 1100 } \ 00000010 1EFF2FE1 BX LR ;; return 1101 \ In segment CODE, align 4, keep-with-next 1102 static int XS_OnKey(MAIN_GUI *data, GUI_MSG *msg) 1103 { \ XS_OnKey: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0140A0E1 MOV R4,R1 1104 DirectRedrawGUI(); \ 00000008 3F0100EF SWI +319 1105 int k=msg->gbsmsg->submess; \ 0000000C 045094E5 LDR R5,[R4, #+4] 1106 1107 if (msg->gbsmsg->msg==KEY_DOWN || msg->gbsmsg->msg==LONG_PRESS) \ 00000010 9360A0E3 MOV R6,#+147 \ 00000014 040095E5 LDR R0,[R5, #+4] \ 00000018 084095E5 LDR R4,[R5, #+8] \ 0000001C 406F86E3 ORR R6,R6,#0x100 \ 00000020 060050E1 CMP R0,R6 \ 00000024 02108612 ADDNE R1,R6,#+2 \ 00000028 01005011 CMPNE R0,R1 \ 0000002C 0B00001A BNE ??XS_OnKey_0 1108 { 1109 switch(k) \ 00000030 040054E2 SUBS R0,R4,#+4 \ 00000034 08005012 SUBSNE R0,R0,#+8 \ 00000038 5000000A BEQ ??XS_OnKey_1 \ 0000003C 2F0050E2 SUBS R0,R0,#+47 \ 00000040 0400000A BEQ ??XS_OnKey_2 \ 00000044 010050E2 SUBS R0,R0,#+1 \ 00000048 4E00000A BEQ ??XS_OnKey_3 \ 0000004C 010050E2 SUBS R0,R0,#+1 \ 00000050 4A00000A BEQ ??XS_OnKey_1 \ 00000054 010000EA B ??XS_OnKey_0 1110 { 1111 case UP_BUTTON: XS_MoveUp(0); break; \ ??XS_OnKey_2: \ 00000058 0000A0E3 MOV R0,#+0 \ 0000005C ........ BL XS_MoveUp 1112 case DOWN_BUTTON: XS_MoveDown(0); break; 1113 case LEFT_BUTTON: case RIGHT_SOFT:case RED_BUTTON: return (1); 1114 // case ENTER_BUTTON: case LEFT_SOFT: ((void (*)(void))(menuprocs[mm_curpos]))(); REDRAW(); break; 1115 } 1116 } 1117 1118 if (msg->gbsmsg->msg==KEY_DOWN) \ ??XS_OnKey_0: \ 00000060 040095E5 LDR R0,[R5, #+4] \ 00000064 060050E1 CMP R0,R6 \ 00000068 4B00001A BNE ??XS_OnKey_4 1119 { 1120 switch(k) \ 0000006C ........ LDR R5,??DataTable81 ;; xs_rc \ 00000070 014054E2 SUBS R4,R4,#+1 \ 00000074 100095E5 LDR R0,[R5, #+16] \ 00000078 4500000A BEQ ??XS_OnKey_5 \ 0000007C 194054E2 SUBS R4,R4,#+25 \ 00000080 0300000A BEQ ??XS_OnKey_6 \ 00000084 244054E2 SUBS R4,R4,#+36 \ 00000088 4100000A BEQ ??XS_OnKey_5 \ 0000008C 0000A0E3 MOV R0,#+0 \ 00000090 7080BDE8 POP {R4-R6,PC} 1121 { 1122 case ENTER_BUTTON: 1123 Change_XStatus(xs_curpos); \ ??XS_OnKey_6: \ 00000094 ........ LDR R1,??DataTable82 ;; CurrentXStatus \ 00000098 000081E5 STR R0,[R1, #+0] \ 0000009C ........ _BLF set_my_xstatus,??set_my_xstatus??rA \ 000000A0 ........ _BLF SetIconBarHandler,??SetIconBarHandler??rA \ 000000A4 ........ LDR R0,??DataTable83 ;; WriteDefSettings \ 000000A8 710100EF SWI +369 1124 if(ind_set_xstatus) \ 000000AC ........ LDR R0,??DataTable84 ;; ind_set_xstatus \ 000000B0 000090E5 LDR R0,[R0, #+0] \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 3000000A BEQ ??XS_OnKey_1 1125 { 1126 int i=xs_curpos; \ 000000BC 100095E5 LDR R0,[R5, #+16] 1127 Is_Vibra_Enabled=def_set[i].vibra_status; \ 000000C0 ........ LDR R2,??DataTable85 ;; def_set \ 000000C4 0B10A0E3 MOV R1,#+11 \ 000000C8 912020E0 MLA R0,R1,R0,R2 \ 000000CC ........ LDR R1,??DataTable86 ;; Is_Vibra_Enabled \ 000000D0 0020D0E5 LDRB R2,[R0, #+0] \ 000000D4 012002E2 AND R2,R2,#0x1 \ 000000D8 002081E5 STR R2,[R1, #+0] 1128 #ifdef NEWSGOLD 1129 Is_Id3tag_Enabled=def_set[i].Id3tag_status; \ 000000DC 0920D0E5 LDRB R2,[R0, #+9] \ 000000E0 ........ LDR R1,??DataTable87 ;; Is_Id3tag_Enabled \ 000000E4 002081E5 STR R2,[R1, #+0] 1130 #endif 1131 Is_Sounds_Enabled=def_set[i].sound_status; \ 000000E8 0020D0E5 LDRB R2,[R0, #+0] \ 000000EC ........ LDR R1,??DataTable88 ;; Is_Sounds_Enabled \ 000000F0 022002E2 AND R2,R2,#0x2 \ 000000F4 A220A0E1 LSR R2,R2,#+1 \ 000000F8 002081E5 STR R2,[R1, #+0] 1132 #ifdef ELKA 1133 Is_SLI_On=def_set[i].sli_state; \ 000000FC 0320D0E5 LDRB R2,[R0, #+3] \ 00000100 ........ LDR R1,??DataTable89 ;; Is_SLI_On \ 00000104 012002E2 AND R2,R2,#0x1 \ 00000108 002081E5 STR R2,[R1, #+0] 1134 #endif 1135 Is_SMARTCPU_On=def_set[i].smartcpu_state; \ 0000010C 0420D0E5 LDRB R2,[R0, #+4] \ 00000110 ........ LDR R1,??DataTable90 ;; Is_SMARTCPU_On \ 00000114 002081E5 STR R2,[R1, #+0] 1136 Is_INC_On=def_set[i].inc_state; \ 00000118 0510D0E5 LDRB R1,[R0, #+5] \ 0000011C ........ LDR R2,??DataTable91 ;; Is_INC_On \ 00000120 013001E2 AND R3,R1,#0x1 \ 00000124 003082E5 STR R3,[R2, #+0] 1137 Is_ILU_On=def_set[i].ilu_state; \ 00000128 ........ LDR R2,??DataTable92 ;; Is_ILU_On \ 0000012C 021001E2 AND R1,R1,#0x2 \ 00000130 A110A0E1 LSR R1,R1,#+1 \ 00000134 001082E5 STR R1,[R2, #+0] 1138 Is_PING_On=def_set[i].ping_state; \ 00000138 0720D0E5 LDRB R2,[R0, #+7] \ 0000013C ........ LDR R1,??DataTable93 ;; Is_PING_On \ 00000140 002081E5 STR R2,[R1, #+0] 1139 Is_UPTIME_On=def_set[i].uptime_state; \ 00000144 0820D0E5 LDRB R2,[R0, #+8] \ 00000148 ........ LDR R1,??DataTable94 ;; Is_UPTIME_On \ 0000014C 002081E5 STR R2,[R1, #+0] 1140 Is_Show_Offline=def_set[i].off_contacts; \ 00000150 0120D0E5 LDRB R2,[R0, #+1] \ 00000154 ........ LDR R1,??DataTable95 ;; Is_Show_Offline \ 00000158 002081E5 STR R2,[R1, #+0] 1141 Is_Show_Groups=def_set[i].show_groups; \ 0000015C 0220D0E5 LDRB R2,[R0, #+2] \ 00000160 ........ LDR R1,??DataTable96 ;; Is_Show_Groups \ 00000164 002081E5 STR R2,[R1, #+0] 1142 Is_Double_Vibra_On=def_set[i].remind_state; \ 00000168 0620D0E5 LDRB R2,[R0, #+6] \ 0000016C ........ LDR R1,??DataTable97 ;; Is_Double_Vibra_On \ 00000170 002081E5 STR R2,[R1, #+0] 1143 Show_XTX=def_set[i].isXTX;//Показывать хстатус или время он лайн \ 00000174 0A00D0E5 LDRB R0,[R0, #+10] \ 00000178 ........ LDR R1,??DataTable98 ;; Show_XTX \ 0000017C 000081E5 STR R0,[R1, #+0] 1144 } \ ??XS_OnKey_1: \ 00000180 0100A0E3 MOV R0,#+1 \ 00000184 7080BDE8 POP {R4-R6,PC} \ ??XS_OnKey_3: \ 00000188 0000A0E3 MOV R0,#+0 \ 0000018C ........ BL XS_MoveDown \ 00000190 B2FFFFEA B ??XS_OnKey_0 1145 return(1); 1146 case LEFT_SOFT: case RIGHT_BUTTON: 1147 EditXStatus(xs_curpos); \ ??XS_OnKey_5: \ 00000194 ........ BL EditXStatus 1148 REDRAW(); \ 00000198 720100EF SWI +370 1149 break; 1150 } 1151 } 1152 return(0); \ ??XS_OnKey_4: \ 0000019C 0000A0E3 MOV R0,#+0 \ 000001A0 7080BDE8 POP {R4-R6,PC} ;; return 1153 } 1154 1155 extern void kill_data(void *p, void (*func_p)(void *)); 1156 \ In segment CODE, align 4, keep-with-next 1157 int XS_method8(void){return(0);} \ XS_method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return \ In segment CODE, align 4, keep-with-next 1158 int XS_method9(void){return(0);} \ XS_method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 1159 \ In segment DATA_C, align 4, align-sorted 1160 const void * const gui_methods_XS[11]={ \ gui_methods_XS: \ 00000000 ............ DC32 XS_OnRedraw, XS_onCreate, XS_onClose, XS_onFocus, XS_onUnfocus \ ............ \ ............ \ .... \ 00000014 ........0000 DC32 XS_OnKey, 0H, kill_data, XS_method8, XS_method9, 0H \ 0000........ \ ............ \ ....00000000 1161 (void *)XS_OnRedraw, 1162 (void *)XS_onCreate, 1163 (void *)XS_onClose, 1164 (void *)XS_onFocus, 1165 (void *)XS_onUnfocus, 1166 (void *)XS_OnKey, 1167 0, 1168 (void *)kill_data, 1169 (void *)XS_method8, 1170 (void *)XS_method9, 1171 0 1172 }; 1173 1174 const RECT XS_Canvas={0,0,0,0}; \ XS_Canvas: \ 0000002C 000000000000 DC16 0, 0, 0, 0 \ 0000 1175 \ In segment CODE, align 4, keep-with-next 1176 void CreateXSMenu() 1177 { \ CreateXSMenu: \ 00000000 10402DE9 PUSH {R4,LR} 1178 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000004 4000A0E3 MOV R0,#+64 \ 00000008 140000EF SWI +20 \ 0000000C 0040A0E1 MOV R4,R0 1179 zeromem(main_gui,sizeof(MAIN_GUI)); \ 00000010 4010A0E3 MOV R1,#+64 \ 00000014 1D0100EF SWI +285 1180 main_gui->gui.canvas=(void *)(&XS_Canvas); \ 00000018 1C009FE5 LDR R0,??CreateXSMenu_0 ;; gui_methods_XS \ 0000001C 2C1080E2 ADD R1,R0,#+44 \ 00000020 001084E5 STR R1,[R4, #+0] 1181 main_gui->gui.methods=(void *)gui_methods_XS; \ 00000024 040084E5 STR R0,[R4, #+4] 1182 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000028 158000EF SWI +32789 \ 0000002C 200084E5 STR R0,[R4, #+32] 1183 //patch_rect((RECT*)&Canvas,0,YDISP,ScreenW()-1,ScreenH()-1); 1184 CreateGUI(main_gui); \ 00000030 0400A0E1 MOV R0,R4 \ 00000034 370100EF SWI +311 1185 } \ 00000038 1080BDE8 POP {R4,PC} ;; return \ ??CreateXSMenu_0: \ 0000003C ........ DC32 gui_methods_XS \ In segment CODE, align 4, keep-with-next \ ??DataTable7: \ 00000000 ........ DC32 percent_t \ In segment CODE, align 4, keep-with-next \ ??DataTable9: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable13: \ 00000000 ........ DC32 transparent \ In segment CODE, align 4, keep-with-next \ ??DataTable15: \ 00000000 ........ DC32 _rc \ In segment CODE, align 4, keep-with-next \ ??DataTable16: \ 00000000 ........ DC32 clrBlack \ In segment CODE, align 4, keep-with-next \ ??DataTable18: \ 00000000 ........ DC32 clrWhite \ In segment CODE, align 4, keep-with-next \ ??DataTable19: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable20: \ 00000000 ........ DC32 _rc \ In segment CODE, align 4, keep-with-next \ ??DataTable22: \ 00000000 ........ DC32 CurrentStatus \ In segment CODE, align 4, keep-with-next \ ??DataTable23: \ 00000000 ........ DC32 isAutoStatusOn \ In segment CODE, align 4, keep-with-next \ ??DataTable24: \ 00000000 ........ DC32 away_m \ In segment CODE, align 4, keep-with-next \ ??DataTable25: \ 00000000 ........ DC32 msg_away_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable26: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable27: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable47: \ 00000000 ........ DC32 percent_t \ In segment CODE, align 4, keep-with-next \ ??DataTable50: \ 00000000 ........ DC32 XStatusesIconArray \ In segment CODE, align 4, keep-with-next \ ??DataTable57: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable58: \ 00000000 ........ DC32 XS_FILE_NAME \ In segment CODE, align 4, keep-with-next \ ??DataTable60: \ 00000000 ........ DC32 XStatusText \ In segment CODE, align 4, keep-with-next \ ??DataTable63: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable66: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable67: \ 00000000 ........ DC32 transparent \ In segment CODE, align 4, keep-with-next \ ??DataTable75: \ 00000000 ........ DC32 total_xstatuses \ In segment CODE, align 4, keep-with-next \ ??DataTable76: \ 00000000 ........ DC32 clrBlack \ In segment CODE, align 4, keep-with-next \ ??DataTable78: \ 00000000 ........ DC32 clrWhite \ In segment CODE, align 4, keep-with-next \ ??DataTable79: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable80: \ 00000000 ........ DC32 xs_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable81: \ 00000000 ........ DC32 xs_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable82: \ 00000000 ........ DC32 CurrentXStatus \ In segment CODE, align 4, keep-with-next \ ??DataTable83: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable84: \ 00000000 ........ DC32 ind_set_xstatus \ In segment CODE, align 4, keep-with-next \ ??DataTable85: \ 00000000 ........ DC32 def_set \ In segment CODE, align 4, keep-with-next \ ??DataTable86: \ 00000000 ........ DC32 Is_Vibra_Enabled \ In segment CODE, align 4, keep-with-next \ ??DataTable87: \ 00000000 ........ DC32 Is_Id3tag_Enabled \ In segment CODE, align 4, keep-with-next \ ??DataTable88: \ 00000000 ........ DC32 Is_Sounds_Enabled \ In segment CODE, align 4, keep-with-next \ ??DataTable89: \ 00000000 ........ DC32 Is_SLI_On \ In segment CODE, align 4, keep-with-next \ ??DataTable90: \ 00000000 ........ DC32 Is_SMARTCPU_On \ In segment CODE, align 4, keep-with-next \ ??DataTable91: \ 00000000 ........ DC32 Is_INC_On \ In segment CODE, align 4, keep-with-next \ ??DataTable92: \ 00000000 ........ DC32 Is_ILU_On \ In segment CODE, align 4, keep-with-next \ ??DataTable93: \ 00000000 ........ DC32 Is_PING_On \ In segment CODE, align 4, keep-with-next \ ??DataTable94: \ 00000000 ........ DC32 Is_UPTIME_On \ In segment CODE, align 4, keep-with-next \ ??DataTable95: \ 00000000 ........ DC32 Is_Show_Offline \ In segment CODE, align 4, keep-with-next \ ??DataTable96: \ 00000000 ........ DC32 Is_Show_Groups \ In segment CODE, align 4, keep-with-next \ ??DataTable97: \ 00000000 ........ DC32 Is_Double_Vibra_On \ In segment CODE, align 4, keep-with-next \ ??DataTable98: \ 00000000 ........ DC32 Show_XTX \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00000008 ........ DC32 `?` \ 0000000C ........ DC32 `?` \ 00000010 ........ DC32 `?` \ 0000001C ........ DC32 `?` \ 0000002C ........ DC32 `?` \ 00000030 ........ DC32 `?` \ 00000034 ........ DC32 `?`: \ 00000038 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000003C 00000000 DC32 0 \ `?`: \ 00000040 01000000 DC32 1 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 18000000 DC16 24, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 ........0000 DC32 edit_x_sk, 0 \ 0000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?` \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 01000000.... DC32 1, edit_xstatus_onkey, edit_xstatus_ghook, edit_xstatus_locret, 0 \ ............ \ ........0000 \ 0000 \ 00000014 ........ DC32 edit_x_skt \ 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 00000000.... DC32 0H, `?`, 2147483647 \ ....FFFFFF7F \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C220F1E5F2E8 DC8 "\302 \361\345\362\350" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 53686F727420 DC8 "Short XS %d" \ 585320256400 \ 0000000C 4C6172676520 DC8 "Large XS %d" \ 585320256400 \ 00000018 C1E5E720F1F2 DC8 "\301\345\347 \361\362\340\362\363\361\340" \ E0F2F3F1E000 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E0EAF0FBF2 DC8 "\307\340\352\360\373\362\374" \ FC00 \ `?`: \ 00000008 D2E5EAF1F200 DC8 "\322\345\352\361\362" \ 0000000E 0000 DC8 0, 0 \ `?`: \ 00000010 C2FBE1EEF000 DC8 "\302\373\341\356\360" \ 00000016 0000 DC8 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257300 DC8 "%s" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 582DD1F2E0F2 DC8 "X-\321\362\340\362\363\361" \ F3F100 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 1, align-sorted \ `?`: \ 00000000 00 DC8 "" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 536176652100 DC8 "Save!" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CDE0E7E0E400 DC8 "\315\340\347\340\344" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C6F0F300 DC8 "\306\360\363" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C4EEECE000 DC8 "\304\356\354\340" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7EBEEE900 DC8 "\307\353\356\351" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E0EDFFF200 DC8 "\307\340\355\377\362" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CEF2EEF8B8EB DC8 "\316\362\356\370\270\353" \ 00 \ 00000007 00 DC8 0 Maximum stack usage in bytes: Function CSTACK -------- ------ CreateSCMenu 8 CreateXSMenu 8 DispStatusChangeMenu 32 DispXStatusChangeMenu 16 DrawXScrollBar 56 EditXStatus 88 FreeXStatusText 8 GetXSByItem 8 GetXStatusStr 0 LoadXStatusText 324 ReplaceStr 36 SC_DrawList 76 SC_MoveDown 0 SC_MoveUp 0 SC_OnKey 16 SC_OnRedraw 24 SC_method8 0 SC_method9 0 SC_onClose 0 SC_onCreate 16 SC_onFocus 8 SC_onUnfocus 0 SaveXStatusText 272 XS_DrawList 92 XS_MoveDown 4 XS_MoveUp 0 XS_OnKey 16 XS_OnRedraw 24 XS_method8 0 XS_method9 0 XS_onClose 0 XS_onCreate 16 XS_onFocus 8 XS_onUnfocus 0 edit_xstatus_ghook 4 edit_xstatus_locret 0 edit_xstatus_onkey 224 st_icons_set 24 st_onkey 8 stmenu_ghook 4 xst_ghook 8 xst_itemh 728 xst_onkey 12 Segment part sizes: Function/Label Bytes -------------- ----- XS_FILE_NAME 16 XStatusText 4 st_onkey 288 st_icons_set 244 stmenu_ghook 20 st_menuhdr 64 st_menusoftkeys 12 st_menu_sk 24 st_menu_skt 8 DispStatusChangeMenu 244 _totalItems 4 _rc 68 SC_DrawList 684 SC_MoveUp 28 SC_MoveDown 28 mmscreen 4 SC_OnRedraw 100 SC_onCreate 232 SC_onClose 12 SC_onFocus 32 SC_onUnfocus 20 SC_OnKey 412 SC_method8 8 SC_method9 8 gui_methods_SC 52 CreateSCMenu 64 edit_x_sk 24 edit_x_skt 8 edit_xstatus_locret 4 ReplaceStr 152 edit_xstatus_onkey 644 edit_xstatus_ghook 48 sk 8 edit_xstatus_desc 76 EditXStatus 824 xst_onkey 300 xst_ghook 60 xst_itemh 384 xst_menu_sk 24 xst_menu_skt 8 xst_menuhdr 68 DispXStatusChangeMenu 116 LoadXStatusText 244 SaveXStatusText 132 FreeXStatusText 28 GetXStatusStr 112 xs_rc 20 DrawXScrollBar 172 GetXSByItem 104 XS_DrawList 800 XS_MoveUp 92 XS_MoveDown 108 XS_OnRedraw 96 XS_onCreate 104 XS_onClose 12 XS_onFocus 32 XS_onUnfocus 20 XS_OnKey 420 XS_method8 8 XS_method9 8 gui_methods_XS 52 CreateXSMenu 64 ??DataTable7 4 ??DataTable9 4 ??DataTable13 4 ??DataTable15 4 ??DataTable16 4 ??DataTable18 4 ??DataTable19 4 ??DataTable20 4 ??DataTable22 4 ??DataTable23 4 ??DataTable24 4 ??DataTable25 4 ??DataTable26 4 ??DataTable27 4 ??DataTable47 4 ??DataTable50 4 ??DataTable57 4 ??DataTable58 4 ??DataTable60 4 ??DataTable63 4 ??DataTable66 4 ??DataTable67 4 ??DataTable75 4 ??DataTable76 4 ??DataTable78 4 ??DataTable79 4 ??DataTable80 4 ??DataTable81 4 ??DataTable82 4 ??DataTable83 4 ??DataTable84 4 ??DataTable85 4 ??DataTable86 4 ??DataTable87 4 ??DataTable88 4 ??DataTable89 4 ??DataTable90 4 ??DataTable91 4 ??DataTable92 4 ??DataTable93 4 ??DataTable94 4 ??DataTable95 4 ??DataTable96 4 ??DataTable97 4 ??DataTable98 4 ? 68 ? 24 ? 8 ? 8 ? 76 ? 8 ? 36 ? 24 ? 3 ? 12 ? 1 ? 8 ? 8 ? 4 ? 8 ? 8 ? 8 ? 8 Others 364 8 032 bytes in segment CODE 620 bytes in segment DATA_C 184 bytes in segment DATA_I 184 bytes in segment DATA_ID 32 bytes in segment DATA_Z 24 bytes in segment INITTAB 7 692 bytes of CODE memory (+ 364 bytes shared) 804 bytes of CONST memory 216 bytes of DATA memory Errors: none Warnings: none