############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 23/Sep/2008 14:34:33 # # 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 kluchnik -D BCFGGEN # # --preprocess D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\k # # luchnik\List\ -lC D:\Pasha\elf\_MY_PROJECT_\naticq_m # # od2\kluchnik\List\ -o D:\Pasha\elf\_MY_PROJECT_\nati # # cq_mod2\kluchnik\Obj\ -s9 --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\kluchnik\List\ # # status_change.lst # # Object file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\kluchnik\Obj\s # # tatus_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 extern char TEMPLATES_PATH[]; \ In segment DATA_C, align 4, align-sorted 34 static const char XS_FILE_NAME[]="\\XStatuses.txt"; \ XS_FILE_NAME: \ 00000000 5C5853746174 DC8 "\\XStatuses.txt" \ 757365732E74 \ 787400 \ 0000000F 00 DC8 0 35 36 extern void DrawHeader(); 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 143 144 /////////////////////////////////////////////////////////////////////////////// 145 146 #define STATUSES_NUM 12 147 148 char *menutexts2[STATUSES_NUM]= 149 { 150 LG_STONLINE, 151 LG_STAWAY, 152 LG_STNA, 153 LG_STDND, 154 LG_STOCCUP, 155 LG_STFFC, 156 LG_STINVIS, 157 LG_STDEPRESSION, 158 LG_STEVIL, 159 LG_STHOME, 160 LG_STLUNCH, 161 LG_STWORK 162 }; 163 164 165 extern char clrBlack[]; 166 extern char clrWhite[]; 167 extern char clrRed[]; 168 extern char transparent[]; 169 extern char blue[]; 170 extern int clfont; 171 extern IMGHDR *icons[]; \ In segment DATA_Z, align 4, align-sorted 172 int _itemFromDisp;//кол-во на экране \ _itemFromDisp: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 173 int _totalItems;//общее количество итемов \ _totalItems: \ 00000000 DS8 4 \ In segment DATA_I, align 4, align-sorted 174 int _curpos=0;//позичия курсора 175 176 RECT _rc; \ _rc: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ menutexts2: \ 00000008 DS8 48 \ 00000038 REQUIRE `?` \ _curpos: \ 00000038 DS8 4 \ 0000003C REQUIRE `?` 177 int _font; \ _font: \ 0000003C DS8 4 \ 00000040 REQUIRE `?` 178 \ In segment CODE, align 4, keep-with-next 179 static void SC_DrawList() 180 { \ SC_DrawList: \ 00000000 D0472DE9 PUSH {R4,R6-R10,LR} 181 int font_y = FontH(_font)+1; \ 00000004 ........ LDR R6,??DataTable19 ;; _rc 182 int scr_h=ScreenH()-1; 183 int scr_w=ScreenW()-1; 184 // _itemFromDisp = sdiv(font_y,scr_h-CLIST_Y1-FontH(_font)-2)-1; 185 186 LockSched(); 187 188 int i=0; 189 int start_y=0; 190 int start_x=_rc.x+2; 191 192 char *s=malloc(128); \ 00000008 D8A29FE5 LDR R10,??SC_DrawList_2+0x8 ;; icons \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 3C0096E5 LDR R0,[R6, #+60] \ 00000014 0070A0E3 MOV R7,#+0 \ 00000018 ........ _BLF FontH,??FontH??rA \ 0000001C 010080E2 ADD R0,R0,#+1 \ 00000020 08008DE5 STR R0,[SP, #+8] \ 00000024 898100EF SWI +33161 \ 00000028 888100EF SWI +33160 \ 0000002C 460100EF SWI +326 \ 00000030 F010D6E1 LDRSH R1,[R6, #+0] \ 00000034 8000A0E3 MOV R0,#+128 \ 00000038 021081E2 ADD R1,R1,#+2 \ 0000003C 0C108DE5 STR R1,[SP, #+12] \ 00000040 140000EF SWI +20 \ 00000044 0080A0E1 MOV R8,R0 193 RECT rc; 194 while(iw,rc.y-1,s,0,_font,1,0,0,0,rc.x2-5);//item name \ 00000198 0700A0E1 MOV R0,R7 \ 0000019C 04D08DE2 ADD SP,SP,#+4 \ 000001A0 0B0050E3 CMP R0,#+11 \ 000001A4 1B00008A BHI ??SC_DrawList_19 \ 000001A8 011F8FE2 ADR R1,??SC_DrawList_1 \ 000001AC 0010D1E7 LDRB R1,[R1, R0] \ 000001B0 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??SC_DrawList_1: \ 000001B4 02040608 DC8 +2,+4,+6,+8 \ 000001B8 0A0C0E10 DC8 +10,+12,+14,+16 \ 000001BC 12191416 DC8 +18,+25,+20,+22 \ ??SC_DrawList_20: \ 000001C0 0B40A0E3 MOV R4,#+11 \ 000001C4 140000EA B ??SC_DrawList_21 \ ??SC_DrawList_22: \ 000001C8 0240A0E3 MOV R4,#+2 \ 000001CC 120000EA B ??SC_DrawList_21 \ ??SC_DrawList_23: \ 000001D0 0340A0E3 MOV R4,#+3 \ 000001D4 100000EA B ??SC_DrawList_21 \ ??SC_DrawList_24: \ 000001D8 0540A0E3 MOV R4,#+5 \ 000001DC 0E0000EA B ??SC_DrawList_21 \ ??SC_DrawList_25: \ 000001E0 0440A0E3 MOV R4,#+4 \ 000001E4 0C0000EA B ??SC_DrawList_21 \ ??SC_DrawList_26: \ 000001E8 0C40A0E3 MOV R4,#+12 \ 000001EC 0A0000EA B ??SC_DrawList_21 \ ??SC_DrawList_27: \ 000001F0 0140A0E3 MOV R4,#+1 \ 000001F4 080000EA B ??SC_DrawList_21 \ ??SC_DrawList_28: \ 000001F8 0640A0E3 MOV R4,#+6 \ 000001FC 060000EA B ??SC_DrawList_21 \ ??SC_DrawList_29: \ 00000200 0740A0E3 MOV R4,#+7 \ 00000204 040000EA B ??SC_DrawList_21 \ ??SC_DrawList_30: \ 00000208 0940A0E3 MOV R4,#+9 \ 0000020C 020000EA B ??SC_DrawList_21 \ ??SC_DrawList_31: \ 00000210 0A40A0E3 MOV R4,#+10 \ 00000214 000000EA B ??SC_DrawList_21 \ ??SC_DrawList_19: \ 00000218 0E40A0E3 MOV R4,#+14 \ ??SC_DrawList_21: \ 0000021C F400DDE1 LDRSH R0,[SP, #+4] \ 00000220 0030A0E3 MOV R3,#+0 \ 00000224 0820A0E1 MOV R2,R8 \ 00000228 050040E2 SUB R0,R0,#+5 \ 0000022C 01002DE9 PUSH {R0} \ 00000230 0000A0E3 MOV R0,#+0 \ 00000234 01002DE9 PUSH {R0} \ 00000238 01002DE9 PUSH {R0} \ 0000023C 01002DE9 PUSH {R0} \ 00000240 0100A0E3 MOV R0,#+1 \ 00000244 01002DE9 PUSH {R0} \ 00000248 3C0096E5 LDR R0,[R6, #+60] \ 0000024C 01002DE9 PUSH {R0} \ 00000250 FA01DDE1 LDRSH R0,[SP, #+26] \ 00000254 011040E2 SUB R1,R0,#+1 \ 00000258 04019AE7 LDR R0,[R10, +R4, LSL #+2] \ 0000025C F841DDE1 LDRSH R4,[SP, #+24] \ 00000260 B000D0E1 LDRH R0,[R0, #+0] \ 00000264 000084E0 ADD R0,R4,R0 \ 00000268 050080E2 ADD R0,R0,#+5 \ 0000026C ........ _BLF PrintText,??PrintText??rA 206 207 if(i<10) \ 00000270 014087E2 ADD R4,R7,#+1 \ 00000274 0A0057E3 CMP R7,#+10 \ 00000278 18D08DE2 ADD SP,SP,#+24 \ 0000027C 100000AA BGE ??SC_DrawList_32 208 { 209 if(i==9)sprintf(s,"%d",0); \ 00000280 171F8FE2 ADR R1,??SC_DrawList_2+0x4 ;; "%d" \ 00000284 090057E3 CMP R7,#+9 \ 00000288 0020A003 MOVEQ R2,#+0 210 else sprintf(s,"%d",i+1); \ 0000028C 0420A011 MOVNE R2,R4 \ 00000290 0800A0E1 MOV R0,R8 \ 00000294 160000EF SWI +22 211 PrintField(rc.x2-7,start_y,s,2,_font,0); \ 00000298 0000A0E3 MOV R0,#+0 \ 0000029C 01002DE9 PUSH {R0} \ 000002A0 3C0096E5 LDR R0,[R6, #+60] \ 000002A4 0230A0E3 MOV R3,#+2 \ 000002A8 01002DE9 PUSH {R0} \ 000002AC FC00DDE1 LDRSH R0,[SP, #+12] \ 000002B0 0820A0E1 MOV R2,R8 \ 000002B4 0910A0E1 MOV R1,R9 \ 000002B8 070040E2 SUB R0,R0,#+7 \ 000002BC ........ _BLF PrintField,??PrintField??rA \ 000002C0 08D08DE2 ADD SP,SP,#+8 212 } 213 214 i++; \ ??SC_DrawList_32: \ 000002C4 0470A0E1 MOV R7,R4 215 if(i >= STATUSES_NUM) break; \ 000002C8 0C0057E3 CMP R7,#+12 \ 000002CC 5DFFFFBA BLT ??SC_DrawList_3 216 } 217 mfree(s); \ 000002D0 0800A0E1 MOV R0,R8 \ 000002D4 150000EF SWI +21 218 UnlockSched(); \ 000002D8 470100EF SWI +327 219 } \ 000002DC DF87BDE8 POP {R0-R4,R6-R10,PC} \ ??SC_DrawList_2: \ 000002E0 25730000 DC8 "%s",+0 \ 000002E4 25640000 DC8 "%d",+0 \ 000002E8 ........ DC32 icons 220 221 // Управление курсором \ In segment CODE, align 4, keep-with-next 222 void SC_MoveUp(int i) 223 { 224 //if(_curpos > _itemFromDisp){ _curpos--; } 225 // else 226 if(_curpos > 0){ _curpos--; /*if(startItem>0) startItem--; */} \ SC_MoveUp: \ 00000000 ........ LDR R0,??DataTable19 ;; _rc \ 00000004 381090E5 LDR R1,[R0, #+56] \ 00000008 010051E3 CMP R1,#+1 \ 0000000C 011041A2 SUBGE R1,R1,#+1 227 else 228 { 229 _curpos=STATUSES_NUM-1; \ 00000010 0B10A0B3 MOVLT R1,#+11 \ 00000014 381080E5 STR R1,[R0, #+56] 230 //startItem=STATUSES_NUM-_itemFromDisp; 231 } 232 } \ 00000018 1EFF2FE1 BX LR ;; return 233 234 \ In segment CODE, align 4, keep-with-next 235 void SC_MoveDown(int i) 236 { 237 //if(_curpos <_itemFromDisp - 5) _curpos++; 238 //else 239 if(_curpos < STATUSES_NUM - 1 ){/*if(startItem < STATUSES_NUM-mm_itemFromDisp) startItem++;*/ _curpos++; } \ SC_MoveDown: \ 00000000 ........ LDR R0,??DataTable19 ;; _rc \ 00000004 381090E5 LDR R1,[R0, #+56] \ 00000008 0B0051E3 CMP R1,#+11 \ 0000000C 011081B2 ADDLT R1,R1,#+1 240 else 241 { 242 _curpos=0; \ 00000010 0010A0A3 MOVGE R1,#+0 \ 00000014 381080E5 STR R1,[R0, #+56] 243 //startItem=0; 244 } 245 } \ 00000018 1EFF2FE1 BX LR ;; return 246 247 extern IMGHDR screen; 248 extern void DoScreen(); 249 extern IMGHDR screen2; 250 extern void DoScreen2(); 251 extern void DrawSoftKeys(char *right,char *left); 252 extern void DrawContactList(); 253 extern int hy; \ In segment CODE, align 4, keep-with-next 254 static void SC_OnRedraw(MAIN_GUI *data) 255 { \ SC_OnRedraw: \ 00000000 00402DE9 PUSH {LR} 256 // ClearScreen(); 257 LockSched(); \ 00000004 460100EF SWI +326 258 // DrawContactList(); 259 DrwImage(&screen2,0,hy+2,0,0); \ 00000008 0000A0E3 MOV R0,#+0 \ 0000000C 01002DE9 PUSH {R0} \ 00000010 ........ LDR R0,??DataTable7 ;; hy \ 00000014 0030A0E3 MOV R3,#+0 \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 0310A0E1 MOV R1,R3 \ 00000020 022080E2 ADD R2,R0,#+2 \ 00000024 ........ LDR R0,??DataTable8 ;; screen2 \ 00000028 ........ _BLF DrwImage,??DrwImage??rA 260 // DrawRoundedFrame(0,0,ScreenW()-1,ScreenH()-1,0,0,0,"\x00\x00\x00\x30","\x00\x00\x00\x30"); 261 DrawRoundedFrame(_rc.x,_rc.y-2,_rc.x2,_rc.y2,0,0,0,MMBackgrBordClr,MMBackgrClr);//"\xF5\x22\x19\x64" \ 0000002C ........ LDR R1,??DataTable9 ;; MMBackgrClr \ 00000030 ........ LDR R0,??DataTable13 ;; _rc \ 00000034 02002DE9 PUSH {R1} \ 00000038 ........ LDR R1,??DataTable11 ;; MMBackgrBordClr \ 0000003C 02002DE9 PUSH {R1} \ 00000040 0010A0E3 MOV R1,#+0 \ 00000044 02002DE9 PUSH {R1} \ 00000048 02002DE9 PUSH {R1} \ 0000004C 02002DE9 PUSH {R1} \ 00000050 F630D0E1 LDRSH R3,[R0, #+6] \ 00000054 F420D0E1 LDRSH R2,[R0, #+4] \ 00000058 F210D0E1 LDRSH R1,[R0, #+2] \ 0000005C F000D0E1 LDRSH R0,[R0, #+0] \ 00000060 021041E2 SUB R1,R1,#+2 \ 00000064 500100EF SWI +336 262 DrawSoftKeys(LG_SELECT,LG_CLOSE); \ 00000068 ........ LDR R0,??DataTable12 ;; `?` \ 0000006C 081080E2 ADD R1,R0,#+8 \ 00000070 ........ _BLF DrawSoftKeys,??DrawSoftKeys??rA 263 UnlockSched(); \ 00000074 470100EF SWI +327 264 SC_DrawList(); \ 00000078 ........ BL SC_DrawList 265 } \ 0000007C 18D08DE2 ADD SP,SP,#+24 \ 00000080 0080BDE8 POP {PC} ;; return 266 \ In segment CODE, align 4, keep-with-next 267 static void SC_onCreate(MAIN_GUI *data, void *(*malloc_adr)(int)) 268 { \ SC_onCreate: \ 00000000 70402DE9 PUSH {R4-R6,LR} 269 #ifdef ELKA 270 #ifndef ICONBAR 271 DisableIconBar(1); 272 #endif 273 #endif 274 _font=clfont; \ 00000004 ........ LDR R5,??DataTable13 ;; _rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0200EF SWI +571 \ 00000014 ........ LDR R0,??DataTable14 ;; clfont 275 DoScreen2(); 276 #ifdef ELKA 277 _rc.x=30; 278 _rc.x2=ScreenW()-53; 279 #else 280 _rc.x=10; 281 _rc.x2=ScreenW(); 282 #endif 283 _rc.y=YDISP+2; 284 _rc.y2=YDISP+16+(FontH(_font)*STATUSES_NUM); 285 _curpos=GetStatusIndexInMenu(CurrentStatus); \ 00000018 0160A0E3 MOV R6,#+1 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 3C0085E5 STR R0,[R5, #+60] \ 00000024 ........ _BLF DoScreen2,??DoScreen2??rA \ 00000028 1E00A0E3 MOV R0,#+30 \ 0000002C B000C5E1 STRH R0,[R5, #+0] \ 00000030 888100EF SWI +33160 \ 00000034 350040E2 SUB R0,R0,#+53 \ 00000038 B400C5E1 STRH R0,[R5, #+4] \ 0000003C 1A00A0E3 MOV R0,#+26 \ 00000040 B200C5E1 STRH R0,[R5, #+2] \ 00000044 3C0095E5 LDR R0,[R5, #+60] \ 00000048 ........ _BLF FontH,??FontH??rA \ 0000004C 0C10A0E3 MOV R1,#+12 \ 00000050 910000E0 MUL R0,R1,R0 \ 00000054 280080E2 ADD R0,R0,#+40 \ 00000058 B600C5E1 STRH R0,[R5, #+6] \ 0000005C ........ LDR R0,??DataTable18 ;; CurrentStatus \ 00000060 000090E5 LDR R0,[R0, #+0] \ 00000064 010040E2 SUB R0,R0,#+1 \ 00000068 0B0050E3 CMP R0,#+11 \ 0000006C 0500008A BHI ??SC_onCreate_1 \ 00000070 011F8FE2 ADR R1,??SC_onCreate_0 \ 00000074 0010D1E7 LDRB R1,[R1, R0] \ 00000078 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??SC_onCreate_0: \ 0000007C 0E04060A DC8 +14,+4,+6,+10 \ 00000080 08101214 DC8 +8,+16,+18,+20 \ 00000084 1618020C DC8 +22,+24,+2,+12 \ ??SC_onCreate_1: \ 00000088 0000A0E3 MOV R0,#+0 \ 0000008C 140000EA B ??SC_onCreate_2 \ ??SC_onCreate_3: \ 00000090 0100A0E3 MOV R0,#+1 \ 00000094 120000EA B ??SC_onCreate_2 \ ??SC_onCreate_4: \ 00000098 0200A0E3 MOV R0,#+2 \ 0000009C 100000EA B ??SC_onCreate_2 \ ??SC_onCreate_5: \ 000000A0 0300A0E3 MOV R0,#+3 \ 000000A4 0E0000EA B ??SC_onCreate_2 \ ??SC_onCreate_6: \ 000000A8 0400A0E3 MOV R0,#+4 \ 000000AC 0C0000EA B ??SC_onCreate_2 \ ??SC_onCreate_7: \ 000000B0 0500A0E3 MOV R0,#+5 \ 000000B4 0A0000EA B ??SC_onCreate_2 \ ??SC_onCreate_8: \ 000000B8 0600A0E3 MOV R0,#+6 \ 000000BC 080000EA B ??SC_onCreate_2 \ ??SC_onCreate_9: \ 000000C0 0700A0E3 MOV R0,#+7 \ 000000C4 060000EA B ??SC_onCreate_2 \ ??SC_onCreate_10: \ 000000C8 0800A0E3 MOV R0,#+8 \ 000000CC 040000EA B ??SC_onCreate_2 \ ??SC_onCreate_11: \ 000000D0 0900A0E3 MOV R0,#+9 \ 000000D4 020000EA B ??SC_onCreate_2 \ ??SC_onCreate_12: \ 000000D8 0A00A0E3 MOV R0,#+10 \ 000000DC 000000EA B ??SC_onCreate_2 \ ??SC_onCreate_13: \ 000000E0 0B00A0E3 MOV R0,#+11 \ ??SC_onCreate_2: \ 000000E4 380085E5 STR R0,[R5, #+56] 286 // DrawRoundedFrame(0,0,ScreenW()-1,hy+2,0,0,0,"\x00\x00\x00\x15","\x00\x00\x00\x15"); 287 SetCanvasFlag(1); \ 000000E8 0100A0E3 MOV R0,#+1 \ 000000EC ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 288 data->gui.state=1; \ 000000F0 0C60C4E5 STRB R6,[R4, #+12] 289 } \ 000000F4 7080BDE8 POP {R4-R6,PC} ;; return 290 \ In segment CODE, align 4, keep-with-next 291 static void SC_onClose(MAIN_GUI *data, void (*mfree_adr)(void *)) 292 { \ SC_onClose: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 293 mfree(screen2.bitmap); \ 00000008 ........ LDR R0,??DataTable16 ;; screen2 + 8 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 150000EF SWI +21 294 data->gui.state=0; \ 00000014 0000A0E3 MOV R0,#+0 \ 00000018 0C00C4E5 STRB R0,[R4, #+12] 295 } \ 0000001C 1080BDE8 POP {R4,PC} ;; return 296 \ In segment CODE, align 4, keep-with-next 297 static void SC_onFocus(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) 298 { \ SC_onFocus: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 299 #ifdef ELKA 300 #ifndef ICONBAR 301 DisableIconBar(1); \ 00000008 0100A0E3 MOV R0,#+1 \ 0000000C 3B0200EF SWI +571 302 #endif 303 #endif 304 data->gui.state=2; \ 00000010 0200A0E3 MOV R0,#+2 \ 00000014 0C00C4E5 STRB R0,[R4, #+12] 305 DisableIDLETMR(); \ 00000018 7F0100EF SWI +383 306 } \ 0000001C 1080BDE8 POP {R4,PC} ;; return 307 \ In segment CODE, align 4, keep-with-next 308 static void SC_onUnfocus(MAIN_GUI *data, void (*mfree_adr)(void *)) 309 { 310 if (data->gui.state!=2) return; \ SC_onUnfocus: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 311 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 312 } \ 00000010 1EFF2FE1 BX LR ;; return 313 \ In segment CODE, align 4, keep-with-next 314 static int SC_OnKey(MAIN_GUI *data, GUI_MSG *msg) 315 { \ SC_OnKey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0140A0E1 MOV R4,R1 316 DirectRedrawGUI(); 317 int k=msg->gbsmsg->submess; 318 319 if (msg->gbsmsg->msg==KEY_DOWN || msg->gbsmsg->msg==LONG_PRESS) \ 0000000C 9350A0E3 MOV R5,#+147 \ 00000010 3F0100EF SWI +319 \ 00000014 044094E5 LDR R4,[R4, #+4] \ 00000018 405F85E3 ORR R5,R5,#0x100 \ 0000001C 040094E5 LDR R0,[R4, #+4] \ 00000020 08B094E5 LDR R11,[R4, #+8] \ 00000024 050050E1 CMP R0,R5 \ 00000028 02108512 ADDNE R1,R5,#+2 \ 0000002C 01005011 CMPNE R0,R1 \ 00000030 0B00001A BNE ??SC_OnKey_2 320 { 321 switch(k) \ 00000034 04005BE2 SUBS R0,R11,#+4 \ 00000038 08005012 SUBSNE R0,R0,#+8 \ 0000003C 9500000A BEQ ??SC_OnKey_3 \ 00000040 2F0050E2 SUBS R0,R0,#+47 \ 00000044 0400000A BEQ ??SC_OnKey_4 \ 00000048 010050E2 SUBS R0,R0,#+1 \ 0000004C 1F00000A BEQ ??SC_OnKey_5 \ 00000050 010050E2 SUBS R0,R0,#+1 \ 00000054 8F00000A BEQ ??SC_OnKey_3 \ 00000058 010000EA B ??SC_OnKey_2 322 { 323 case UP_BUTTON: SC_MoveUp(0); break; \ ??SC_OnKey_4: \ 0000005C 0000A0E3 MOV R0,#+0 \ 00000060 ........ BL SC_MoveUp 324 case DOWN_BUTTON: SC_MoveDown(0); break; 325 case LEFT_BUTTON: case RIGHT_SOFT:case RED_BUTTON: return (1); 326 } 327 } 328 329 if (msg->gbsmsg->msg==KEY_DOWN) \ ??SC_OnKey_2: \ 00000064 040094E5 LDR R0,[R4, #+4] \ 00000068 050050E1 CMP R0,R5 \ 0000006C 8B00001A BNE ??SC_OnKey_6 330 { 331 switch(k) \ 00000070 ........ LDR R4,??DataTable17 ;; WriteDefSettings \ 00000074 2C529FE5 LDR R5,??SC_OnKey_7 ;; away_m \ 00000078 2C629FE5 LDR R6,??SC_OnKey_7+0x4 ;; msg_away_timer \ 0000007C 2C729FE5 LDR R7,??SC_OnKey_7+0x8 ;; AUTO_ENGADE \ 00000080 2C829FE5 LDR R8,??SC_OnKey_7+0xC ;; isAutoStatusOn \ 00000084 ........ LDR R0,??DataTable18 ;; CurrentStatus \ 00000088 ........ LDR R1,??DataTable19 ;; _rc \ 0000008C 0090A0E3 MOV R9,#+0 \ 00000090 01A0A0E3 MOV R10,#+1 \ 00000094 01205BE2 SUBS R2,R11,#+1 \ 00000098 19205212 SUBSNE R2,R2,#+25 \ 0000009C 24205212 SUBSNE R2,R2,#+36 \ 000000A0 3D00001A BNE ??SC_OnKey_8 332 { 333 case ENTER_BUTTON: case LEFT_SOFT:case RIGHT_BUTTON: 334 Change_Status(GetStatusInMenuByPos(_curpos)); \ 000000A4 381091E5 LDR R1,[R1, #+56] \ 000000A8 0B0051E3 CMP R1,#+11 \ 000000AC 2000008A BHI ??SC_OnKey_9 \ 000000B0 012F8FE2 ADR R2,??SC_OnKey_0 \ 000000B4 0120D2E7 LDRB R2,[R2, R1] \ 000000B8 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??SC_OnKey_0: \ 000000BC 0207090B DC8 +2,+7,+9,+11 \ 000000C0 0D0F1113 DC8 +13,+15,+17,+19 \ 000000C4 1517191B DC8 +21,+23,+25,+27 \ ??SC_OnKey_10: \ 000000C8 0BB0A0E3 MOV R11,#+11 \ 000000CC 190000EA B ??SC_OnKey_11 \ ??SC_OnKey_5: \ 000000D0 0000A0E3 MOV R0,#+0 \ 000000D4 ........ BL SC_MoveDown \ 000000D8 E1FFFFEA B ??SC_OnKey_2 \ ??SC_OnKey_12: \ 000000DC 02B0A0E3 MOV R11,#+2 \ 000000E0 140000EA B ??SC_OnKey_11 \ ??SC_OnKey_13: \ 000000E4 03B0A0E3 MOV R11,#+3 \ 000000E8 120000EA B ??SC_OnKey_11 \ ??SC_OnKey_14: \ 000000EC 05B0A0E3 MOV R11,#+5 \ 000000F0 100000EA B ??SC_OnKey_11 \ ??SC_OnKey_15: \ 000000F4 04B0A0E3 MOV R11,#+4 \ 000000F8 0E0000EA B ??SC_OnKey_11 \ ??SC_OnKey_16: \ 000000FC 0CB0A0E3 MOV R11,#+12 \ 00000100 0C0000EA B ??SC_OnKey_11 \ ??SC_OnKey_17: \ 00000104 01B0A0E3 MOV R11,#+1 \ 00000108 0A0000EA B ??SC_OnKey_11 \ ??SC_OnKey_18: \ 0000010C 06B0A0E3 MOV R11,#+6 \ 00000110 080000EA B ??SC_OnKey_11 \ ??SC_OnKey_19: \ 00000114 07B0A0E3 MOV R11,#+7 \ 00000118 060000EA B ??SC_OnKey_11 \ ??SC_OnKey_20: \ 0000011C 08B0A0E3 MOV R11,#+8 \ 00000120 040000EA B ??SC_OnKey_11 \ ??SC_OnKey_21: \ 00000124 09B0A0E3 MOV R11,#+9 \ 00000128 020000EA B ??SC_OnKey_11 \ ??SC_OnKey_22: \ 0000012C 0AB0A0E3 MOV R11,#+10 \ 00000130 000000EA B ??SC_OnKey_11 \ ??SC_OnKey_9: \ 00000134 0EB0A0E3 MOV R11,#+14 \ ??SC_OnKey_11: \ 00000138 00B080E5 STR R11,[R0, #+0] \ 0000013C ........ _BLF set_my_status,??set_my_status??rA \ 00000140 ........ _BLF SetIconBarHandler,??SetIconBarHandler??rA \ 00000144 000098E5 LDR R0,[R8, #+0] \ 00000148 0C0050E3 CMP R0,#+12 \ 0000014C 0800000A BEQ ??SC_OnKey_23 \ 00000150 0B0050E1 CMP R0,R11 \ 00000154 0600001A BNE ??SC_OnKey_23 \ 00000158 000097E5 LDR R0,[R7, #+0] \ 0000015C 0C10A0E3 MOV R1,#+12 \ 00000160 910000E0 MUL R0,R1,R0 \ 00000164 00A085E5 STR R10,[R5, #+0] \ 00000168 000086E5 STR R0,[R6, #+0] \ 0000016C ........ _BLF away_timer,??away_timer??rA \ 00000170 040000EA B ??SC_OnKey_24 \ ??SC_OnKey_23: \ 00000174 0B005BE3 CMP R11,#+11 \ 00000178 0C005B13 CMPNE R11,#+12 \ 0000017C 08005B13 CMPNE R11,#+8 \ 00000180 00908605 STREQ R9,[R6, #+0] \ 00000184 00908505 STREQ R9,[R5, #+0] \ ??SC_OnKey_24: \ 00000188 0400A0E1 MOV R0,R4 \ 0000018C 710100EF SWI +369 335 DrawHeader(); \ 00000190 ........ _BLF DrawHeader,??DrawHeader??rA 336 return (1); \ 00000194 0100A0E3 MOV R0,#+1 \ 00000198 F28FBDE8 POP {R1,R4-R11,PC} 337 } 338 339 if(k>='0' && k<='9') \ ??SC_OnKey_8: \ 0000019C 30005BE3 CMP R11,#+48 \ 000001A0 3E0000BA BLT ??SC_OnKey_6 \ 000001A4 3A005BE3 CMP R11,#+58 \ 000001A8 3C0000AA BGE ??SC_OnKey_6 340 { 341 if(k=='0') _curpos=9; \ 000001AC 30005BE3 CMP R11,#+48 \ 000001B0 0920A003 MOVEQ R2,#+9 342 else _curpos=k-'1'; \ 000001B4 31204B12 SUBNE R2,R11,#+49 \ 000001B8 382081E5 STR R2,[R1, #+56] 343 Change_Status(GetStatusInMenuByPos(_curpos)); \ 000001BC 0B0052E3 CMP R2,#+11 \ 000001C0 1D00008A BHI ??SC_OnKey_25 \ 000001C4 011F8FE2 ADR R1,??SC_OnKey_1 \ 000001C8 0210D1E7 LDRB R1,[R1, R2] \ 000001CC 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??SC_OnKey_1: \ 000001D0 02040608 DC8 +2,+4,+6,+8 \ 000001D4 0A0C0E10 DC8 +10,+12,+14,+16 \ 000001D8 12141618 DC8 +18,+20,+22,+24 \ ??SC_OnKey_26: \ 000001DC 0BB0A0E3 MOV R11,#+11 \ 000001E0 160000EA B ??SC_OnKey_27 \ ??SC_OnKey_28: \ 000001E4 02B0A0E3 MOV R11,#+2 \ 000001E8 140000EA B ??SC_OnKey_27 \ ??SC_OnKey_29: \ 000001EC 03B0A0E3 MOV R11,#+3 \ 000001F0 120000EA B ??SC_OnKey_27 \ ??SC_OnKey_30: \ 000001F4 05B0A0E3 MOV R11,#+5 \ 000001F8 100000EA B ??SC_OnKey_27 \ ??SC_OnKey_31: \ 000001FC 04B0A0E3 MOV R11,#+4 \ 00000200 0E0000EA B ??SC_OnKey_27 \ ??SC_OnKey_32: \ 00000204 0CB0A0E3 MOV R11,#+12 \ 00000208 0C0000EA B ??SC_OnKey_27 \ ??SC_OnKey_33: \ 0000020C 01B0A0E3 MOV R11,#+1 \ 00000210 0A0000EA B ??SC_OnKey_27 \ ??SC_OnKey_34: \ 00000214 06B0A0E3 MOV R11,#+6 \ 00000218 080000EA B ??SC_OnKey_27 \ ??SC_OnKey_35: \ 0000021C 07B0A0E3 MOV R11,#+7 \ 00000220 060000EA B ??SC_OnKey_27 \ ??SC_OnKey_36: \ 00000224 08B0A0E3 MOV R11,#+8 \ 00000228 040000EA B ??SC_OnKey_27 \ ??SC_OnKey_37: \ 0000022C 09B0A0E3 MOV R11,#+9 \ 00000230 020000EA B ??SC_OnKey_27 \ ??SC_OnKey_38: \ 00000234 0AB0A0E3 MOV R11,#+10 \ 00000238 000000EA B ??SC_OnKey_27 \ ??SC_OnKey_25: \ 0000023C 0EB0A0E3 MOV R11,#+14 \ ??SC_OnKey_27: \ 00000240 00B080E5 STR R11,[R0, #+0] \ 00000244 ........ _BLF set_my_status,??set_my_status??rA \ 00000248 ........ _BLF SetIconBarHandler,??SetIconBarHandler??rA \ 0000024C 000098E5 LDR R0,[R8, #+0] \ 00000250 0C0050E3 CMP R0,#+12 \ 00000254 0800000A BEQ ??SC_OnKey_39 \ 00000258 0B0050E1 CMP R0,R11 \ 0000025C 0600001A BNE ??SC_OnKey_39 \ 00000260 000097E5 LDR R0,[R7, #+0] \ 00000264 0C10A0E3 MOV R1,#+12 \ 00000268 910000E0 MUL R0,R1,R0 \ 0000026C 00A085E5 STR R10,[R5, #+0] \ 00000270 000086E5 STR R0,[R6, #+0] \ 00000274 ........ _BLF away_timer,??away_timer??rA \ 00000278 040000EA B ??SC_OnKey_40 \ ??SC_OnKey_39: \ 0000027C 0B005BE3 CMP R11,#+11 \ 00000280 0C005B13 CMPNE R11,#+12 \ 00000284 08005B13 CMPNE R11,#+8 \ 00000288 00908605 STREQ R9,[R6, #+0] \ 0000028C 00908505 STREQ R9,[R5, #+0] \ ??SC_OnKey_40: \ 00000290 0400A0E1 MOV R0,R4 \ 00000294 710100EF SWI +369 344 return 1; \ ??SC_OnKey_3: \ 00000298 0100A0E3 MOV R0,#+1 \ 0000029C F28FBDE8 POP {R1,R4-R11,PC} 345 } 346 } 347 return(0); \ ??SC_OnKey_6: \ 000002A0 0000A0E3 MOV R0,#+0 \ 000002A4 F28FBDE8 POP {R1,R4-R11,PC} ;; return \ ??SC_OnKey_7: \ 000002A8 ........ DC32 away_m \ 000002AC ........ DC32 msg_away_timer \ 000002B0 ........ DC32 AUTO_ENGADE \ 000002B4 ........ DC32 isAutoStatusOn 348 } 349 350 extern void kill_data(void *p, void (*func_p)(void *)); 351 \ In segment CODE, align 4, keep-with-next 352 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 353 int SC_method9(void){return(0);} \ SC_method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 354 \ In segment DATA_C, align 4, align-sorted 355 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 356 (void *)SC_OnRedraw, 357 (void *)SC_onCreate, 358 (void *)SC_onClose, 359 (void *)SC_onFocus, 360 (void *)SC_onUnfocus, 361 (void *)SC_OnKey, 362 0, 363 (void *)kill_data, 364 (void *)SC_method8, 365 (void *)SC_method9, 366 0 367 }; 368 369 const RECT SC_Canvas={0,0,0,0}; \ SC_Canvas: \ 0000002C 000000000000 DC16 0, 0, 0, 0 \ 0000 370 \ In segment CODE, align 4, keep-with-next 371 void CreateSCMenu() 372 { \ CreateSCMenu: \ 00000000 10402DE9 PUSH {R4,LR} 373 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000004 4000A0E3 MOV R0,#+64 \ 00000008 140000EF SWI +20 \ 0000000C 0040A0E1 MOV R4,R0 374 zeromem(main_gui,sizeof(MAIN_GUI)); \ 00000010 4010A0E3 MOV R1,#+64 \ 00000014 1D0100EF SWI +285 375 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] 376 main_gui->gui.methods=(void *)gui_methods_SC; \ 00000024 040084E5 STR R0,[R4, #+4] 377 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000028 158000EF SWI +32789 \ 0000002C 200084E5 STR R0,[R4, #+32] 378 CreateGUI(main_gui); \ 00000030 0400A0E1 MOV R0,R4 \ 00000034 370100EF SWI +311 379 } \ 00000038 1080BDE8 POP {R4,PC} ;; return \ ??CreateSCMenu_0: \ 0000003C ........ DC32 gui_methods_SC 380 381 382 //-------------------------------- 383 // XStatuses 384 //-------------------------------- 385 extern DYNPNGICONLIST *XStatusesImgList; 386 //extern int *XStatusesIconArray; 387 extern volatile int total_xstatuses; 388 \ In segment DATA_I, align 4, align-sorted 389 SOFTKEY_DESC edit_x_sk[]= \ edit_x_sk: \ 00000000 DS8 24 \ 00000018 REQUIRE `?` 390 { 391 {0x0018,0x0000,(int)"Save!"}, 392 {0x0001,0x0000,(int)""}, 393 {0x003D,0x0000,(int)LGP_DOIT_PIC} 394 }; 395 \ In segment DATA_I, align 4, align-sorted 396 SOFTKEYSTAB edit_x_skt= \ edit_x_skt: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` 397 { 398 edit_x_sk,0 399 }; 400 \ In segment CODE, align 4, keep-with-next 401 void edit_xstatus_locret(void){} \ edit_xstatus_locret: \ 00000000 1EFF2FE1 BX LR ;; return \ In segment CODE, align 4, keep-with-next 402 void ReplaceStr(char **str, int start_prev, int prev_len, char *next, int next_len) 403 { \ ReplaceStr: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 24809DE5 LDR R8,[SP, #+36] \ 00000008 0040A0E1 MOV R4,R0 404 char *d, *buf; 405 char *s=*str; \ 0000000C 009094E5 LDR R9,[R4, #+0] \ 00000010 0150A0E1 MOV R5,R1 \ 00000014 0260A0E1 MOV R6,R2 \ 00000018 0370A0E1 MOV R7,R3 406 if (s) \ 0000001C 000059E3 CMP R9,#+0 \ 00000020 F08FBD08 POPEQ {R4-R11,PC} 407 { 408 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 409 if (start_prev) \ 00000044 000055E3 CMP R5,#+0 \ 00000048 0300000A BEQ ??ReplaceStr_0 410 { 411 memcpy(buf, s, start_prev); \ 0000004C 0520A0E1 MOV R2,R5 \ 00000050 0910A0E1 MOV R1,R9 \ 00000054 1E0100EF SWI +286 412 buf+=start_prev; \ 00000058 0BB085E0 ADD R11,R5,R11 413 } 414 if (next_len) \ ??ReplaceStr_0: \ 0000005C 000058E3 CMP R8,#+0 \ 00000060 0400000A BEQ ??ReplaceStr_1 415 { 416 memcpy(buf,next,next_len); \ 00000064 0820A0E1 MOV R2,R8 \ 00000068 0710A0E1 MOV R1,R7 \ 0000006C 0B00A0E1 MOV R0,R11 \ 00000070 1E0100EF SWI +286 417 buf+=next_len; \ 00000074 0BB088E0 ADD R11,R8,R11 418 } 419 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 420 mfree(s); \ 00000088 0900A0E1 MOV R0,R9 \ 0000008C 150000EF SWI +21 421 *str=d; \ 00000090 00A084E5 STR R10,[R4, #+0] 422 } 423 } \ 00000094 F08FBDE8 POP {R4-R11,PC} ;; return \ In segment CODE, align 4, keep-with-next 424 int edit_xstatus_onkey(GUI *data, GUI_MSG *msg) 425 { \ edit_xstatus_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 B8D04DE2 SUB SP,SP,#+184 \ 00000008 0040A0E1 MOV R4,R0 426 WSHDR *ws; 427 char *s, *d, tmp[132]; 428 int cur_x_st; 429 int len, l; 430 int is_any_change=0; 431 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 9500001A BNE ??edit_xstatus_onkey_0 432 { 433 cur_x_st=(int)EDIT_GetUserPointer(data); \ 00000024 0400A0E1 MOV R0,R4 \ 00000028 DF0100EF SWI +479 \ 0000002C 0050A0E1 MOV R5,R0 434 EDITCONTROL ec; 435 ExtractEditControl(data,2,&ec); // ??????????? \ 00000030 08208DE2 ADD R2,SP,#+8 \ 00000034 0210A0E3 MOV R1,#+2 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 690100EF SWI +361 436 ws=ec.pWS; \ 00000040 30809DE5 LDR R8,[SP, #+48] 437 438 s=GetXStatusStr(cur_x_st*3,&len); \ 00000044 851085E0 ADD R1,R5,R5, LSL #+1 439 d=tmp; 440 441 if (s) \ 00000048 ........ LDR R5,??DataTable28 ;; 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 442 { 443 l=ws->wsbody[0]; \ 00000068 000098E5 LDR R0,[R8, #+0] 444 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] 447 } \ 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 448 *d=0; \ ??edit_xstatus_onkey_3: \ 000000A0 0000A0E3 MOV R0,#+0 \ 000000A4 0000CAE5 STRB R0,[R10, #+0] 449 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 450 { 451 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 452 is_any_change=1; \ 000000E8 0160A0E3 MOV R6,#+1 \ 000000EC 04D08DE2 ADD SP,SP,#+4 453 } 454 } 455 456 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 457 ws=ec.pWS; 458 459 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 460 d=tmp; \ 00000118 34A08DE2 ADD R10,SP,#+52 461 462 if (s) \ 0000011C 2100000A BEQ ??edit_xstatus_onkey_6 463 { 464 l=ws->wsbody[0]; \ 00000120 000098E5 LDR R0,[R8, #+0] 465 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] 468 } \ 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 469 *d=0; \ ??edit_xstatus_onkey_8: \ 00000158 0000A0E3 MOV R0,#+0 \ 0000015C 0000CAE5 STRB R0,[R10, #+0] 470 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 471 { 472 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 473 is_any_change=1; \ 000001A0 0160A0E3 MOV R6,#+1 \ 000001A4 04D08DE2 ADD SP,SP,#+4 474 } 475 } 476 477 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 478 ws=ec.pWS; 479 480 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 481 d=tmp; \ 000001D0 34908DE2 ADD R9,SP,#+52 482 483 if (s) \ 000001D4 2100000A BEQ ??edit_xstatus_onkey_11 484 { 485 l=ws->wsbody[0]; \ 000001D8 000094E5 LDR R0,[R4, #+0] 486 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] 489 } \ 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 490 *d=0; \ ??edit_xstatus_onkey_13: \ 00000210 0000A0E3 MOV R0,#+0 \ 00000214 0000C9E5 STRB R0,[R9, #+0] 491 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 492 { 493 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 494 is_any_change=1; \ 00000258 04D08DE2 ADD SP,SP,#+4 \ 0000025C 010000EA B ??edit_xstatus_onkey_16 495 } 496 } 497 498 if (is_any_change) \ ??edit_xstatus_onkey_11: \ 00000260 000056E3 CMP R6,#+0 \ 00000264 0000000A BEQ ??edit_xstatus_onkey_17 499 { 500 SaveXStatusText(); \ ??edit_xstatus_onkey_16: \ 00000268 ........ BL SaveXStatusText 501 } 502 void InitXText(); 503 InitXText(); \ ??edit_xstatus_onkey_17: \ 0000026C ........ BL InitXText 504 return (1); \ 00000270 0100A0E3 MOV R0,#+1 \ 00000274 B8D08DE2 ADD SP,SP,#+184 \ 00000278 F08FBDE8 POP {R4-R11,PC} 505 } 506 return (0); \ ??edit_xstatus_onkey_0: \ 0000027C 0000A0E3 MOV R0,#+0 \ 00000280 B8D08DE2 ADD SP,SP,#+184 \ 00000284 F08FBDE8 POP {R4-R11,PC} ;; return 507 } 508 \ In segment CODE, align 4, keep-with-next 509 void edit_xstatus_ghook(GUI *data, int cmd) 510 { \ edit_xstatus_ghook: \ 00000000 00402DE9 PUSH {LR} 511 static SOFTKEY_DESC sk={0x0FFF,0x0000,(int)"Save!"}; 512 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0100001A BNE ??edit_xstatus_ghook_0 513 { 514 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 \ 00000010 0080BDE8 POP {PC} 515 } 516 if (cmd==7) \ ??edit_xstatus_ghook_0: \ 00000014 070051E3 CMP R1,#+7 \ 00000018 0080BD18 POPNE {PC} 517 { 518 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 519 } 520 } \ 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 `?` 521 \ In segment DATA_I, align 4, align-sorted 522 HEADER_DESC edit_xstatus_hdr={0,0,0,0,NULL,(int)"X-Статус",LGP_NULL}; 523 524 INPUTDIA_DESC edit_xstatus_desc = \ edit_xstatus_desc: \ 00000000 DS8 56 \ 00000038 REQUIRE `?` \ edit_xstatus_hdr: \ 00000038 DS8 20 \ 0000004C REQUIRE `?` 525 { 526 1, 527 edit_xstatus_onkey, 528 edit_xstatus_ghook, 529 (void *)edit_xstatus_locret, 530 0, 531 &edit_x_skt, 532 {0,0,0,0}, 533 FONT_SMALL, 534 100, 535 101, 536 0, 537 // 0x00000001 - ????????? ?? ??????? ???? 538 // 0x00000002 - ????????? ?? ?????? 539 // 0x00000004 - ???????? ????????? 540 // 0x00000008 - UnderLine 541 // 0x00000020 - ?? ?????????? ????? 542 // 0x00000200 - bold 543 0, 544 // 0x00000002 - ReadOnly 545 // 0x00000004 - ?? ????????? ?????? 546 // 0x40000000 - ???????? ??????? ????-?????? 547 0x40000000 548 }; 549 550 551 \ In segment CODE, align 4, keep-with-next 552 static void EditXStatus(int xstatus) 553 { \ EditXStatus: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 554 void *ma=malloc_adr(); 555 void *eq; 556 EDITCONTROL ec; 557 char *s; 558 int len; 559 int c; 560 561 eq=AllocEQueue(ma,mfree_adr()); 562 WSHDR *ews=AllocWS(128); 563 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} 566 AddEditControlToEditQend(eq,&ec,ma); //1 567 568 CutWSTR(ews,0); 569 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 570 if (s) \ 00000098 04D08DE2 ADD SP,SP,#+4 \ 0000009C 0C00000A BEQ ??EditXStatus_1 \ 000000A0 060000EA B ??EditXStatus_2 571 { 572 while((c=*s++) && len) 573 { 574 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 575 len--; \ 000000B4 00109DE5 LDR R1,[SP, #+0] \ 000000B8 011041E2 SUB R1,R1,#+1 \ 000000BC 00108DE5 STR R1,[SP, #+0] 576 } \ ??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 577 } 578 PrepareEditControl(&ec); \ ??EditXStatus_1: \ 000000D4 04008DE2 ADD R0,SP,#+4 \ 000000D8 640100EF SWI +356 579 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 580 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 581 582 ascii2ws(ews,"Short X:"); // Короткий Икс Статус \ 00000108 101088E2 ADD R1,R8,#+16 \ 0000010C 0700A0E1 MOV R0,R7 \ 00000110 ........ _BLF ascii2ws,??ascii2ws??rA 583 PrepareEditControl(&ec); \ 00000114 08008DE2 ADD R0,SP,#+8 \ 00000118 640100EF SWI +356 584 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 585 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 586 587 CutWSTR(ews,0); \ 0000014C 0010A0E3 MOV R1,#+0 \ 00000150 0700A0E1 MOV R0,R7 \ 00000154 260100EF SWI +294 588 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 589 if (s) \ 00000168 08D08DE2 ADD SP,SP,#+8 \ 0000016C 0C00000A BEQ ??EditXStatus_4 \ 00000170 060000EA B ??EditXStatus_5 590 { 591 while((c=*s++) && len) 592 { 593 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 594 len--; \ 00000184 00109DE5 LDR R1,[SP, #+0] \ 00000188 011041E2 SUB R1,R1,#+1 \ 0000018C 00108DE5 STR R1,[SP, #+0] 595 } \ ??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 596 } 597 PrepareEditControl(&ec); \ ??EditXStatus_4: \ 000001A4 04008DE2 ADD R0,SP,#+4 \ 000001A8 640100EF SWI +356 598 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 599 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 600 601 ascii2ws(ews,"Large X:"); // Длинный Икс Статус \ 000001D8 1C1088E2 ADD R1,R8,#+28 \ 000001DC 0700A0E1 MOV R0,R7 \ 000001E0 ........ _BLF ascii2ws,??ascii2ws??rA 602 PrepareEditControl(&ec); \ 000001E4 08008DE2 ADD R0,SP,#+8 \ 000001E8 640100EF SWI +356 603 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 604 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 605 606 CutWSTR(ews,0); \ 0000021C 0010A0E3 MOV R1,#+0 \ 00000220 0700A0E1 MOV R0,R7 \ 00000224 260100EF SWI +294 607 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 608 if (s) \ 00000238 08D08DE2 ADD SP,SP,#+8 \ 0000023C 0C00000A BEQ ??EditXStatus_7 \ 00000240 060000EA B ??EditXStatus_8 609 { 610 while((c=*s++) && len) 611 { 612 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 613 len--; \ 00000254 00109DE5 LDR R1,[SP, #+0] \ 00000258 011041E2 SUB R1,R1,#+1 \ 0000025C 00108DE5 STR R1,[SP, #+0] 614 } \ ??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 615 } 616 PrepareEditControl(&ec); \ ??EditXStatus_7: \ 00000274 04008DE2 ADD R0,SP,#+4 \ 00000278 640100EF SWI +356 617 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 618 AddEditControlToEditQend(eq,&ec,ma); //6 \ 00000298 0520A0E1 MOV R2,R5 619 620 FreeWS(ews); 621 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] 622 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] 623 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 624 } \ 00000328 38D08DE2 ADD SP,SP,#+56 \ 0000032C F087BDE8 POP {R4-R10,PC} ;; return \ ??EditXStatus_0: \ 00000330 ........ DC32 `?=32); \ ??GetXStatusStr_2: \ 00000028 ........ LDRB R12,[R2], #+1 \ 0000002C 20005CE3 CMP R12,#+32 \ 00000030 FCFFFFAA BGE ??GetXStatusStr_2 709 if (!c) return NULL; \ 00000034 00005CE3 CMP R12,#+0 \ 00000038 F8FFFF0A BEQ ??GetXStatusStr_1 710 n--; \ 0000003C 010040E2 SUB R0,R0,#+1 711 } \ ??GetXStatusStr_0: \ 00000040 000050E3 CMP R0,#+0 \ 00000044 F7FFFF1A BNE ??GetXStatusStr_2 712 pp=p; \ 00000048 0200A0E1 MOV R0,R2 \ 0000004C 000000EA B ??GetXStatusStr_3 713 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 714 if (len) *len=l; \ 00000060 000051E3 CMP R1,#+0 \ 00000064 00308115 STRNE R3,[R1, #+0] 715 return p; \ 00000068 0200A0E1 MOV R0,R2 \ 0000006C 1EFF2FE1 BX LR ;; return 716 } 717 718 719 \ In segment DATA_Z, align 4, align-sorted 720 int xstartItem=0; 721 int xs_itemFromDisp;//кол-во на экране 722 //int xs_totalItems;//общее количество итемов 723 int xs_curpos=0;//позичия курсора 724 //int xs_curpage=1;//текущая страница 725 726 727 RECT xs_rc;//MainMenu Rect \ xs_rc: \ 00000000 DS8 8 \ xstartItem: \ 00000008 DS8 4 \ xs_itemFromDisp: \ 0000000C DS8 4 \ xs_curpos: \ 00000010 DS8 4 728 int xs_font; \ xs_font: \ 00000014 DS8 4 729 730 #define CLIST_Y1 (YDISP+2) 731 \ In segment CODE, align 4, keep-with-next 732 void DrawXScrollBar(int cur,int total) 733 { \ DrawXScrollBar: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 734 int scr_h=ScreenH()-1; 735 int scr_w=ScreenW()-1; 736 int y=xs_rc.y2-xs_rc.y;//scr_h-CLIST_Y1-FontH(clfont)-2; \ 00000004 ........ LDR R6,??DataTable58 ;; 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] 737 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,??DataTable40 ;; 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 738 int y2=y/total; 739 // int i=0; 740 741 DrawLine(xs_rc.x2-2,xs_rc.y,xs_rc.x2-2,xs_rc.y2,1,clrWhite); \ 00000058 B30100EF SWI +435 742 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 743 } \ 000000A4 1CD08DE2 ADD SP,SP,#+28 \ 000000A8 F083BDE8 POP {R4-R9,PC} ;; return 744 745 extern const char percent_s[]; 746 747 typedef struct 748 { 749 void *next; 750 char *xshort; 751 char *xlong; 752 }XSTTEXT; 753 \ In segment DATA_Z, align 4, align-sorted 754 volatile XSTTEXT *xtexttop; \ xtexttop: \ 00000000 DS8 4 755 \ In segment CODE, align 4, keep-with-next 756 DYNPNGICONLIST *GetXSByItem(int curitem) 757 { \ GetXSByItem: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 758 PNGTOP_DESC *pltop=PNG_TOP(); \ 00000008 B98100EF SWI +33209 759 pltop->dyn_pltop=XStatusesImgList; \ 0000000C 44109FE5 LDR R1,??GetXSByItem_0 ;; XStatusesImgList \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 081080E5 STR R1,[R0, #+8] 760 int i=total_xstatuses-1; \ 00000018 ........ LDR R1,??DataTable55 ;; total_xstatuses \ 0000001C 001091E5 LDR R1,[R1, #+0] \ 00000020 012041E2 SUB R2,R1,#+1 \ 00000024 020000EA B ??GetXSByItem_1 761 while(pltop->dyn_pltop && i>=0) 762 { 763 if(i==curitem) 764 return pltop->dyn_pltop; 765 i--; 766 pltop->dyn_pltop = pltop->dyn_pltop->next; \ ??GetXSByItem_2: \ 00000028 001091E5 LDR R1,[R1, #+0] \ 0000002C 012042E2 SUB R2,R2,#+1 \ 00000030 081080E5 STR R1,[R0, #+8] \ ??GetXSByItem_1: \ 00000034 081090E5 LDR R1,[R0, #+8] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0300000A BEQ ??GetXSByItem_3 \ 00000040 000052E3 CMP R2,#+0 \ 00000044 0100004A BMI ??GetXSByItem_3 \ 00000048 040052E1 CMP R2,R4 \ 0000004C F5FFFF1A BNE ??GetXSByItem_2 \ ??GetXSByItem_3: \ 00000050 0100A0E1 MOV R0,R1 \ 00000054 1080BDE8 POP {R4,PC} ;; return \ ??GetXSByItem_0: \ 00000058 ........ DC32 XStatusesImgList 767 } 768 return pltop->dyn_pltop;; 769 } 770 /* 771 if(s=GetXStatusStr((xstartItem+i)*3+1,&l)) 772 snprintf(xshort,128,percent_s,s); 773 else 774 snprintf(xshort,128,"Short XS %d",xstartItem+i); 775 776 if(s=GetXStatusStr((xstartItem+i)*3+2,&l)) 777 snprintf(xlong,128,percent_s,s); 778 else 779 sprintf(xlong,"Large XS %d",(xstartItem+i)); 780 781 if(i+xstartItem==0) snprintf(xshort,128,"Без xстатуса"); 782 */ 783 \ In segment CODE, align 4, keep-with-next 784 void FreeXSTList() 785 { \ FreeXSTList: \ 00000000 10402DE9 PUSH {R4,LR} 786 LockSched(); \ 00000004 460100EF SWI +326 787 XSTTEXT *bmk=(XSTTEXT *)xtexttop; \ 00000008 ........ LDR R0,??DataTable35 ;; xtexttop 788 xtexttop=0; \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 004090E5 LDR R4,[R0, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 789 UnlockSched(); \ 00000018 470100EF SWI +327 \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} 790 while(bmk) 791 { 792 XSTTEXT *bmk_prev=bmk; \ ??FreeXSTList_0: \ 00000024 0400A0E1 MOV R0,R4 793 bmk=bmk->next; \ 00000028 004094E5 LDR R4,[R4, #+0] 794 mfree(bmk_prev); \ 0000002C 150000EF SWI +21 795 } \ 00000030 000054E3 CMP R4,#+0 \ 00000034 FAFFFF1A BNE ??FreeXSTList_0 796 } \ 00000038 1080BDE8 POP {R4,PC} ;; return 797 \ In segment CODE, align 4, keep-with-next 798 void InitXText() 799 { \ InitXText: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 800 FreeXSTList(); 801 char *s; 802 int l; 803 for(int i=0;inext=0; 807 bmk->xlong=malloc(128); 808 bmk->xshort=malloc(128); 809 810 if(i!=0) 811 { 812 if(s=GetXStatusStr(i*3+1,&l)) 813 snprintf(bmk->xshort,128,percent_s,s); 814 else 815 snprintf(bmk->xshort,128,"Short XS %d",i); 816 817 if(s=GetXStatusStr(i*3+2,&l)) 818 snprintf(bmk->xlong,128,percent_s,s); 819 else 820 sprintf(bmk->xlong,"Large XS %d",(i)); 821 } 822 823 if(!xtexttop) 824 { 825 snprintf(bmk->xshort,128,"Без xстатуса"); 826 bmk->xlong=""; 827 xtexttop=bmk; 828 } 829 else 830 { 831 XSTTEXT *bm=(XSTTEXT *)xtexttop; \ ??InitXText_2: \ 00000020 001090E5 LDR R1,[R0, #+0] \ 00000024 000051E3 CMP R1,#+0 \ 00000028 0300000A BEQ ??InitXText_3 832 while(bm->next) 833 bm=bm->next; \ ??InitXText_4: \ 0000002C 000090E5 LDR R0,[R0, #+0] \ 00000030 001090E5 LDR R1,[R0, #+0] \ 00000034 000051E3 CMP R1,#+0 \ 00000038 FBFFFF1A BNE ??InitXText_4 834 bm->next=bmk; \ ??InitXText_3: \ 0000003C 006080E5 STR R6,[R0, #+0] 835 } \ ??InitXText_5: \ 00000040 014084E2 ADD R4,R4,#+1 \ ??InitXText_1: \ 00000044 000095E5 LDR R0,[R5, #+0] \ 00000048 000054E1 CMP R4,R0 \ 0000004C F183BDA8 POPGE {R0,R4-R9,PC} \ 00000050 0C00A0E3 MOV R0,#+12 \ 00000054 140000EF SWI +20 \ 00000058 0060A0E1 MOV R6,R0 \ 0000005C 0000A0E3 MOV R0,#+0 \ 00000060 000086E5 STR R0,[R6, #+0] \ 00000064 8000A0E3 MOV R0,#+128 \ 00000068 140000EF SWI +20 \ 0000006C 080086E5 STR R0,[R6, #+8] \ 00000070 8000A0E3 MOV R0,#+128 \ 00000074 140000EF SWI +20 \ 00000078 040086E5 STR R0,[R6, #+4] \ 0000007C 000054E3 CMP R4,#+0 \ 00000080 1900000A BEQ ??InitXText_6 \ 00000084 847084E0 ADD R7,R4,R4, LSL #+1 \ 00000088 0D10A0E1 MOV R1,SP \ 0000008C 010087E2 ADD R0,R7,#+1 \ 00000090 ........ BL GetXStatusStr \ 00000094 0030B0E1 MOVS R3,R0 \ 00000098 040096E5 LDR R0,[R6, #+4] \ 0000009C 0920A011 MOVNE R2,R9 \ 000000A0 0430A001 MOVEQ R3,R4 \ 000000A4 10208802 ADDEQ R2,R8,#+16 \ 000000A8 8010A0E3 MOV R1,#+128 \ 000000AC 1B0100EF SWI +283 \ 000000B0 0D10A0E1 MOV R1,SP \ 000000B4 020087E2 ADD R0,R7,#+2 \ 000000B8 ........ BL GetXStatusStr \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 0500000A BEQ ??InitXText_7 \ 000000C4 0030A0E1 MOV R3,R0 \ 000000C8 080096E5 LDR R0,[R6, #+8] \ 000000CC 0920A0E1 MOV R2,R9 \ 000000D0 8010A0E3 MOV R1,#+128 \ 000000D4 1B0100EF SWI +283 \ 000000D8 030000EA B ??InitXText_6 \ ??InitXText_7: \ 000000DC 080096E5 LDR R0,[R6, #+8] \ 000000E0 0420A0E1 MOV R2,R4 \ 000000E4 1C1088E2 ADD R1,R8,#+28 \ 000000E8 160000EF SWI +22 \ ??InitXText_6: \ 000000EC ........ LDR R7,??DataTable35 ;; xtexttop \ 000000F0 000097E5 LDR R0,[R7, #+0] \ 000000F4 000050E3 CMP R0,#+0 \ 000000F8 C8FFFF1A BNE ??InitXText_2 \ 000000FC 040096E5 LDR R0,[R6, #+4] \ 00000100 0820A0E1 MOV R2,R8 \ 00000104 8010A0E3 MOV R1,#+128 \ 00000108 1B0100EF SWI +283 \ 0000010C 020F8FE2 ADR R0,??InitXText_0 ;; "" \ 00000110 080086E5 STR R0,[R6, #+8] \ 00000114 006087E5 STR R6,[R7, #+0] \ 00000118 C8FFFFEA B ??InitXText_5 \ ??InitXText_0: \ 0000011C 00000000 DC8 "",+0,+0,+0 \ 00000120 ........ DC32 `?next; \ ??GetXSTByItem_1: \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 012082E2 ADD R2,R2,#+1 \ ??GetXSTByItem_0: \ 00000018 000051E3 CMP R1,#+0 \ 0000001C 0300000A BEQ ??GetXSTByItem_2 \ 00000020 000052E1 CMP R2,R0 \ 00000024 F9FFFF1A BNE ??GetXSTByItem_1 \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 1EFF2FE1 BX LR 849 } 850 return bmk; \ ??GetXSTByItem_2: \ 00000030 0000A0E3 MOV R0,#+0 \ 00000034 1EFF2FE1 BX LR ;; return 851 } 852 /* 853 int TotalBmk() 854 { 855 if(!xtexttop) return 0; 856 XSTTEXT *bmk; 857 bmk=(BOOKMARKS *)xtexttop; 858 int i=1; 859 while(bmk=bmk->next) i++; 860 return i; 861 } 862 */ \ In segment DATA_Z, align 4, align-sorted 863 GBSTMR xstmr; \ xstmr: \ 00000000 DS8 16 \ In segment DATA_Z, align 4, align-sorted 864 int XSScroll=0; \ XSScroll: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 865 int XSC_ID; \ XSC_ID: \ 00000000 DS8 4 \ In segment CODE, align 4, keep-with-next 866 void XSRedraw() 867 { 868 // DirectRedrawGUI(); 869 DirectRedrawGUI_ID(XSC_ID); \ XSRedraw: \ 00000000 ........ LDR R0,??DataTable61 ;; XSC_ID \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 400100EF SWI +320 870 } \ 00000010 0080BDE8 POP {PC} ;; return 871 \ In segment CODE, align 4, keep-with-next 872 static void XS_DrawList() 873 { \ XS_DrawList: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 874 int font_y = FontH(xs_font)+1; \ 00000004 ........ LDR R4,??DataTable53 ;; xs_rc 875 int scr_h=ScreenH()-1; 876 int scr_w=ScreenW()-1; 877 xs_itemFromDisp = sdiv(font_y,(xs_rc.y2-xs_rc.y))-1; 878 // int l; 879 880 LockSched(); 881 int i=0; 882 int start_y=0; 883 //char *xshort=malloc(128); 884 //char *s; 885 // char *xlong=malloc(128); 886 887 RECT rc; 888 DYNPNGICONLIST *xs; 889 XSTTEXT *xst; 890 SetFontColor(clrWhite,transparent,0); \ 00000008 ........ LDR R10,??DataTable55 ;; total_xstatuses \ 0000000C 08D04DE2 SUB SP,SP,#+8 \ 00000010 140094E5 LDR R0,[R4, #+20] \ 00000014 0060A0E3 MOV R6,#+0 \ 00000018 ........ _BLF FontH,??FontH??rA \ 0000001C 015080E2 ADD R5,R0,#+1 \ 00000020 898100EF SWI +33161 \ 00000024 888100EF SWI +33160 \ 00000028 F600D4E1 LDRSH R0,[R4, #+6] \ 0000002C F210D4E1 LDRSH R1,[R4, #+2] \ 00000030 5EB0A0E3 MOV R11,#+94 \ 00000034 40BF8BE3 ORR R11,R11,#0x100 \ 00000038 011040E0 SUB R1,R0,R1 \ 0000003C 0500A0E1 MOV R0,R5 \ 00000040 B80000EF SWI +184 \ 00000044 010040E2 SUB R0,R0,#+1 \ 00000048 0C0084E5 STR R0,[R4, #+12] \ 0000004C 460100EF SWI +326 \ 00000050 ........ LDR R1,??DataTable39 ;; transparent \ 00000054 ........ LDR R0,??DataTable40 ;; clrWhite \ 00000058 0020A0E3 MOV R2,#+0 \ 0000005C ........ _BLF SetFontColor,??SetFontColor??rA 891 while(i xs_curpos) start_y = font_y+3; 908 else start_y=0; 909 910 start_y += (xs_rc.y + 2 + (i*font_y)); //определяем начальное смещение по у \ 0000007C F210D4E1 LDRSH R1,[R4, #+2] \ 00000080 0070A0E1 MOV R7,R0 \ 00000084 100094E5 LDR R0,[R4, #+16] \ 00000088 951621E0 MLA R1,R5,R6,R1 \ 0000008C 080050E1 CMP R0,R8 \ 00000090 030085B2 ADDLT R0,R5,#+3 \ 00000094 0000A0A3 MOVGE R0,#+0 \ 00000098 021081E2 ADD R1,R1,#+2 \ 0000009C 008081E0 ADD R8,R1,R0 911 StoreXYXYtoRECT(&rc,xs_rc.x+3,start_y,xs_rc.x2-2,start_y+font_y); \ 000000A0 080085E0 ADD R0,R5,R8 \ 000000A4 01002DE9 PUSH {R0} \ 000000A8 F400D4E1 LDRSH R0,[R4, #+4] \ 000000AC 0820A0E1 MOV R2,R8 \ 000000B0 023040E2 SUB R3,R0,#+2 \ 000000B4 F000D4E1 LDRSH R0,[R4, #+0] \ 000000B8 031080E2 ADD R1,R0,#+3 \ 000000BC 04008DE2 ADD R0,SP,#+4 \ 000000C0 340100EF SWI +308 912 913 xs=GetXSByItem(i+xstartItem); \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 060080E0 ADD R0,R0,R6 \ 000000CC ........ BL GetXSByItem 914 if(i+xstartItem==xs_curpos)//Если наш итем то выделяем \ 000000D0 101094E5 LDR R1,[R4, #+16] \ 000000D4 0090A0E1 MOV R9,R0 \ 000000D8 080094E5 LDR R0,[R4, #+8] \ 000000DC 04D08DE2 ADD SP,SP,#+4 \ 000000E0 060080E0 ADD R0,R0,R6 \ 000000E4 010050E1 CMP R0,R1 \ 000000E8 3300001A BNE ??XS_DrawList_2 915 { 916 DrawRoundedFrame(rc.x+1,rc.y-1,rc.x2-5,rc.y2+font_y-1,0,0,0,MMCursorClr,MMCursorBGClr);//cursor \ 000000EC ........ LDR R0,??DataTable41 ;; MMCursorBGClr \ 000000F0 01002DE9 PUSH {R0} \ 000000F4 ........ LDR R0,??DataTable42 ;; MMCursorClr \ 000000F8 01002DE9 PUSH {R0} \ 000000FC 0000A0E3 MOV R0,#+0 \ 00000100 01002DE9 PUSH {R0} \ 00000104 01002DE9 PUSH {R0} \ 00000108 01002DE9 PUSH {R0} \ 0000010C FA01DDE1 LDRSH R0,[SP, #+26] \ 00000110 050080E0 ADD R0,R0,R5 \ 00000114 013040E2 SUB R3,R0,#+1 \ 00000118 F801DDE1 LDRSH R0,[SP, #+24] \ 0000011C 052040E2 SUB R2,R0,#+5 \ 00000120 F601DDE1 LDRSH R0,[SP, #+22] \ 00000124 011040E2 SUB R1,R0,#+1 \ 00000128 F401DDE1 LDRSH R0,[SP, #+20] \ 0000012C 010080E2 ADD R0,R0,#+1 \ 00000130 500100EF SWI +336 917 if(xs) \ 00000134 000059E3 CMP R9,#+0 \ 00000138 14D08DE2 ADD SP,SP,#+20 \ 0000013C 1A00000A BEQ ??XS_DrawList_3 918 PrintText(rc.x+(xs->img->w+6),rc.y+font_y,xst->xlong,0,xs_font,1,350,1,0,rc.x2-rc.x-(xs->img->w+8));//description under item name \ 00000140 080099E5 LDR R0,[R9, #+8] \ 00000144 F0C0DDE1 LDRSH R12,[SP, #+0] \ 00000148 F410DDE1 LDRSH R1,[SP, #+4] \ 0000014C B020D0E1 LDRH R2,[R0, #+0] \ 00000150 0030A0E3 MOV R3,#+0 \ 00000154 0C1041E0 SUB R1,R1,R12 \ 00000158 021041E0 SUB R1,R1,R2 \ 0000015C 081041E2 SUB R1,R1,#+8 \ 00000160 02002DE9 PUSH {R1} \ 00000164 0010A0E3 MOV R1,#+0 \ 00000168 02002DE9 PUSH {R1} \ 0000016C 0110A0E3 MOV R1,#+1 \ 00000170 02002DE9 PUSH {R1} \ 00000174 0B10A0E1 MOV R1,R11 \ 00000178 02002DE9 PUSH {R1} \ 0000017C 0110A0E3 MOV R1,#+1 \ 00000180 02002DE9 PUSH {R1} \ 00000184 141094E5 LDR R1,[R4, #+20] \ 00000188 02002DE9 PUSH {R1} \ 0000018C B000D0E1 LDRH R0,[R0, #+0] \ 00000190 082097E5 LDR R2,[R7, #+8] \ 00000194 FA11DDE1 LDRSH R1,[SP, #+26] \ 00000198 00008CE0 ADD R0,R12,R0 \ 0000019C 060080E2 ADD R0,R0,#+6 \ 000001A0 011085E0 ADD R1,R5,R1 \ 000001A4 ........ _BLF PrintText,??PrintText??rA \ 000001A8 18D08DE2 ADD SP,SP,#+24 919 920 DrawXScrollBar(xstartItem+i,total_xstatuses); \ ??XS_DrawList_3: \ 000001AC 00109AE5 LDR R1,[R10, #+0] \ 000001B0 080094E5 LDR R0,[R4, #+8] \ 000001B4 000086E0 ADD R0,R6,R0 \ 000001B8 ........ BL DrawXScrollBar 921 } 922 923 if(xs) \ ??XS_DrawList_2: \ 000001BC 000059E3 CMP R9,#+0 \ 000001C0 0800000A BEQ ??XS_DrawList_4 924 DrwImage(xs->img,rc.x+4,start_y,0,0); \ 000001C4 0000A0E3 MOV R0,#+0 \ 000001C8 01002DE9 PUSH {R0} \ 000001CC F400DDE1 LDRSH R0,[SP, #+4] \ 000001D0 0030A0E3 MOV R3,#+0 \ 000001D4 0820A0E1 MOV R2,R8 \ 000001D8 041080E2 ADD R1,R0,#+4 \ 000001DC 080099E5 LDR R0,[R9, #+8] \ 000001E0 ........ _BLF DrwImage,??DrwImage??rA \ 000001E4 04D08DE2 ADD SP,SP,#+4 925 926 // DrawImg(xs_rc.x+4,start_y,NumXStatusToIconBar+xstartItem+i); 927 // rc.x+=xs->img->w; 928 PrintText(rc.x+xs->img->w+6,rc.y-1,xst->xshort,0,xs_font,1,350,0,0,rc.x2-rc.x-(xs->img->w+6));//item name \ ??XS_DrawList_4: \ 000001E8 080099E5 LDR R0,[R9, #+8] \ 000001EC F080DDE1 LDRSH R8,[SP, #+0] \ 000001F0 F410DDE1 LDRSH R1,[SP, #+4] \ 000001F4 B020D0E1 LDRH R2,[R0, #+0] \ 000001F8 0030A0E3 MOV R3,#+0 \ 000001FC 081041E0 SUB R1,R1,R8 \ 00000200 021041E0 SUB R1,R1,R2 \ 00000204 061041E2 SUB R1,R1,#+6 \ 00000208 02002DE9 PUSH {R1} 929 i++; \ 0000020C 016086E2 ADD R6,R6,#+1 \ 00000210 0010A0E3 MOV R1,#+0 \ 00000214 02002DE9 PUSH {R1} \ 00000218 02002DE9 PUSH {R1} \ 0000021C 00082DE9 PUSH {R11} \ 00000220 0110A0E3 MOV R1,#+1 \ 00000224 02002DE9 PUSH {R1} \ 00000228 141094E5 LDR R1,[R4, #+20] \ 0000022C 02002DE9 PUSH {R1} \ 00000230 B000D0E1 LDRH R0,[R0, #+0] \ 00000234 042097E5 LDR R2,[R7, #+4] \ 00000238 FA11DDE1 LDRSH R1,[SP, #+26] \ 0000023C 000088E0 ADD R0,R8,R0 \ 00000240 060080E2 ADD R0,R0,#+6 \ 00000244 011041E2 SUB R1,R1,#+1 \ 00000248 ........ _BLF PrintText,??PrintText??rA 930 if(xstartItem+i >= total_xstatuses) break; \ 0000024C 080094E5 LDR R0,[R4, #+8] \ 00000250 00109AE5 LDR R1,[R10, #+0] \ 00000254 000086E0 ADD R0,R6,R0 \ 00000258 010050E1 CMP R0,R1 \ 0000025C 18D08DE2 ADD SP,SP,#+24 \ 00000260 7EFFFFBA BLT ??XS_DrawList_0 931 } 932 // mfree(s); 933 UnlockSched(); \ ??XS_DrawList_1: \ 00000264 470100EF SWI +327 934 // mfree(xshort); 935 //mfree(xlong); 936 } \ 00000268 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return 937 938 // Управление курсором \ In segment CODE, align 4, keep-with-next 939 void XS_MoveUp() 940 { 941 if(xs_curpos > xs_itemFromDisp + 2 ) \ XS_MoveUp: \ 00000000 ........ LDR R0,??DataTable58 ;; xs_rc \ 00000004 ........ LDR R12,??DataTable55 ;; total_xstatuses \ 00000008 10002DE9 PUSH {R4} \ 0000000C 101090E5 LDR R1,[R0, #+16] \ 00000010 0C3090E5 LDR R3,[R0, #+12] \ 00000014 082090E5 LDR R2,[R0, #+8] \ 00000018 024083E2 ADD R4,R3,#+2 \ 0000001C 010054E1 CMP R4,R1 \ 00000020 090000AA BGE ??XS_MoveUp_0 942 { 943 xs_curpos--; \ 00000024 011041E2 SUB R1,R1,#+1 944 if(xstartItem > 0 && xs_curpos > 5 && xs_curpos < total_xstatuses-5) \ 00000028 010052E3 CMP R2,#+1 \ 0000002C 060051A3 CMPGE R1,#+6 \ 00000030 130000BA BLT ??XS_MoveUp_1 \ 00000034 00309CE5 LDR R3,[R12, #+0] \ 00000038 053043E2 SUB R3,R3,#+5 \ 0000003C 030051E1 CMP R1,R3 \ 00000040 0F0000AA BGE ??XS_MoveUp_1 945 xstartItem--; \ ??XS_MoveUp_2: \ 00000044 012042E2 SUB R2,R2,#+1 \ 00000048 0D0000EA B ??XS_MoveUp_1 946 } 947 else 948 if(xs_curpos > 0) \ ??XS_MoveUp_0: \ 0000004C 010051E3 CMP R1,#+1 \ 00000050 070000BA BLT ??XS_MoveUp_3 949 { 950 xs_curpos--; \ 00000054 011041E2 SUB R1,R1,#+1 951 if(xstartItem > 0 && xs_curpos > 5) \ 00000058 010052E3 CMP R2,#+1 \ 0000005C 060051A3 CMPGE R1,#+6 \ 00000060 F7FFFFAA BGE ??XS_MoveUp_2 952 xstartItem--; 953 else 954 if(xs_curpos < 5) \ 00000064 050051E3 CMP R1,#+5 \ 00000068 050000AA BGE ??XS_MoveUp_1 955 xstartItem=0; \ 0000006C 0020A0E3 MOV R2,#+0 \ 00000070 030000EA B ??XS_MoveUp_1 956 } 957 else 958 { 959 xs_curpos=total_xstatuses-1; \ ??XS_MoveUp_3: \ 00000074 00109CE5 LDR R1,[R12, #+0] 960 xstartItem=total_xstatuses-xs_itemFromDisp; \ 00000078 00209CE5 LDR R2,[R12, #+0] \ 0000007C 011041E2 SUB R1,R1,#+1 \ 00000080 032042E0 SUB R2,R2,R3 \ ??XS_MoveUp_1: \ 00000084 082080E5 STR R2,[R0, #+8] \ 00000088 101080E5 STR R1,[R0, #+16] 961 } 962 } \ 0000008C 1000BDE8 POP {R4} \ 00000090 1EFF2FE1 BX LR ;; return 963 964 \ In segment CODE, align 4, keep-with-next 965 void XS_MoveDown() 966 { 967 if(xs_curpos < xs_itemFromDisp - 5) xs_curpos++; \ XS_MoveDown: \ 00000000 ........ LDR R0,??DataTable58 ;; 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 968 else 969 if(xs_curpos < total_xstatuses - 1) \ ??XS_MoveDown_0: \ 00000028 ........ LDR R12,??DataTable55 ;; 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 970 { 971 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 972 xstartItem++; \ 0000004C 012082E2 ADD R2,R2,#+1 \ 00000050 F2FFFFEA B ??XS_MoveDown_1 973 xs_curpos++; 974 } 975 else 976 { 977 xs_curpos=0; \ ??XS_MoveDown_3: \ 00000054 0010A0E3 MOV R1,#+0 978 xstartItem=0; \ 00000058 0020A0E3 MOV R2,#+0 \ ??XS_MoveDown_2: \ 0000005C 082080E5 STR R2,[R0, #+8] \ 00000060 101080E5 STR R1,[R0, #+16] 979 } 980 } \ 00000064 1000BDE8 POP {R4} \ 00000068 1EFF2FE1 BX LR ;; return 981 982 \ In segment CODE, align 4, keep-with-next 983 static void XS_OnRedraw(MAIN_GUI *data) 984 { \ XS_OnRedraw: \ 00000000 00402DE9 PUSH {LR} 985 LockSched(); \ 00000004 460100EF SWI +326 986 DrwImage(&screen2,0,hy+2,0,0); \ 00000008 0000A0E3 MOV R0,#+0 \ 0000000C 01002DE9 PUSH {R0} \ 00000010 ........ LDR R0,??DataTable47 ;; hy \ 00000014 0030A0E3 MOV R3,#+0 \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 0310A0E1 MOV R1,R3 \ 00000020 022080E2 ADD R2,R0,#+2 \ 00000024 ........ LDR R0,??DataTable48 ;; screen2 \ 00000028 ........ _BLF DrwImage,??DrwImage??rA 987 DrawRoundedFrame(xs_rc.x,xs_rc.y-2,xs_rc.x2,xs_rc.y2,0,0,0,MMBackgrBordClr,MMBackgrClr); \ 0000002C ........ LDR R1,??DataTable49 ;; MMBackgrClr \ 00000030 ........ LDR R0,??DataTable53 ;; xs_rc \ 00000034 02002DE9 PUSH {R1} \ 00000038 ........ LDR R1,??DataTable51 ;; MMBackgrBordClr \ 0000003C 02002DE9 PUSH {R1} \ 00000040 0010A0E3 MOV R1,#+0 \ 00000044 02002DE9 PUSH {R1} \ 00000048 02002DE9 PUSH {R1} \ 0000004C 02002DE9 PUSH {R1} \ 00000050 F630D0E1 LDRSH R3,[R0, #+6] \ 00000054 F420D0E1 LDRSH R2,[R0, #+4] \ 00000058 F210D0E1 LDRSH R1,[R0, #+2] \ 0000005C F000D0E1 LDRSH R0,[R0, #+0] \ 00000060 021041E2 SUB R1,R1,#+2 \ 00000064 500100EF SWI +336 988 // DrawSoftKeys(LG_TEXT,LG_CLOSE); 989 XS_DrawList(); \ 00000068 ........ BL XS_DrawList 990 // GBS_StartTimerProc(&xstmr, 216, XSRedraw); 991 } \ 0000006C 18D08DE2 ADD SP,SP,#+24 \ 00000070 0080BDE8 POP {PC} ;; return 992 \ In segment CODE, align 4, keep-with-next 993 static void XS_onCreate(MAIN_GUI *data, void *(*malloc_adr)(int)) 994 { \ XS_onCreate: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 995 #ifdef ELKA 996 #ifndef ICONBAR 997 DisableIconBar(1); \ 00000008 0100A0E3 MOV R0,#+1 \ 0000000C 3B0200EF SWI +571 998 #endif 999 #endif 1000 if(isSystemFont) clfont=100+pngFont; \ 00000010 28019FE5 LDR R0,??XS_onCreate_0 ;; isSystemFont \ 00000014 000090E5 LDR R0,[R0, #+0] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 0300000A BEQ ??XS_onCreate_1 \ 00000020 1C019FE5 LDR R0,??XS_onCreate_0+0x4 ;; pngFont \ 00000024 000090E5 LDR R0,[R0, #+0] \ 00000028 640080E2 ADD R0,R0,#+100 \ 0000002C 000000EA B ??XS_onCreate_2 1001 else clfont=2; \ ??XS_onCreate_1: \ 00000030 0200A0E3 MOV R0,#+2 \ ??XS_onCreate_2: \ 00000034 ........ LDR R6,??DataTable52 ;; clfont 1002 xs_font=clfont; \ 00000038 ........ LDR R5,??DataTable53 ;; xs_rc \ 0000003C 000086E5 STR R0,[R6, #+0] \ 00000040 140085E5 STR R0,[R5, #+20] 1003 DrawSoftKeys(LG_SELECT,LG_CLOSE);//рисуем софты и фоткаем их ;) \ 00000044 ........ LDR R0,??DataTable54 ;; `?` \ 00000048 081080E2 ADD R1,R0,#+8 \ 0000004C ........ _BLF DrawSoftKeys,??DrawSoftKeys??rA 1004 DoScreen2(); \ 00000050 ........ _BLF DoScreen2,??DoScreen2??rA 1005 InitXText(); \ 00000054 ........ BL InitXText 1006 #ifdef ELKA 1007 xs_rc.x=30; \ 00000058 1E00A0E3 MOV R0,#+30 \ 0000005C B000C5E1 STRH R0,[R5, #+0] 1008 xs_rc.x2=ScreenW()-10; \ 00000060 888100EF SWI +33160 \ 00000064 0A0040E2 SUB R0,R0,#+10 \ 00000068 B400C5E1 STRH R0,[R5, #+4] 1009 #else 1010 xs_rc.x=10; 1011 xs_rc.x2=ScreenW()-5; 1012 #endif 1013 xs_rc.y=YDISP+2; \ 0000006C 1A00A0E3 MOV R0,#+26 \ 00000070 B200C5E1 STRH R0,[R5, #+2] 1014 xs_rc.y2=ScreenH()-(FontH(clfont)*2)-4; \ 00000074 898100EF SWI +33161 \ 00000078 0070A0E1 MOV R7,R0 \ 0000007C 000096E5 LDR R0,[R6, #+0] \ 00000080 ........ _BLF FontH,??FontH??rA \ 00000084 800047E0 SUB R0,R7,R0, LSL #+1 \ 00000088 040040E2 SUB R0,R0,#+4 \ 0000008C B600C5E1 STRH R0,[R5, #+6] 1015 1016 int i=sdiv((FontH(clfont)+1),(xs_rc.y2-xs_rc.y));// кол-во итемов \ 00000090 000096E5 LDR R0,[R6, #+0] \ 00000094 ........ _BLF FontH,??FontH??rA \ 00000098 F610D5E1 LDRSH R1,[R5, #+6] \ 0000009C F220D5E1 LDRSH R2,[R5, #+2] \ 000000A0 010080E2 ADD R0,R0,#+1 \ 000000A4 021041E0 SUB R1,R1,R2 \ 000000A8 B80000EF SWI +184 \ 000000AC 0070A0E1 MOV R7,R0 1017 1018 xs_rc.y2=xs_rc.y+(FontH(clfont)*i)+2; \ 000000B0 000096E5 LDR R0,[R6, #+0] \ 000000B4 ........ _BLF FontH,??FontH??rA \ 000000B8 F210D5E1 LDRSH R1,[R5, #+2] \ 000000BC 801700E1 SMLABB R0,R0,R7,R1 1019 1020 xs_curpos=CurrentXStatus; 1021 if(xs_curpos > 5 && xs_curpos < total_xstatuses-xs_itemFromDisp) \ 000000C0 ........ LDR R1,??DataTable55 ;; total_xstatuses \ 000000C4 020080E2 ADD R0,R0,#+2 \ 000000C8 B600C5E1 STRH R0,[R5, #+6] \ 000000CC ........ LDR R0,??DataTable59 ;; CurrentXStatus \ 000000D0 000090E5 LDR R0,[R0, #+0] \ 000000D4 100085E5 STR R0,[R5, #+16] \ 000000D8 060050E3 CMP R0,#+6 \ 000000DC 050000BA BLT ??XS_onCreate_3 \ 000000E0 002091E5 LDR R2,[R1, #+0] \ 000000E4 0C3095E5 LDR R3,[R5, #+12] \ 000000E8 032042E0 SUB R2,R2,R3 \ 000000EC 020050E1 CMP R0,R2 1022 xstartItem=xs_curpos-5; \ 000000F0 050040B2 SUBLT R0,R0,#+5 \ 000000F4 090000BA BLT ??XS_onCreate_4 1023 else 1024 if(xs_curpos > total_xstatuses-xs_itemFromDisp) \ ??XS_onCreate_3: \ 000000F8 0C2095E5 LDR R2,[R5, #+12] \ 000000FC 003091E5 LDR R3,[R1, #+0] \ 00000100 023043E0 SUB R3,R3,R2 \ 00000104 000053E1 CMP R3,R0 1025 // xstartItem=total_xstatuses-CurrentXStatus; 1026 xstartItem=total_xstatuses-xs_itemFromDisp; \ 00000108 000091B5 LDRLT R0,[R1, #+0] \ 0000010C 020040B0 SUBLT R0,R0,R2 \ 00000110 020000BA BLT ??XS_onCreate_4 1027 else 1028 if(xs_curpos < 5) \ 00000114 050050E3 CMP R0,#+5 \ 00000118 010000AA BGE ??XS_onCreate_5 1029 xstartItem=0; \ 0000011C 0000A0E3 MOV R0,#+0 \ ??XS_onCreate_4: \ 00000120 080085E5 STR R0,[R5, #+8] 1030 1031 SetCanvasFlag(1); \ ??XS_onCreate_5: \ 00000124 0100A0E3 MOV R0,#+1 \ 00000128 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 1032 SetScrollEdgeDelay(1); \ 0000012C 0100A0E3 MOV R0,#+1 \ 00000130 ........ _BLF SetScrollEdgeDelay,??SetScrollEdgeDelay??rA 1033 data->gui.state=1; \ 00000134 0100A0E3 MOV R0,#+1 \ 00000138 0C00C4E5 STRB R0,[R4, #+12] 1034 } \ 0000013C F080BDE8 POP {R4-R7,PC} ;; return \ ??XS_onCreate_0: \ 00000140 ........ DC32 isSystemFont \ 00000144 ........ DC32 pngFont 1035 \ In segment CODE, align 4, keep-with-next 1036 static void XS_onClose(MAIN_GUI *data, void (*mfree_adr)(void *)) 1037 { \ XS_onClose: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 1038 mfree(screen2.bitmap); \ 00000008 ........ LDR R0,??DataTable57 ;; screen2 + 8 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 150000EF SWI +21 1039 FreeXSTList(); \ 00000014 ........ BL FreeXSTList 1040 GBS_DelTimer(&xstmr); \ 00000018 0C009FE5 LDR R0,??XS_onClose_0 ;; xstmr \ 0000001C 8C0100EF SWI +396 1041 data->gui.state=0; \ 00000020 0000A0E3 MOV R0,#+0 \ 00000024 0C00C4E5 STRB R0,[R4, #+12] 1042 } \ 00000028 1080BDE8 POP {R4,PC} ;; return \ ??XS_onClose_0: \ 0000002C ........ DC32 xstmr 1043 \ In segment CODE, align 4, keep-with-next 1044 static void XS_onFocus(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) 1045 { \ XS_onFocus: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 1046 #ifdef ELKA 1047 #ifndef ICONBAR 1048 DisableIconBar(1); \ 00000008 0100A0E3 MOV R0,#+1 \ 0000000C 3B0200EF SWI +571 1049 #endif 1050 #endif 1051 data->gui.state=2; \ 00000010 0200A0E3 MOV R0,#+2 \ 00000014 0C00C4E5 STRB R0,[R4, #+12] 1052 DisableIDLETMR(); \ 00000018 7F0100EF SWI +383 1053 } \ 0000001C 1080BDE8 POP {R4,PC} ;; return 1054 \ In segment CODE, align 4, keep-with-next 1055 static void XS_onUnfocus(MAIN_GUI *data, void (*mfree_adr)(void *)) 1056 { 1057 if (data->gui.state!=2) return; \ XS_onUnfocus: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 1058 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 1059 } \ 00000010 1EFF2FE1 BX LR ;; return 1060 \ In segment CODE, align 4, keep-with-next 1061 static int XS_OnKey(MAIN_GUI *data, GUI_MSG *msg) 1062 { \ XS_OnKey: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0140A0E1 MOV R4,R1 1063 DirectRedrawGUI(); \ 00000008 3F0100EF SWI +319 1064 int k=msg->gbsmsg->submess; \ 0000000C 045094E5 LDR R5,[R4, #+4] 1065 1066 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 0A00001A BNE ??XS_OnKey_0 1067 { 1068 switch(k) \ 00000030 040054E2 SUBS R0,R4,#+4 \ 00000034 08005012 SUBSNE R0,R0,#+8 \ 00000038 5400000A 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 4E00000A BEQ ??XS_OnKey_1 \ 00000054 000000EA B ??XS_OnKey_0 1069 { 1070 case UP_BUTTON: XS_MoveUp(); break; \ ??XS_OnKey_2: \ 00000058 ........ BL XS_MoveUp 1071 case DOWN_BUTTON: XS_MoveDown(); break; 1072 case LEFT_BUTTON: case RIGHT_SOFT:case RED_BUTTON: return (1); 1073 // case ENTER_BUTTON: case LEFT_SOFT: ((void (*)(void))(menuprocs[mm_curpos]))(); REDRAW(); break; 1074 } 1075 } 1076 1077 if (msg->gbsmsg->msg==KEY_DOWN) \ ??XS_OnKey_0: \ 0000005C 040095E5 LDR R0,[R5, #+4] \ 00000060 060050E1 CMP R0,R6 \ 00000064 4D00001A BNE ??XS_OnKey_4 1078 { 1079 switch(k) \ 00000068 ........ LDR R5,??DataTable58 ;; xs_rc \ 0000006C 014054E2 SUBS R4,R4,#+1 \ 00000070 100095E5 LDR R0,[R5, #+16] \ 00000074 4700000A BEQ ??XS_OnKey_5 \ 00000078 194054E2 SUBS R4,R4,#+25 \ 0000007C 0300000A BEQ ??XS_OnKey_6 \ 00000080 244054E2 SUBS R4,R4,#+36 \ 00000084 4300000A BEQ ??XS_OnKey_5 \ 00000088 0000A0E3 MOV R0,#+0 \ 0000008C 7080BDE8 POP {R4-R6,PC} 1080 { 1081 case ENTER_BUTTON: 1082 Change_XStatus(xs_curpos); \ ??XS_OnKey_6: \ 00000090 ........ LDR R1,??DataTable59 ;; CurrentXStatus \ 00000094 000081E5 STR R0,[R1, #+0] \ 00000098 ........ _BLF set_my_xstatus,??set_my_xstatus??rA \ 0000009C ........ _BLF SetIconBarHandler,??SetIconBarHandler??rA \ 000000A0 ........ LDR R0,??DataTable60 ;; WriteDefSettings \ 000000A4 710100EF SWI +369 1083 if(ind_set_xstatus) \ 000000A8 F8009FE5 LDR R0,??XS_OnKey_7 ;; ind_set_xstatus \ 000000AC 000090E5 LDR R0,[R0, #+0] \ 000000B0 000050E3 CMP R0,#+0 \ 000000B4 3000000A BEQ ??XS_OnKey_8 1084 { 1085 int i=xs_curpos; \ 000000B8 100095E5 LDR R0,[R5, #+16] 1086 Is_Vibra_Enabled=def_set[i].vibra_status; \ 000000BC E8209FE5 LDR R2,??XS_OnKey_7+0x4 ;; def_set \ 000000C0 0C10A0E3 MOV R1,#+12 \ 000000C4 912020E0 MLA R0,R1,R0,R2 \ 000000C8 E0109FE5 LDR R1,??XS_OnKey_7+0x8 ;; Is_Vibra_Enabled \ 000000CC 0020D0E5 LDRB R2,[R0, #+0] \ 000000D0 012002E2 AND R2,R2,#0x1 \ 000000D4 002081E5 STR R2,[R1, #+0] 1087 #ifdef NEWSGOLD 1088 Is_Id3tag_Enabled=def_set[i].Id3tag_status; \ 000000D8 0920D0E5 LDRB R2,[R0, #+9] \ 000000DC D0109FE5 LDR R1,??XS_OnKey_7+0xC ;; Is_Id3tag_Enabled \ 000000E0 002081E5 STR R2,[R1, #+0] 1089 #endif 1090 Is_Sounds_Enabled=def_set[i].sound_status; \ 000000E4 0020D0E5 LDRB R2,[R0, #+0] \ 000000E8 C8109FE5 LDR R1,??XS_OnKey_7+0x10 ;; Is_Sounds_Enabled \ 000000EC 022002E2 AND R2,R2,#0x2 \ 000000F0 A220A0E1 LSR R2,R2,#+1 \ 000000F4 002081E5 STR R2,[R1, #+0] 1091 #ifdef ELKA 1092 Is_SLI_On=def_set[i].sli_state; \ 000000F8 0320D0E5 LDRB R2,[R0, #+3] \ 000000FC B8109FE5 LDR R1,??XS_OnKey_7+0x14 ;; Is_SLI_On \ 00000100 012002E2 AND R2,R2,#0x1 \ 00000104 002081E5 STR R2,[R1, #+0] 1093 #endif 1094 Is_SMARTCPU_On=def_set[i].smartcpu_state; \ 00000108 0420D0E5 LDRB R2,[R0, #+4] \ 0000010C AC109FE5 LDR R1,??XS_OnKey_7+0x18 ;; Is_SMARTCPU_On \ 00000110 002081E5 STR R2,[R1, #+0] 1095 Is_INC_On=def_set[i].inc_state; \ 00000114 0510D0E5 LDRB R1,[R0, #+5] \ 00000118 A4209FE5 LDR R2,??XS_OnKey_7+0x1C ;; Is_INC_On \ 0000011C 013001E2 AND R3,R1,#0x1 \ 00000120 003082E5 STR R3,[R2, #+0] 1096 Is_ILU_On=def_set[i].ilu_state; \ 00000124 9C209FE5 LDR R2,??XS_OnKey_7+0x20 ;; Is_ILU_On \ 00000128 021001E2 AND R1,R1,#0x2 \ 0000012C A110A0E1 LSR R1,R1,#+1 \ 00000130 001082E5 STR R1,[R2, #+0] 1097 Is_PING_On=def_set[i].ping_state; \ 00000134 0720D0E5 LDRB R2,[R0, #+7] \ 00000138 8C109FE5 LDR R1,??XS_OnKey_7+0x24 ;; Is_PING_On \ 0000013C 002081E5 STR R2,[R1, #+0] 1098 Is_UPTIME_On=def_set[i].uptime_state; \ 00000140 0820D0E5 LDRB R2,[R0, #+8] \ 00000144 84109FE5 LDR R1,??XS_OnKey_7+0x28 ;; Is_UPTIME_On \ 00000148 002081E5 STR R2,[R1, #+0] 1099 Is_Show_Offline=def_set[i].off_contacts; \ 0000014C 0120D0E5 LDRB R2,[R0, #+1] \ 00000150 7C109FE5 LDR R1,??XS_OnKey_7+0x2C ;; Is_Show_Offline \ 00000154 002081E5 STR R2,[R1, #+0] 1100 Is_Show_Groups=def_set[i].show_groups; \ 00000158 0220D0E5 LDRB R2,[R0, #+2] \ 0000015C 74109FE5 LDR R1,??XS_OnKey_7+0x30 ;; Is_Show_Groups \ 00000160 002081E5 STR R2,[R1, #+0] 1101 Is_Double_Vibra_On=def_set[i].remind_state; \ 00000164 0620D0E5 LDRB R2,[R0, #+6] \ 00000168 6C109FE5 LDR R1,??XS_OnKey_7+0x34 ;; Is_Double_Vibra_On \ 0000016C 002081E5 STR R2,[R1, #+0] 1102 Show_XTX=def_set[i].isXTX;//Показывать хстатус или время он лайн \ 00000170 0A00D0E5 LDRB R0,[R0, #+10] \ 00000174 64109FE5 LDR R1,??XS_OnKey_7+0x38 ;; Show_XTX \ 00000178 000081E5 STR R0,[R1, #+0] 1103 } 1104 DrawHeader(); \ ??XS_OnKey_8: \ 0000017C ........ _BLF DrawHeader,??DrawHeader??rA 1105 return(1); \ 00000180 0100A0E3 MOV R0,#+1 \ 00000184 7080BDE8 POP {R4-R6,PC} \ ??XS_OnKey_3: \ 00000188 ........ BL XS_MoveDown \ 0000018C B2FFFFEA B ??XS_OnKey_0 \ ??XS_OnKey_1: \ 00000190 0100A0E3 MOV R0,#+1 \ 00000194 7080BDE8 POP {R4-R6,PC} 1106 case LEFT_SOFT: case RIGHT_BUTTON: 1107 EditXStatus(xs_curpos); \ ??XS_OnKey_5: \ 00000198 ........ BL EditXStatus 1108 REDRAW(); \ 0000019C 720100EF SWI +370 1109 break; 1110 } 1111 } 1112 return(0); \ ??XS_OnKey_4: \ 000001A0 0000A0E3 MOV R0,#+0 \ 000001A4 7080BDE8 POP {R4-R6,PC} ;; return \ ??XS_OnKey_7: \ 000001A8 ........ DC32 ind_set_xstatus \ 000001AC ........ DC32 def_set \ 000001B0 ........ DC32 Is_Vibra_Enabled \ 000001B4 ........ DC32 Is_Id3tag_Enabled \ 000001B8 ........ DC32 Is_Sounds_Enabled \ 000001BC ........ DC32 Is_SLI_On \ 000001C0 ........ DC32 Is_SMARTCPU_On \ 000001C4 ........ DC32 Is_INC_On \ 000001C8 ........ DC32 Is_ILU_On \ 000001CC ........ DC32 Is_PING_On \ 000001D0 ........ DC32 Is_UPTIME_On \ 000001D4 ........ DC32 Is_Show_Offline \ 000001D8 ........ DC32 Is_Show_Groups \ 000001DC ........ DC32 Is_Double_Vibra_On \ 000001E0 ........ DC32 Show_XTX 1113 } 1114 1115 extern void kill_data(void *p, void (*func_p)(void *)); 1116 \ In segment CODE, align 4, keep-with-next 1117 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 1118 int XS_method9(void){return(0);} \ XS_method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 1119 \ In segment DATA_C, align 4, align-sorted 1120 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 1121 (void *)XS_OnRedraw, 1122 (void *)XS_onCreate, 1123 (void *)XS_onClose, 1124 (void *)XS_onFocus, 1125 (void *)XS_onUnfocus, 1126 (void *)XS_OnKey, 1127 0, 1128 (void *)kill_data, 1129 (void *)XS_method8, 1130 (void *)XS_method9, 1131 0 1132 }; 1133 1134 const RECT XS_Canvas={0,0,0,0}; \ XS_Canvas: \ 0000002C 000000000000 DC16 0, 0, 0, 0 \ 0000 1135 \ In segment CODE, align 4, keep-with-next 1136 void CreateXSMenu() 1137 { \ CreateXSMenu: \ 00000000 10402DE9 PUSH {R4,LR} 1138 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000004 4000A0E3 MOV R0,#+64 \ 00000008 140000EF SWI +20 \ 0000000C 0040A0E1 MOV R4,R0 1139 zeromem(main_gui,sizeof(MAIN_GUI)); \ 00000010 4010A0E3 MOV R1,#+64 \ 00000014 1D0100EF SWI +285 1140 main_gui->gui.canvas=(void *)(&XS_Canvas); \ 00000018 24009FE5 LDR R0,??CreateXSMenu_0 ;; gui_methods_XS \ 0000001C 2C1080E2 ADD R1,R0,#+44 \ 00000020 001084E5 STR R1,[R4, #+0] 1141 main_gui->gui.methods=(void *)gui_methods_XS; \ 00000024 040084E5 STR R0,[R4, #+4] 1142 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000028 158000EF SWI +32789 \ 0000002C 200084E5 STR R0,[R4, #+32] 1143 //patch_rect((RECT*)&Canvas,0,YDISP,ScreenW()-1,ScreenH()-1); 1144 XSC_ID=CreateGUI(main_gui); \ 00000030 0400A0E1 MOV R0,R4 \ 00000034 370100EF SWI +311 \ 00000038 ........ LDR R1,??DataTable61 ;; XSC_ID \ 0000003C 000081E5 STR R0,[R1, #+0] 1145 } \ 00000040 1080BDE8 POP {R4,PC} ;; return \ ??CreateXSMenu_0: \ 00000044 ........ DC32 gui_methods_XS \ In segment CODE, align 4, keep-with-next \ ??DataTable1: \ 00000000 ........ DC32 transparent \ In segment CODE, align 4, keep-with-next \ ??DataTable2: \ 00000000 ........ DC32 clrWhite \ In segment CODE, align 4, keep-with-next \ ??DataTable3: \ 00000000 ........ DC32 MMCursorBGClr \ In segment CODE, align 4, keep-with-next \ ??DataTable4: \ 00000000 ........ DC32 MMCursorClr \ In segment CODE, align 4, keep-with-next \ ??DataTable7: \ 00000000 ........ DC32 hy \ In segment CODE, align 4, keep-with-next \ ??DataTable8: \ 00000000 ........ DC32 screen2 \ In segment CODE, align 4, keep-with-next \ ??DataTable9: \ 00000000 ........ DC32 MMBackgrClr \ In segment CODE, align 4, keep-with-next \ ??DataTable11: \ 00000000 ........ DC32 MMBackgrBordClr \ In segment CODE, align 4, keep-with-next \ ??DataTable12: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable13: \ 00000000 ........ DC32 _rc \ In segment CODE, align 4, keep-with-next \ ??DataTable14: \ 00000000 ........ DC32 clfont \ In segment CODE, align 4, keep-with-next \ ??DataTable16: \ 00000000 ........ DC32 screen2 + 8 \ In segment CODE, align 4, keep-with-next \ ??DataTable17: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable18: \ 00000000 ........ DC32 CurrentStatus \ In segment CODE, align 4, keep-with-next \ ??DataTable19: \ 00000000 ........ DC32 _rc \ In segment CODE, align 4, keep-with-next \ ??DataTable25: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable26: \ 00000000 ........ DC32 XS_FILE_NAME \ In segment CODE, align 4, keep-with-next \ ??DataTable28: \ 00000000 ........ DC32 XStatusText \ In segment CODE, align 4, keep-with-next \ ??DataTable35: \ 00000000 ........ DC32 xtexttop \ In segment CODE, align 4, keep-with-next \ ??DataTable39: \ 00000000 ........ DC32 transparent \ In segment CODE, align 4, keep-with-next \ ??DataTable40: \ 00000000 ........ DC32 clrWhite \ In segment CODE, align 4, keep-with-next \ ??DataTable41: \ 00000000 ........ DC32 MMCursorBGClr \ In segment CODE, align 4, keep-with-next \ ??DataTable42: \ 00000000 ........ DC32 MMCursorClr \ In segment CODE, align 4, keep-with-next \ ??DataTable47: \ 00000000 ........ DC32 hy \ In segment CODE, align 4, keep-with-next \ ??DataTable48: \ 00000000 ........ DC32 screen2 \ In segment CODE, align 4, keep-with-next \ ??DataTable49: \ 00000000 ........ DC32 MMBackgrClr \ In segment CODE, align 4, keep-with-next \ ??DataTable51: \ 00000000 ........ DC32 MMBackgrBordClr \ In segment CODE, align 4, keep-with-next \ ??DataTable52: \ 00000000 ........ DC32 clfont \ In segment CODE, align 4, keep-with-next \ ??DataTable53: \ 00000000 ........ DC32 xs_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable54: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable55: \ 00000000 ........ DC32 total_xstatuses \ In segment CODE, align 4, keep-with-next \ ??DataTable57: \ 00000000 ........ DC32 screen2 + 8 \ In segment CODE, align 4, keep-with-next \ ??DataTable58: \ 00000000 ........ DC32 xs_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable59: \ 00000000 ........ DC32 CurrentXStatus \ In segment CODE, align 4, keep-with-next \ ??DataTable60: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable61: \ 00000000 ........ DC32 XSC_ID \ 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 DC32 0 \ `?`: \ 0000003C 00000000 DC8 0, 0, 0, 0 \ 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 CEF2EEF8B8EB DC8 "\316\362\356\370\270\353" \ 00 \ 00000007 00 DC8 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 C7EBEEE900 DC8 "\307\353\356\351" \ 00000005 000000 DC8 0, 0, 0 \ 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 C6F0F300 DC8 "\306\360\363" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 536176652100 DC8 "Save!" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 1, align-sorted \ `?`: \ 00000000 00 DC8 "" \ 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 257300 DC8 "%s" \ In segment DATA_C, align 1, align-sorted \ 00000000 256400 DC8 "%d" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2FBE1EEF000 DC8 "\302\373\341\356\360" \ 00000006 0000 DC8 0, 0 \ 00000008 C7E0EAF0FBF2 DC8 "\307\340\352\360\373\362\374" \ FC00 \ 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 \ `? 64 ? 24 ? 8 ? 8 ? 76 ? 8 ? 8 ? 8 ? 8 ? 4 ? 8 ? 1 ? 12 ? 3 ? 3 ? 16 ? 8 ?