############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 08/Jul/2011 13:41:22 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\status_change.c # # Command line = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\status_change.c # # -D NEWSGOLD -D ELKA -D GUI_INTERFACE -D ICONBAR -D # # kluchnik --preprocess D:\pasha\elf\_MY_PROJECT_\_NAT # # ICQ2\kluchnik\List\ -lC D:\pasha\elf\_MY_PROJECT_\_N # # ATICQ2\kluchnik\List\ -o D:\pasha\elf\_MY_PROJECT_\_ # # NATICQ2\kluchnik\Obj\ -s9 --no_unroll --cpu_mode # # arm --endian little --cpu ARM926EJ-S --stack_align # # 4 --interwork -e --fpu None --dlib_config # # "D:\pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\LIB\dl5tpainl8n.h" -I # # "D:\pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\INC\" --inline_threshold=2 # # List file = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\kluchnik\List\sta # # tus_change.lst # # Object file = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\kluchnik\Obj\stat # # us_change.r79 # # # # # ############################################################################## D:\pasha\elf\_MY_PROJECT_\_NATICQ2\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 "lang.h" 13 #include "rect_patcher.h" 14 #ifdef GUI_INTERFACE 15 #include "externals.h" 16 #endif 17 18 //=============================================================================================== 19 /* 20 // ELKA Compatibility 21 #pragma inline 22 static void patch_header(const HEADER_DESC* head) 23 { 24 ((HEADER_DESC *)head)->rc.x=0; 25 ((HEADER_DESC *)head)->rc.y=YDISP; 26 ((HEADER_DESC *)head)->rc.x2=ScreenW()-1; 27 ((HEADER_DESC *)head)->rc.y2=HeaderH()-1+YDISP; 28 } 29 #pragma inline 30 void patch_input(const INPUTDIA_DESC* inp) 31 { 32 ((INPUTDIA_DESC *)inp)->rc.x = 0; 33 ((INPUTDIA_DESC *)inp)->rc.y = HeaderH() + 1 + YDISP; 34 ((INPUTDIA_DESC *)inp)->rc.x2=ScreenW() - 1; 35 ((INPUTDIA_DESC *)inp)->rc.y2=ScreenH() - SoftkeyH() - 1; 36 }*/ 37 //=============================================================================================== 38 39 extern const char TEMPLATES_PATH[]; \ In segment DATA_C, align 4, align-sorted 40 static const char XS_FILE_NAME[]="\\XStatuses.txt"; \ XS_FILE_NAME: \ 00000000 5C5853746174 DC8 "\\XStatuses.txt" \ 757365732E74 \ 787400 \ 0000000F 00 DC8 0 41 42 \ In segment DATA_Z, align 4, align-sorted 43 char *XStatusText; \ XStatusText: \ 00000000 DS8 4 44 45 extern int CurrentStatus; 46 extern int CurrentXStatus; 47 extern int S_ICONS[]; 48 49 #pragma inline 50 static void Change_Status(int status) 51 { 52 CurrentStatus=status; 53 set_my_status(); 54 SUBPROC((void*)WriteDefSettings); 55 } 56 57 #pragma inline 58 static void Change_XStatus(int xstatus) 59 { 60 CurrentXStatus=xstatus; 61 set_my_xstatus(); 62 SUBPROC((void*)WriteDefSettings); 63 } 64 65 /////////////////////////////////////////////////////////////////////////////// 66 #pragma inline 67 static unsigned int GetStatusIndexInMenu(unsigned int status) 68 { 69 switch(status) 70 { 71 case IS_ONLINE: {return 0;} 72 case IS_AWAY: {return 1;} 73 case IS_NA: {return 2;} 74 case IS_DND: {return 3;} 75 case IS_OCCUPIED: {return 4;} 76 case IS_FFC: {return 5;} 77 case IS_INVISIBLE: {return 6;} 78 case IS_DEPRESSION: return 7; 79 case IS_EVIL: return 8; 80 case IS_HOME: return 9; 81 case IS_LUNCH: return 10; 82 case IS_WORK: return 11; 83 } 84 return 0; 85 } 86 87 #pragma inline 88 static unsigned int GetStatusInMenuByPos(int pos) 89 { 90 switch(pos) 91 { 92 case 0: 93 return IS_ONLINE; 94 case 1: 95 return IS_AWAY; 96 case 2: 97 return IS_NA; 98 case 3: 99 return IS_DND; 100 case 4: 101 return IS_OCCUPIED; 102 case 5: 103 return IS_FFC; 104 case 6: 105 return IS_INVISIBLE; 106 case 7: 107 return IS_DEPRESSION; 108 case 8: 109 return IS_EVIL; 110 case 9: 111 return IS_HOME; 112 case 10: 113 return IS_LUNCH; 114 case 11: 115 return IS_WORK; 116 } 117 return IS_UNKNOWN; 118 } 119 120 #define STATUSES_NUM 12 121 \ In segment DATA_Z, align 4, align-sorted 122 static char * menutexts[STATUSES_NUM]= 123 { 124 NULL, 125 NULL, 126 NULL, 127 NULL, 128 NULL, 129 NULL, 130 NULL, 131 NULL, 132 NULL, 133 NULL, 134 NULL, 135 NULL 136 }; 137 138 139 #ifndef GUI_INTERFACE 140 141 #else //#ifndef GUI 142 143 144 //------------------------------------------ 145 146 147 static GUIMENU stmenu; \ stmenu: \ 00000000 DS8 120 \ 00000078 DS8 48 148 extern void InitMMenu(); 149 int XStatusChange_ID; 150 151 152 //------------------------------------------ 153 154 /* 155 * Функция: SC_DrawList 156 * Описание: Отрисовка меню выбора статусов 157 * Параметры: Никаких 158 * Возвращаемое значение: Ничего не возвращает 159 */ \ In segment CODE, align 4, keep-with-next 160 void SC_DrawList() 161 { 162 int font_y = FontH(MMFont)+1; \ SC_DrawList: \ 00000000 ........ LDR R1,??DataTable15 ;; MMFont \ 00000004 304C2DE9 PUSH {R4,R5,R10,R11,LR} 163 // int scr_h = ScreenH()-1; 164 // int scr_w = ScreenW()-1; 165 166 LockSched(); 167 168 int i=0; 169 int start_y = 0; 170 int start_x = stmenu.rc.x + 2; \ 00000008 ........ LDR R5,??DataTable21 ;; stmenu \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 08108DE5 STR R1,[SP, #+8] \ 00000018 0100A0E1 MOV R0,R1 \ 0000001C C50100EF SWI +453 \ 00000020 460100EF SWI +326 \ 00000024 F017D5E1 LDRSH R1,[R5, #+112] \ 00000028 0040A0E3 MOV R4,#+0 \ 0000002C 021081E2 ADD R1,R1,#+2 \ 00000030 0C108DE5 STR R1,[SP, #+12] 171 172 RECT rc; 173 #ifdef ELKA 174 stmenu.itemFromDisp = sdiv( FontH(MMFont) , stmenu.rc.y2-stmenu.rc.y ); \ 00000034 08009DE5 LDR R0,[SP, #+8] \ 00000038 C50100EF SWI +453 \ 0000003C F617D5E1 LDRSH R1,[R5, #+118] \ 00000040 F227D5E1 LDRSH R2,[R5, #+114] \ 00000044 021041E0 SUB R1,R1,R2 \ 00000048 B80000EF SWI +184 175 #else 176 stmenu.itemFromDisp = sdiv( FontH(MMFont) , stmenu.rc.y2-stmenu.rc.y ) - 3; 177 #endif 178 179 if(stmenu.itemFromDisp > STATUSES_NUM) stmenu.itemFromDisp = STATUSES_NUM; \ 0000004C 0D0050E3 CMP R0,#+13 \ 00000050 0C00A023 MOVCS R0,#+12 \ 00000054 040085E5 STR R0,[R5, #+4] \ 00000058 000095E5 LDR R0,[R5, #+0] \ 0000005C 0B0050E3 CMP R0,#+11 \ 00000060 1D00008A BHI ??SC_DrawList_3 \ 00000064 011F8FE2 ADR R1,??SC_DrawList_0 \ 00000068 0010D1E7 LDRB R1,[R1, R0] \ 0000006C 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??SC_DrawList_0: \ 00000070 02040608 DC8 +2,+4,+6,+8 \ 00000074 0A0C0E10 DC8 +10,+12,+14,+16 \ 00000078 12141618 DC8 +18,+20,+22,+24 180 181 //if( font_y < GetIconByItem(GetStatusInMenuByPos(stmenu.curpos))->h ) 182 font_y = GetIconByItem(GetStatusInMenuByPos(stmenu.curpos))->h + 2; \ ??SC_DrawList_4: \ 0000007C 0B00A0E3 MOV R0,#+11 \ 00000080 160000EA B ??SC_DrawList_5 \ ??SC_DrawList_6: \ 00000084 0200A0E3 MOV R0,#+2 \ 00000088 140000EA B ??SC_DrawList_5 \ ??SC_DrawList_7: \ 0000008C 0300A0E3 MOV R0,#+3 \ 00000090 120000EA B ??SC_DrawList_5 \ ??SC_DrawList_8: \ 00000094 0500A0E3 MOV R0,#+5 \ 00000098 100000EA B ??SC_DrawList_5 \ ??SC_DrawList_9: \ 0000009C 0400A0E3 MOV R0,#+4 \ 000000A0 0E0000EA B ??SC_DrawList_5 \ ??SC_DrawList_10: \ 000000A4 0C00A0E3 MOV R0,#+12 \ 000000A8 0C0000EA B ??SC_DrawList_5 \ ??SC_DrawList_11: \ 000000AC 0100A0E3 MOV R0,#+1 \ 000000B0 0A0000EA B ??SC_DrawList_5 \ ??SC_DrawList_12: \ 000000B4 0600A0E3 MOV R0,#+6 \ 000000B8 080000EA B ??SC_DrawList_5 \ ??SC_DrawList_13: \ 000000BC 0700A0E3 MOV R0,#+7 \ 000000C0 060000EA B ??SC_DrawList_5 \ ??SC_DrawList_14: \ 000000C4 0800A0E3 MOV R0,#+8 \ 000000C8 040000EA B ??SC_DrawList_5 \ ??SC_DrawList_15: \ 000000CC 0900A0E3 MOV R0,#+9 \ 000000D0 020000EA B ??SC_DrawList_5 \ ??SC_DrawList_16: \ 000000D4 0A00A0E3 MOV R0,#+10 \ 000000D8 000000EA B ??SC_DrawList_5 \ ??SC_DrawList_3: \ 000000DC 0E00A0E3 MOV R0,#+14 \ ??SC_DrawList_5: \ 000000E0 ........ _BLF GetIconByItem,??GetIconByItem??rA \ 000000E4 B200D0E1 LDRH R0,[R0, #+2] \ 000000E8 02A080E2 ADD R10,R0,#+2 183 184 while(i < stmenu.itemFromDisp) \ ??SC_DrawList_17: \ 000000EC 040095E5 LDR R0,[R5, #+4] \ 000000F0 000054E1 CMP R4,R0 \ 000000F4 8900002A BCS ??SC_DrawList_18 185 { 186 start_y = (stmenu.rc.y + 2 + (i*font_y)); \ 000000F8 F207D5E1 LDRSH R0,[R5, #+114] \ 000000FC 9A0420E0 MLA R0,R10,R4,R0 \ 00000100 02B080E2 ADD R11,R0,#+2 187 StoreXYXYtoRECT(&rc, start_x, start_y, stmenu.rc.x2, start_y + font_y); \ 00000104 0B008AE0 ADD R0,R10,R11 \ 00000108 01002DE9 PUSH {R0} \ 0000010C F437D5E1 LDRSH R3,[R5, #+116] \ 00000110 10109DE5 LDR R1,[SP, #+16] \ 00000114 0B20A0E1 MOV R2,R11 \ 00000118 04008DE2 ADD R0,SP,#+4 \ 0000011C 340100EF SWI +308 188 if( i + stmenu.startItem == stmenu.curpos) \ 00000120 140095E5 LDR R0,[R5, #+20] \ 00000124 001095E5 LDR R1,[R5, #+0] \ 00000128 040080E0 ADD R0,R0,R4 \ 0000012C 010050E1 CMP R0,R1 \ 00000130 04D08DE2 ADD SP,SP,#+4 \ 00000134 1000001A BNE ??SC_DrawList_19 189 DrawRoundedFrame(rc.x,rc.y-1,rc.x2-5,rc.y2-2,0,0,0,MMCursorClr,MMCursorBGClr); \ 00000138 ........ LDR R0,??DataTable2 ;; MMCursorBGClr \ 0000013C 01002DE9 PUSH {R0} \ 00000140 ........ LDR R0,??DataTable3 ;; MMCursorClr \ 00000144 01002DE9 PUSH {R0} \ 00000148 0000A0E3 MOV R0,#+0 \ 0000014C 01002DE9 PUSH {R0} \ 00000150 01002DE9 PUSH {R0} \ 00000154 01002DE9 PUSH {R0} \ 00000158 FA01DDE1 LDRSH R0,[SP, #+26] \ 0000015C 023040E2 SUB R3,R0,#+2 \ 00000160 F801DDE1 LDRSH R0,[SP, #+24] \ 00000164 052040E2 SUB R2,R0,#+5 \ 00000168 F601DDE1 LDRSH R0,[SP, #+22] \ 0000016C 011040E2 SUB R1,R0,#+1 \ 00000170 F401DDE1 LDRSH R0,[SP, #+20] \ 00000174 500100EF SWI +336 \ 00000178 14D08DE2 ADD SP,SP,#+20 190 191 DrwImage(GetIconByItem(GetStatusInMenuByPos(i+stmenu.startItem)),stmenu.rc.x+4,start_y,0); \ ??SC_DrawList_19: \ 0000017C 140095E5 LDR R0,[R5, #+20] \ 00000180 040080E0 ADD R0,R0,R4 \ 00000184 0B0050E3 CMP R0,#+11 \ 00000188 1D00008A BHI ??SC_DrawList_20 \ 0000018C 011F8FE2 ADR R1,??SC_DrawList_1 \ 00000190 0010D1E7 LDRB R1,[R1, R0] \ 00000194 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??SC_DrawList_1: \ 00000198 02040608 DC8 +2,+4,+6,+8 \ 0000019C 0A0C0E10 DC8 +10,+12,+14,+16 \ 000001A0 12141618 DC8 +18,+20,+22,+24 \ ??SC_DrawList_21: \ 000001A4 0B00A0E3 MOV R0,#+11 \ 000001A8 160000EA B ??SC_DrawList_22 \ ??SC_DrawList_23: \ 000001AC 0200A0E3 MOV R0,#+2 \ 000001B0 140000EA B ??SC_DrawList_22 \ ??SC_DrawList_24: \ 000001B4 0300A0E3 MOV R0,#+3 \ 000001B8 120000EA B ??SC_DrawList_22 \ ??SC_DrawList_25: \ 000001BC 0500A0E3 MOV R0,#+5 \ 000001C0 100000EA B ??SC_DrawList_22 \ ??SC_DrawList_26: \ 000001C4 0400A0E3 MOV R0,#+4 \ 000001C8 0E0000EA B ??SC_DrawList_22 \ ??SC_DrawList_27: \ 000001CC 0C00A0E3 MOV R0,#+12 \ 000001D0 0C0000EA B ??SC_DrawList_22 \ ??SC_DrawList_28: \ 000001D4 0100A0E3 MOV R0,#+1 \ 000001D8 0A0000EA B ??SC_DrawList_22 \ ??SC_DrawList_29: \ 000001DC 0600A0E3 MOV R0,#+6 \ 000001E0 080000EA B ??SC_DrawList_22 \ ??SC_DrawList_30: \ 000001E4 0700A0E3 MOV R0,#+7 \ 000001E8 060000EA B ??SC_DrawList_22 \ ??SC_DrawList_31: \ 000001EC 0800A0E3 MOV R0,#+8 \ 000001F0 040000EA B ??SC_DrawList_22 \ ??SC_DrawList_32: \ 000001F4 0900A0E3 MOV R0,#+9 \ 000001F8 020000EA B ??SC_DrawList_22 \ ??SC_DrawList_33: \ 000001FC 0A00A0E3 MOV R0,#+10 \ 00000200 000000EA B ??SC_DrawList_22 \ ??SC_DrawList_20: \ 00000204 0E00A0E3 MOV R0,#+14 \ ??SC_DrawList_22: \ 00000208 ........ _BLF GetIconByItem,??GetIconByItem??rA \ 0000020C F017D5E1 LDRSH R1,[R5, #+112] \ 00000210 0030A0E3 MOV R3,#+0 \ 00000214 0B20A0E1 MOV R2,R11 \ 00000218 041081E2 ADD R1,R1,#+4 \ 0000021C ........ _BLF DrwImage,??DrwImage??rA 192 DrawStr( menutexts[i+stmenu.startItem], 193 rc.x + 5 + GetIconByItem(GetStatusInMenuByPos(i+stmenu.startItem))->w, 194 rc.y, rc.x2-5, rc.y2, 195 0, MMFont, (char*)MMFontClr, 1); \ 00000220 140095E5 LDR R0,[R5, #+20] \ 00000224 040080E0 ADD R0,R0,R4 \ 00000228 0B0050E3 CMP R0,#+11 \ 0000022C 1D00008A BHI ??SC_DrawList_34 \ 00000230 011F8FE2 ADR R1,??SC_DrawList_2 \ 00000234 0010D1E7 LDRB R1,[R1, R0] \ 00000238 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??SC_DrawList_2: \ 0000023C 02040608 DC8 +2,+4,+6,+8 \ 00000240 0A0C0E10 DC8 +10,+12,+14,+16 \ 00000244 12141618 DC8 +18,+20,+22,+24 \ ??SC_DrawList_35: \ 00000248 0B00A0E3 MOV R0,#+11 \ 0000024C 160000EA B ??SC_DrawList_36 \ ??SC_DrawList_37: \ 00000250 0200A0E3 MOV R0,#+2 \ 00000254 140000EA B ??SC_DrawList_36 \ ??SC_DrawList_38: \ 00000258 0300A0E3 MOV R0,#+3 \ 0000025C 120000EA B ??SC_DrawList_36 \ ??SC_DrawList_39: \ 00000260 0500A0E3 MOV R0,#+5 \ 00000264 100000EA B ??SC_DrawList_36 \ ??SC_DrawList_40: \ 00000268 0400A0E3 MOV R0,#+4 \ 0000026C 0E0000EA B ??SC_DrawList_36 \ ??SC_DrawList_41: \ 00000270 0C00A0E3 MOV R0,#+12 \ 00000274 0C0000EA B ??SC_DrawList_36 \ ??SC_DrawList_42: \ 00000278 0100A0E3 MOV R0,#+1 \ 0000027C 0A0000EA B ??SC_DrawList_36 \ ??SC_DrawList_43: \ 00000280 0600A0E3 MOV R0,#+6 \ 00000284 080000EA B ??SC_DrawList_36 \ ??SC_DrawList_44: \ 00000288 0700A0E3 MOV R0,#+7 \ 0000028C 060000EA B ??SC_DrawList_36 \ ??SC_DrawList_45: \ 00000290 0800A0E3 MOV R0,#+8 \ 00000294 040000EA B ??SC_DrawList_36 \ ??SC_DrawList_46: \ 00000298 0900A0E3 MOV R0,#+9 \ 0000029C 020000EA B ??SC_DrawList_36 \ ??SC_DrawList_47: \ 000002A0 0A00A0E3 MOV R0,#+10 \ 000002A4 000000EA B ??SC_DrawList_36 \ ??SC_DrawList_34: \ 000002A8 0E00A0E3 MOV R0,#+14 \ ??SC_DrawList_36: \ 000002AC ........ _BLF GetIconByItem,??GetIconByItem??rA \ 000002B0 0110A0E3 MOV R1,#+1 \ 000002B4 02002DE9 PUSH {R1} \ 000002B8 ........ LDR R1,??DataTable4 ;; MMFontClr \ 000002BC 02002DE9 PUSH {R1} \ 000002C0 10109DE5 LDR R1,[SP, #+16] \ 000002C4 02002DE9 PUSH {R1} \ 000002C8 0010A0E3 MOV R1,#+0 \ 000002CC 02002DE9 PUSH {R1} \ 000002D0 F611DDE1 LDRSH R1,[SP, #+22] \ 000002D4 02002DE9 PUSH {R1} \ 000002D8 B000D0E1 LDRH R0,[R0, #+0] \ 000002DC F621DDE1 LDRSH R2,[SP, #+22] \ 000002E0 F811DDE1 LDRSH R1,[SP, #+24] \ 000002E4 053041E2 SUB R3,R1,#+5 \ 000002E8 F411DDE1 LDRSH R1,[SP, #+20] \ 000002EC 000081E0 ADD R0,R1,R0 \ 000002F0 051080E2 ADD R1,R0,#+5 \ 000002F4 140095E5 LDR R0,[R5, #+20] \ 000002F8 040080E0 ADD R0,R0,R4 \ 000002FC 000185E0 ADD R0,R5,R0, LSL #+2 \ 00000300 780090E5 LDR R0,[R0, #+120] 196 i++; \ 00000304 014084E2 ADD R4,R4,#+1 \ 00000308 ........ _BLF DrawStr,??DrawStr??rA 197 if(i+stmenu.startItem >= STATUSES_NUM) break; \ 0000030C 140095E5 LDR R0,[R5, #+20] \ 00000310 14D08DE2 ADD SP,SP,#+20 \ 00000314 040080E0 ADD R0,R0,R4 \ 00000318 0C0050E3 CMP R0,#+12 \ 0000031C 72FFFF3A BCC ??SC_DrawList_17 198 } 199 UnlockSched(); \ ??SC_DrawList_18: \ 00000320 470100EF SWI +327 200 } \ 00000324 3F8CBDE8 POP {R0-R5,R10,R11,PC} 201 202 203 //------------------------------------------ 204 205 206 // Управление курсором \ In segment CODE, align 4, keep-with-next 207 void SC_MoveUp(int i) 208 { 209 if(stmenu.curpos > stmenu.itemFromDisp + 2 ){ stmenu.curpos--; } \ SC_MoveUp: \ 00000000 ........ LDR R0,??DataTable21 ;; stmenu \ 00000004 001090E5 LDR R1,[R0, #+0] \ 00000008 043090E5 LDR R3,[R0, #+4] \ 0000000C 142090E5 LDR R2,[R0, #+20] \ 00000010 02C083E2 ADD R12,R3,#+2 \ 00000014 01005CE1 CMP R12,R1 \ 00000018 01104132 SUBCC R1,R1,#+1 \ 0000001C 0800003A BCC ??SC_MoveUp_0 210 else 211 if(stmenu.curpos > 0){ stmenu.curpos--; if(stmenu.startItem>0) stmenu.startItem--; } \ 00000020 010051E3 CMP R1,#+1 \ 00000024 040000BA BLT ??SC_MoveUp_1 \ 00000028 011041E2 SUB R1,R1,#+1 \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 0300000A BEQ ??SC_MoveUp_0 \ 00000034 012042E2 SUB R2,R2,#+1 \ 00000038 010000EA B ??SC_MoveUp_0 212 else 213 { 214 stmenu.curpos = STATUSES_NUM - 1; \ ??SC_MoveUp_1: \ 0000003C 0B10A0E3 MOV R1,#+11 215 stmenu.startItem = STATUSES_NUM - stmenu.itemFromDisp; \ 00000040 0C2063E2 RSB R2,R3,#+12 \ ??SC_MoveUp_0: \ 00000044 142080E5 STR R2,[R0, #+20] \ 00000048 001080E5 STR R1,[R0, #+0] 216 } 217 } \ 0000004C 1EFF2FE1 BX LR ;; return 218 219 \ In segment CODE, align 4, keep-with-next 220 void SC_MoveDown(int i) 221 { 222 if(stmenu.curpos ` \ 00000060 081080E2 ADD R1,R0,#+8 \ 00000064 ........ _BLF DrawSoftKeys,??DrawSoftKeys??rA 244 //UnlockSched(); 245 246 SC_DrawList(); \ 00000068 ........ BL SC_DrawList 247 } \ 0000006C 14D08DE2 ADD SP,SP,#+20 \ 00000070 0080BDE8 POP {PC} ;; return \ ??SC_OnRedraw_0: \ 00000074 ........ DC32 `?` 248 \ In segment CODE, align 4, keep-with-next 249 void SC_onCreate(MAIN_GUI *data, void *(*malloc_adr)(int)) 250 { \ SC_onCreate: \ 00000000 70402DE9 PUSH {R4-R6,LR} 251 #ifdef ELKA 252 #ifndef ICONBAR 253 DisableIconBar(1); 254 #endif 255 #endif 256 257 int HSIZE = (HeaderY+2)*ScreenW(); \ 00000004 ........ LDR R5,??DataTable12 ;; HeaderY \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 888100EF SWI +33160 \ 00000010 001095E5 LDR R1,[R5, #+0] \ 00000014 021081E2 ADD R1,R1,#+2 \ 00000018 900106E0 MUL R6,R0,R1 258 int ScrH = ScreenH()-(HeaderY+2); \ 0000001C 898100EF SWI +33161 \ 00000020 001095E5 LDR R1,[R5, #+0] 259 StatusChangeScreen = DoScreen(ScrH,HSIZE); 260 261 stmenu.rc = SRect; \ 00000024 ........ LDR R5,??DataTable21 ;; stmenu \ 00000028 010040E0 SUB R0,R0,R1 \ 0000002C 021040E2 SUB R1,R0,#+2 \ 00000030 ........ LDR R0,??DataTable14 ;; StatusChangeScreen \ 00000034 0620A0E1 MOV R2,R6 \ 00000038 ........ _BLF DoScreen,??DoScreen??rA \ 0000003C D4109FE5 LDR R1,??SC_onCreate_1 ;; SRect \ 00000040 700085E2 ADD R0,R5,#+112 \ 00000044 B020D1E1 LDRH R2,[R1, #0] \ 00000048 B020C0E1 STRH R2,[R0, #+0] \ 0000004C B220D1E1 LDRH R2,[R1, #+2] \ 00000050 B220C0E1 STRH R2,[R0, #+2] \ 00000054 B420D1E1 LDRH R2,[R1, #+4] \ 00000058 B420C0E1 STRH R2,[R0, #+4] \ 0000005C B620D1E1 LDRH R2,[R1, #+6] \ 00000060 B620C0E1 STRH R2,[R0, #+6] 262 stmenu.rc.y2 = stmenu.rc.y + (FontH(MMFont)*(STATUSES_NUM+2)); \ 00000064 ........ LDR R0,??DataTable15 ;; MMFont \ 00000068 000090E5 LDR R0,[R0, #+0] \ 0000006C C50100EF SWI +453 \ 00000070 F217D5E1 LDRSH R1,[R5, #+114] \ 00000074 0E20A0E3 MOV R2,#+14 \ 00000078 921020E0 MLA R0,R2,R0,R1 \ 0000007C B607C5E1 STRH R0,[R5, #+118] 263 stmenu.curpos = GetStatusIndexInMenu(CurrentStatus); \ 00000080 ........ LDR R0,??DataTable19 ;; CurrentStatus \ 00000084 000090E5 LDR R0,[R0, #+0] \ 00000088 010040E2 SUB R0,R0,#+1 \ 0000008C 0B0050E3 CMP R0,#+11 \ 00000090 0500008A BHI ??SC_onCreate_2 \ 00000094 011F8FE2 ADR R1,??SC_onCreate_0 \ 00000098 0010D1E7 LDRB R1,[R1, R0] \ 0000009C 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??SC_onCreate_0: \ 000000A0 0E04060A DC8 +14,+4,+6,+10 \ 000000A4 08101214 DC8 +8,+16,+18,+20 \ 000000A8 1618020C DC8 +22,+24,+2,+12 \ ??SC_onCreate_2: \ 000000AC 0000A0E3 MOV R0,#+0 \ 000000B0 140000EA B ??SC_onCreate_3 \ ??SC_onCreate_4: \ 000000B4 0100A0E3 MOV R0,#+1 \ 000000B8 120000EA B ??SC_onCreate_3 \ ??SC_onCreate_5: \ 000000BC 0200A0E3 MOV R0,#+2 \ 000000C0 100000EA B ??SC_onCreate_3 \ ??SC_onCreate_6: \ 000000C4 0300A0E3 MOV R0,#+3 \ 000000C8 0E0000EA B ??SC_onCreate_3 \ ??SC_onCreate_7: \ 000000CC 0400A0E3 MOV R0,#+4 \ 000000D0 0C0000EA B ??SC_onCreate_3 \ ??SC_onCreate_8: \ 000000D4 0500A0E3 MOV R0,#+5 \ 000000D8 0A0000EA B ??SC_onCreate_3 \ ??SC_onCreate_9: \ 000000DC 0600A0E3 MOV R0,#+6 \ 000000E0 080000EA B ??SC_onCreate_3 \ ??SC_onCreate_10: \ 000000E4 0700A0E3 MOV R0,#+7 \ 000000E8 060000EA B ??SC_onCreate_3 \ ??SC_onCreate_11: \ 000000EC 0800A0E3 MOV R0,#+8 \ 000000F0 040000EA B ??SC_onCreate_3 \ ??SC_onCreate_12: \ 000000F4 0900A0E3 MOV R0,#+9 \ 000000F8 020000EA B ??SC_onCreate_3 \ ??SC_onCreate_13: \ 000000FC 0A00A0E3 MOV R0,#+10 \ 00000100 000000EA B ??SC_onCreate_3 \ ??SC_onCreate_14: \ 00000104 0B00A0E3 MOV R0,#+11 \ ??SC_onCreate_3: \ 00000108 000085E5 STR R0,[R5, #+0] 264 265 data->gui.state=1; \ 0000010C 0100A0E3 MOV R0,#+1 \ 00000110 0C00C4E5 STRB R0,[R4, #+12] 266 } \ 00000114 7080BDE8 POP {R4-R6,PC} ;; return \ ??SC_onCreate_1: \ 00000118 ........ DC32 SRect 267 \ In segment CODE, align 4, keep-with-next 268 void SC_onClose(MAIN_GUI *data, void (*mfree_adr)(void *)) 269 { \ SC_onClose: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 ........ LDR R0,??DataTable17 ;; StatusChangeScreen + 8 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 0000000A BEQ ??SC_onClose_0 270 if(StatusChangeScreen.bitmap) mfree(StatusChangeScreen.bitmap); \ 00000018 150000EF SWI +21 271 InitMMenu(); \ ??SC_onClose_0: \ 0000001C ........ _BLF InitMMenu,??InitMMenu??rA 272 data->gui.state=0; \ 00000020 0000A0E3 MOV R0,#+0 \ 00000024 0C00C4E5 STRB R0,[R4, #+12] 273 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 274 \ In segment CODE, align 4, keep-with-next 275 void SC_onFocus(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) 276 { \ SC_onFocus: \ 00000000 00402DE9 PUSH {LR} 277 #ifdef ELKA 278 #ifndef ICONBAR 279 DisableIconBar(1); 280 #endif 281 #endif 282 data->gui.state=2; \ 00000004 0210A0E3 MOV R1,#+2 \ 00000008 0C10C0E5 STRB R1,[R0, #+12] 283 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 284 } \ 00000010 0080BDE8 POP {PC} ;; return 285 \ In segment CODE, align 4, keep-with-next 286 void SC_onUnfocus(MAIN_GUI *data, void (*mfree_adr)(void *)) 287 { 288 if (data->gui.state!=2) return; \ SC_onUnfocus: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 289 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 290 } \ 00000010 1EFF2FE1 BX LR ;; return 291 \ In segment CODE, align 4, keep-with-next 292 int SC_OnKey(MAIN_GUI *data, GUI_MSG *msg) 293 { \ SC_OnKey: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0140A0E1 MOV R4,R1 294 DirectRedrawGUI(); 295 int k=msg->gbsmsg->submess; 296 297 if (msg->gbsmsg->msg==KEY_DOWN || msg->gbsmsg->msg==LONG_PRESS) \ 0000000C 9360A0E3 MOV R6,#+147 \ 00000010 3F0100EF SWI +319 \ 00000014 045094E5 LDR R5,[R4, #+4] \ 00000018 406F86E3 ORR R6,R6,#0x100 \ 0000001C 040095E5 LDR R0,[R5, #+4] \ 00000020 084095E5 LDR R4,[R5, #+8] \ 00000024 060050E1 CMP R0,R6 \ 00000028 02108612 ADDNE R1,R6,#+2 \ 0000002C 01005011 CMPNE R0,R1 \ 00000030 0B00001A BNE ??SC_OnKey_2 298 { 299 switch(k) \ 00000034 040054E2 SUBS R0,R4,#+4 \ 00000038 08005012 SUBSNE R0,R0,#+8 \ 0000003C 3C00000A BEQ ??SC_OnKey_3 \ 00000040 2F0050E2 SUBS R0,R0,#+47 \ 00000044 0400000A BEQ ??SC_OnKey_4 \ 00000048 010050E2 SUBS R0,R0,#+1 \ 0000004C 1900000A BEQ ??SC_OnKey_5 \ 00000050 010050E2 SUBS R0,R0,#+1 \ 00000054 3600000A BEQ ??SC_OnKey_3 \ 00000058 010000EA B ??SC_OnKey_2 300 { 301 case UP_BUTTON: SC_MoveUp(0); break; \ ??SC_OnKey_4: \ 0000005C 0000A0E3 MOV R0,#+0 \ 00000060 ........ BL SC_MoveUp 302 case DOWN_BUTTON: SC_MoveDown(0); break; 303 case LEFT_BUTTON: case RIGHT_SOFT:case RED_BUTTON: return (1); 304 } 305 } 306 307 if (msg->gbsmsg->msg==KEY_DOWN) \ ??SC_OnKey_2: \ 00000064 040095E5 LDR R0,[R5, #+4] \ 00000068 060050E1 CMP R0,R6 \ 0000006C 6100001A BNE ??SC_OnKey_6 308 { 309 switch(k) \ 00000070 ........ LDR R5,??DataTable18 ;; WriteDefSettings \ 00000074 ........ LDR R0,??DataTable19 ;; CurrentStatus \ 00000078 ........ LDR R1,??DataTable21 ;; stmenu \ 0000007C 012054E2 SUBS R2,R4,#+1 \ 00000080 19205212 SUBSNE R2,R2,#+25 \ 00000084 24205212 SUBSNE R2,R2,#+36 \ 00000088 2B00001A BNE ??SC_OnKey_7 310 { 311 case ENTER_BUTTON: case LEFT_SOFT:case RIGHT_BUTTON: 312 Change_Status(GetStatusInMenuByPos(stmenu.curpos)); \ 0000008C 001091E5 LDR R1,[R1, #+0] \ 00000090 0B0051E3 CMP R1,#+11 \ 00000094 2000008A BHI ??SC_OnKey_8 \ 00000098 012F8FE2 ADR R2,??SC_OnKey_0 \ 0000009C 0120D2E7 LDRB R2,[R2, R1] \ 000000A0 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??SC_OnKey_0: \ 000000A4 0207090B DC8 +2,+7,+9,+11 \ 000000A8 0D0F1113 DC8 +13,+15,+17,+19 \ 000000AC 1517191B DC8 +21,+23,+25,+27 \ ??SC_OnKey_9: \ 000000B0 0B10A0E3 MOV R1,#+11 \ 000000B4 190000EA B ??SC_OnKey_10 \ ??SC_OnKey_5: \ 000000B8 0000A0E3 MOV R0,#+0 \ 000000BC ........ BL SC_MoveDown \ 000000C0 E7FFFFEA B ??SC_OnKey_2 \ ??SC_OnKey_11: \ 000000C4 0210A0E3 MOV R1,#+2 \ 000000C8 140000EA B ??SC_OnKey_10 \ ??SC_OnKey_12: \ 000000CC 0310A0E3 MOV R1,#+3 \ 000000D0 120000EA B ??SC_OnKey_10 \ ??SC_OnKey_13: \ 000000D4 0510A0E3 MOV R1,#+5 \ 000000D8 100000EA B ??SC_OnKey_10 \ ??SC_OnKey_14: \ 000000DC 0410A0E3 MOV R1,#+4 \ 000000E0 0E0000EA B ??SC_OnKey_10 \ ??SC_OnKey_15: \ 000000E4 0C10A0E3 MOV R1,#+12 \ 000000E8 0C0000EA B ??SC_OnKey_10 \ ??SC_OnKey_16: \ 000000EC 0110A0E3 MOV R1,#+1 \ 000000F0 0A0000EA B ??SC_OnKey_10 \ ??SC_OnKey_17: \ 000000F4 0610A0E3 MOV R1,#+6 \ 000000F8 080000EA B ??SC_OnKey_10 \ ??SC_OnKey_18: \ 000000FC 0710A0E3 MOV R1,#+7 \ 00000100 060000EA B ??SC_OnKey_10 \ ??SC_OnKey_19: \ 00000104 0810A0E3 MOV R1,#+8 \ 00000108 040000EA B ??SC_OnKey_10 \ ??SC_OnKey_20: \ 0000010C 0910A0E3 MOV R1,#+9 \ 00000110 020000EA B ??SC_OnKey_10 \ ??SC_OnKey_21: \ 00000114 0A10A0E3 MOV R1,#+10 \ 00000118 000000EA B ??SC_OnKey_10 \ ??SC_OnKey_8: \ 0000011C 0E10A0E3 MOV R1,#+14 \ ??SC_OnKey_10: \ 00000120 001080E5 STR R1,[R0, #+0] \ 00000124 ........ _BLF set_my_status,??set_my_status??rA \ 00000128 0500A0E1 MOV R0,R5 \ 0000012C 710100EF SWI +369 313 DrawHeader(); \ 00000130 ........ _BLF DrawHeader,??DrawHeader??rA 314 return (1); \ ??SC_OnKey_3: \ 00000134 0100A0E3 MOV R0,#+1 \ 00000138 7280BDE8 POP {R1,R4-R6,PC} 315 } 316 317 if(k>='0' && k<='9') \ ??SC_OnKey_7: \ 0000013C 300054E3 CMP R4,#+48 \ 00000140 2C0000BA BLT ??SC_OnKey_6 \ 00000144 3A0054E3 CMP R4,#+58 \ 00000148 2A0000AA BGE ??SC_OnKey_6 318 { 319 if(k=='0') stmenu.curpos=9; \ 0000014C 300054E3 CMP R4,#+48 \ 00000150 0920A003 MOVEQ R2,#+9 320 else stmenu.curpos=k-'1'; \ 00000154 31204412 SUBNE R2,R4,#+49 \ 00000158 002081E5 STR R2,[R1, #+0] 321 Change_Status(GetStatusInMenuByPos(stmenu.curpos)); \ 0000015C 0B0052E3 CMP R2,#+11 \ 00000160 1D00008A BHI ??SC_OnKey_22 \ 00000164 011F8FE2 ADR R1,??SC_OnKey_1 \ 00000168 0210D1E7 LDRB R1,[R1, R2] \ 0000016C 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??SC_OnKey_1: \ 00000170 02040608 DC8 +2,+4,+6,+8 \ 00000174 0A0C0E10 DC8 +10,+12,+14,+16 \ 00000178 12141618 DC8 +18,+20,+22,+24 \ ??SC_OnKey_23: \ 0000017C 0B10A0E3 MOV R1,#+11 \ 00000180 160000EA B ??SC_OnKey_24 \ ??SC_OnKey_25: \ 00000184 0210A0E3 MOV R1,#+2 \ 00000188 140000EA B ??SC_OnKey_24 \ ??SC_OnKey_26: \ 0000018C 0310A0E3 MOV R1,#+3 \ 00000190 120000EA B ??SC_OnKey_24 \ ??SC_OnKey_27: \ 00000194 0510A0E3 MOV R1,#+5 \ 00000198 100000EA B ??SC_OnKey_24 \ ??SC_OnKey_28: \ 0000019C 0410A0E3 MOV R1,#+4 \ 000001A0 0E0000EA B ??SC_OnKey_24 \ ??SC_OnKey_29: \ 000001A4 0C10A0E3 MOV R1,#+12 \ 000001A8 0C0000EA B ??SC_OnKey_24 \ ??SC_OnKey_30: \ 000001AC 0110A0E3 MOV R1,#+1 \ 000001B0 0A0000EA B ??SC_OnKey_24 \ ??SC_OnKey_31: \ 000001B4 0610A0E3 MOV R1,#+6 \ 000001B8 080000EA B ??SC_OnKey_24 \ ??SC_OnKey_32: \ 000001BC 0710A0E3 MOV R1,#+7 \ 000001C0 060000EA B ??SC_OnKey_24 \ ??SC_OnKey_33: \ 000001C4 0810A0E3 MOV R1,#+8 \ 000001C8 040000EA B ??SC_OnKey_24 \ ??SC_OnKey_34: \ 000001CC 0910A0E3 MOV R1,#+9 \ 000001D0 020000EA B ??SC_OnKey_24 \ ??SC_OnKey_35: \ 000001D4 0A10A0E3 MOV R1,#+10 \ 000001D8 000000EA B ??SC_OnKey_24 \ ??SC_OnKey_22: \ 000001DC 0E10A0E3 MOV R1,#+14 \ ??SC_OnKey_24: \ 000001E0 001080E5 STR R1,[R0, #+0] \ 000001E4 ........ _BLF set_my_status,??set_my_status??rA \ 000001E8 0500A0E1 MOV R0,R5 \ 000001EC 710100EF SWI +369 322 return 1; \ 000001F0 0100A0E3 MOV R0,#+1 \ 000001F4 7280BDE8 POP {R1,R4-R6,PC} 323 } 324 } 325 return(0); \ ??SC_OnKey_6: \ 000001F8 0000A0E3 MOV R0,#+0 \ 000001FC 7280BDE8 POP {R1,R4-R6,PC} ;; return 326 } 327 328 extern void kill_data(void *p, void (*func_p)(void *)); 329 \ In segment CODE, align 4, keep-with-next 330 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 331 int SC_method9(void){return(0);} \ SC_method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 332 \ In segment DATA_C, align 4, align-sorted 333 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 334 (void *)SC_OnRedraw, 335 (void *)SC_onCreate, 336 (void *)SC_onClose, 337 (void *)SC_onFocus, 338 (void *)SC_onUnfocus, 339 (void *)SC_OnKey, 340 0, 341 (void *)kill_data, 342 (void *)SC_method8, 343 (void *)SC_method9, 344 0 345 }; 346 347 const RECT SC_Canvas={0,0,0,0}; \ SC_Canvas: \ 0000002C 000000000000 DC16 0, 0, 0, 0 \ 0000 348 \ In segment CODE, align 4, keep-with-next 349 void CreateSCMenu() 350 { 351 352 //Инициализация ленгпака 353 menutexts[0]=(char *)lgpData[LGP_StOnline]; \ CreateSCMenu: \ 00000000 9C109FE5 LDR R1,??CreateSCMenu_0 ;; lgpData \ 00000004 ........ LDR R0,??DataTable21 ;; stmenu \ 00000008 10402DE9 PUSH {R4,LR} \ 0000000C E42091E5 LDR R2,[R1, #+228] \ 00000010 782080E5 STR R2,[R0, #+120] 354 menutexts[1]=(char *)lgpData[LGP_StAway]; \ 00000014 E82091E5 LDR R2,[R1, #+232] \ 00000018 7C2080E5 STR R2,[R0, #+124] 355 menutexts[2]=(char *)lgpData[LGP_StNa]; \ 0000001C EC2091E5 LDR R2,[R1, #+236] \ 00000020 802080E5 STR R2,[R0, #+128] 356 menutexts[3]=(char *)lgpData[LGP_StDnd]; \ 00000024 F02091E5 LDR R2,[R1, #+240] \ 00000028 842080E5 STR R2,[R0, #+132] 357 menutexts[4]=(char *)lgpData[LGP_StOccup]; \ 0000002C F42091E5 LDR R2,[R1, #+244] \ 00000030 882080E5 STR R2,[R0, #+136] 358 menutexts[5]=(char *)lgpData[LGP_StFfc]; \ 00000034 F82091E5 LDR R2,[R1, #+248] \ 00000038 8C2080E5 STR R2,[R0, #+140] 359 menutexts[6]=(char *)lgpData[LGP_StInvis]; \ 0000003C FC2091E5 LDR R2,[R1, #+252] \ 00000040 902080E5 STR R2,[R0, #+144] 360 menutexts[7]=(char *)lgpData[LGP_StDepression]; \ 00000044 002191E5 LDR R2,[R1, #+256] \ 00000048 942080E5 STR R2,[R0, #+148] 361 menutexts[8]=(char *)lgpData[LGP_StEvil]; \ 0000004C 042191E5 LDR R2,[R1, #+260] \ 00000050 982080E5 STR R2,[R0, #+152] 362 menutexts[9]=(char *)lgpData[LGP_StHome]; \ 00000054 082191E5 LDR R2,[R1, #+264] \ 00000058 9C2080E5 STR R2,[R0, #+156] 363 menutexts[10]=(char *)lgpData[LGP_StLunch]; \ 0000005C 0C2191E5 LDR R2,[R1, #+268] 364 menutexts[11]=(char *)lgpData[LGP_StWork]; \ 00000060 101191E5 LDR R1,[R1, #+272] \ 00000064 A02080E5 STR R2,[R0, #+160] \ 00000068 A41080E5 STR R1,[R0, #+164] 365 366 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 0000006C 4000A0E3 MOV R0,#+64 \ 00000070 140000EF SWI +20 \ 00000074 0040A0E1 MOV R4,R0 367 zeromem(main_gui,sizeof(MAIN_GUI)); \ 00000078 4010A0E3 MOV R1,#+64 \ 0000007C 1D0100EF SWI +285 368 main_gui->gui.canvas=(void *)(&SC_Canvas); \ 00000080 20009FE5 LDR R0,??CreateSCMenu_0+0x4 ;; gui_methods_SC \ 00000084 2C1080E2 ADD R1,R0,#+44 \ 00000088 001084E5 STR R1,[R4, #+0] 369 main_gui->gui.methods=(void *)gui_methods_SC; \ 0000008C 040084E5 STR R0,[R4, #+4] 370 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000090 158000EF SWI +32789 \ 00000094 200084E5 STR R0,[R4, #+32] 371 CreateGUI(main_gui); \ 00000098 0400A0E1 MOV R0,R4 \ 0000009C 370100EF SWI +311 372 } \ 000000A0 1080BDE8 POP {R4,PC} ;; return \ ??CreateSCMenu_0: \ 000000A4 ........ DC32 lgpData \ 000000A8 ........ DC32 gui_methods_SC 373 374 #endif //GUI 375 376 377 378 //-------------------------------- 379 // XStatuses 380 //-------------------------------- 381 extern DYNPNGICONLIST *XStatusesImgList; 382 extern int *XStatusesIconArray; 383 //extern 384 volatile int total_xstatuses = 35; 385 386 SOFTKEY_DESC edit_x_sk[]= 387 { 388 {0x0018,0x0000,(int)"Save!"}, 389 {0x0001,0x0000,(int)""}, 390 {0x003D,0x0000,(int)LGP_DOIT_PIC} 391 }; 392 393 SOFTKEYSTAB edit_x_skt= 394 { 395 edit_x_sk,0 396 }; 397 \ In segment CODE, align 4, keep-with-next 398 void edit_xstatus_locret(void){} \ edit_xstatus_locret: \ 00000000 1EFF2FE1 BX LR ;; return 399 \ In segment CODE, align 4, keep-with-next 400 void ReplaceStr(char **str, int start_prev, int prev_len, char *next, int next_len) 401 { \ ReplaceStr: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 24809DE5 LDR R8,[SP, #+36] \ 00000008 0040A0E1 MOV R4,R0 402 char *d, *buf; 403 char *s=*str; \ 0000000C 009094E5 LDR R9,[R4, #+0] \ 00000010 0150A0E1 MOV R5,R1 \ 00000014 0260A0E1 MOV R6,R2 \ 00000018 0370A0E1 MOV R7,R3 404 if (s) \ 0000001C 000059E3 CMP R9,#+0 \ 00000020 F08FBD08 POPEQ {R4-R11,PC} 405 { 406 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 407 if (start_prev) \ 00000044 000055E3 CMP R5,#+0 \ 00000048 0300000A BEQ ??ReplaceStr_0 408 { 409 memcpy(buf, s, start_prev); \ 0000004C 0520A0E1 MOV R2,R5 \ 00000050 0910A0E1 MOV R1,R9 \ 00000054 1E0100EF SWI +286 410 buf+=start_prev; \ 00000058 0BB085E0 ADD R11,R5,R11 411 } 412 if (next_len) \ ??ReplaceStr_0: \ 0000005C 000058E3 CMP R8,#+0 \ 00000060 0400000A BEQ ??ReplaceStr_1 413 { 414 memcpy(buf,next,next_len); \ 00000064 0820A0E1 MOV R2,R8 \ 00000068 0710A0E1 MOV R1,R7 \ 0000006C 0B00A0E1 MOV R0,R11 \ 00000070 1E0100EF SWI +286 415 buf+=next_len; \ 00000074 0BB088E0 ADD R11,R8,R11 416 } 417 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 418 mfree(s); \ 00000088 0900A0E1 MOV R0,R9 \ 0000008C 150000EF SWI +21 419 *str=d; \ 00000090 00A084E5 STR R10,[R4, #+0] 420 } 421 } \ 00000094 F08FBDE8 POP {R4-R11,PC} ;; return 422 \ In segment CODE, align 4, keep-with-next 423 int edit_xstatus_onkey(GUI *data, GUI_MSG *msg) 424 { \ edit_xstatus_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 B8D04DE2 SUB SP,SP,#+184 \ 00000008 0040A0E1 MOV R4,R0 425 WSHDR *ws; 426 char *s, *d, tmp[132]; 427 int cur_x_st; 428 int len, l; 429 int is_any_change=0; 430 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 431 { 432 cur_x_st=(int)EDIT_GetUserPointer(data); \ 00000024 0400A0E1 MOV R0,R4 \ 00000028 DF0100EF SWI +479 \ 0000002C 0050A0E1 MOV R5,R0 433 EDITCONTROL ec; 434 ExtractEditControl(data,2,&ec); // Комментарий \ 00000030 08208DE2 ADD R2,SP,#+8 \ 00000034 0210A0E3 MOV R1,#+2 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 690100EF SWI +361 435 ws=ec.pWS; \ 00000040 30809DE5 LDR R8,[SP, #+48] 436 437 s=GetXStatusStr(cur_x_st*3,&len); \ 00000044 851085E0 ADD R1,R5,R5, LSL #+1 438 d=tmp; 439 440 if (s) \ 00000048 ........ LDR R5,??DataTable22 ;; 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 441 { 442 l=ws->wsbody[0]; \ 00000068 000098E5 LDR R0,[R8, #+0] 443 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] 446 } \ 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 447 *d=0; \ ??edit_xstatus_onkey_3: \ 000000A0 0000A0E3 MOV R0,#+0 \ 000000A4 0000CAE5 STRB R0,[R10, #+0] 448 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 449 { 450 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 451 is_any_change=1; \ 000000E8 0160A0E3 MOV R6,#+1 \ 000000EC 04D08DE2 ADD SP,SP,#+4 452 } 453 } 454 455 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 456 ws=ec.pWS; 457 458 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 459 d=tmp; \ 00000118 34A08DE2 ADD R10,SP,#+52 460 461 if (s) \ 0000011C 2100000A BEQ ??edit_xstatus_onkey_6 462 { 463 l=ws->wsbody[0]; \ 00000120 000098E5 LDR R0,[R8, #+0] 464 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] 467 } \ 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 468 *d=0; \ ??edit_xstatus_onkey_8: \ 00000158 0000A0E3 MOV R0,#+0 \ 0000015C 0000CAE5 STRB R0,[R10, #+0] 469 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 470 { 471 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 472 is_any_change=1; \ 000001A0 0160A0E3 MOV R6,#+1 \ 000001A4 04D08DE2 ADD SP,SP,#+4 473 } 474 } 475 476 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 477 ws=ec.pWS; 478 479 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 480 d=tmp; \ 000001D0 34908DE2 ADD R9,SP,#+52 481 482 if (s) \ 000001D4 2100000A BEQ ??edit_xstatus_onkey_11 483 { 484 l=ws->wsbody[0]; \ 000001D8 000094E5 LDR R0,[R4, #+0] 485 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] 488 } \ 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 489 *d=0; \ ??edit_xstatus_onkey_13: \ 00000210 0000A0E3 MOV R0,#+0 \ 00000214 0000C9E5 STRB R0,[R9, #+0] 490 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 491 { 492 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 493 is_any_change=1; \ 00000258 04D08DE2 ADD SP,SP,#+4 \ 0000025C 010000EA B ??edit_xstatus_onkey_16 494 } 495 } 496 497 if (is_any_change) \ ??edit_xstatus_onkey_11: \ 00000260 000056E3 CMP R6,#+0 \ 00000264 0100000A BEQ ??edit_xstatus_onkey_17 498 { 499 SaveXStatusText(); \ ??edit_xstatus_onkey_16: \ 00000268 ........ BL SaveXStatusText 500 #ifdef GUI_INTERFACE 501 void InitXText(); 502 InitXText(); \ 0000026C ........ BL InitXText 503 #endif 504 } 505 return (1); \ ??edit_xstatus_onkey_17: \ 00000270 0100A0E3 MOV R0,#+1 \ 00000274 B8D08DE2 ADD SP,SP,#+184 \ 00000278 F08FBDE8 POP {R4-R11,PC} 506 } 507 return (0); \ ??edit_xstatus_onkey_0: \ 0000027C 0000A0E3 MOV R0,#+0 \ 00000280 B8D08DE2 ADD SP,SP,#+184 \ 00000284 F08FBDE8 POP {R4-R11,PC} ;; return 508 } 509 \ In segment CODE, align 4, keep-with-next 510 void edit_xstatus_ghook(GUI *data, int cmd) 511 { \ edit_xstatus_ghook: \ 00000000 00402DE9 PUSH {LR} 512 static SOFTKEY_DESC sk={0x0FFF,0x0000,(int)"Save!"}; 513 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0100001A BNE ??edit_xstatus_ghook_0 514 { 515 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 \ 00000010 0080BDE8 POP {PC} 516 } 517 if (cmd==7) \ ??edit_xstatus_ghook_0: \ 00000014 070051E3 CMP R1,#+7 \ 00000018 0080BD18 POPNE {PC} 518 { 519 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 520 } 521 } \ 00000028 0080BDE8 POP {PC} ;; return \ ??edit_xstatus_ghook_1: \ 0000002C ........ DC32 ??sk 522 523 HEADER_DESC edit_xstatus_hdr={0,0,0,0,NULL,NULL,LGP_NULL}; 524 525 INPUTDIA_DESC edit_xstatus_desc = 526 { 527 1, 528 edit_xstatus_onkey, 529 edit_xstatus_ghook, 530 (void *)edit_xstatus_locret, 531 0, 532 &edit_x_skt, 533 {0,0,0,0}, 534 FONT_SMALL, 535 100, 536 101, 537 0, 538 // 0x00000001 - Выровнять по правому краю 539 // 0x00000002 - Выровнять по центру 540 // 0x00000004 - Инверсия знакомест 541 // 0x00000008 - UnderLine 542 // 0x00000020 - Не переносить слова 543 // 0x00000200 - bold 544 0, 545 // 0x00000002 - ReadOnly 546 // 0x00000004 - Не двигается курсор 547 // 0x40000000 - Поменять местами софт-кнопки 548 0x40000000 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} \ 00000004 30D04DE2 SUB SP,SP,#+48 \ 00000008 0040A0E1 MOV R4,R0 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, (char*)lgpData[LGP_Comment] ); // Коментарий 564 PrepareEditControl(&ec); 565 ConstructEditControl(&ec,ECT_HEADER,0x40,ews,ews->wsbody[0]); 566 AddEditControlToEditQend(eq,&ec,ma); //1 567 568 CutWSTR(ews,0); 569 s=GetXStatusStr(xstatus*3, &len); \ 0000000C 848084E0 ADD R8,R4,R4, LSL #+1 \ 00000010 148000EF SWI +32788 \ 00000014 0050A0E1 MOV R5,R0 \ 00000018 158000EF SWI +32789 \ 0000001C 0010A0E1 MOV R1,R0 \ 00000020 0500A0E1 MOV R0,R5 \ 00000024 630100EF SWI +355 \ 00000028 0060A0E1 MOV R6,R0 \ 0000002C 8000A0E3 MOV R0,#+128 \ 00000030 250100EF SWI +293 \ 00000034 0070A0E1 MOV R7,R0 \ 00000038 F8029FE5 LDR R0,??EditXStatus_0 ;; lgpData + 276 \ 0000003C 001090E5 LDR R1,[R0, #+0] \ 00000040 0700A0E1 MOV R0,R7 \ 00000044 ........ _BLF ascii2ws,??ascii2ws??rA \ 00000048 04008DE2 ADD R0,SP,#+4 \ 0000004C 640100EF SWI +356 \ 00000050 000097E5 LDR R0,[R7, #+0] \ 00000054 0730A0E1 MOV R3,R7 \ 00000058 B000D0E1 LDRH R0,[R0, #+0] \ 0000005C 4020A0E3 MOV R2,#+64 \ 00000060 0110A0E3 MOV R1,#+1 \ 00000064 01002DE9 PUSH {R0} \ 00000068 08008DE2 ADD R0,SP,#+8 \ 0000006C 650100EF SWI +357 \ 00000070 0520A0E1 MOV R2,R5 \ 00000074 08108DE2 ADD R1,SP,#+8 \ 00000078 0600A0E1 MOV R0,R6 \ 0000007C 660100EF SWI +358 \ 00000080 0010A0E3 MOV R1,#+0 \ 00000084 0700A0E1 MOV R0,R7 \ 00000088 260100EF SWI +294 \ 0000008C 04108DE2 ADD R1,SP,#+4 \ 00000090 0800A0E1 MOV R0,R8 \ 00000094 ........ BL GetXStatusStr \ 00000098 0090B0E1 MOVS R9,R0 570 if (s) \ 0000009C 04D08DE2 ADD SP,SP,#+4 \ 000000A0 0C00000A BEQ ??EditXStatus_1 \ 000000A4 060000EA B ??EditXStatus_2 571 { 572 while((c=*s++) && len) 573 { 574 wsAppendChar(ews,char8to16(c)); \ ??EditXStatus_3: \ 000000A8 ........ _BLF char8to16,??char8to16??rA \ 000000AC 0010A0E1 MOV R1,R0 \ 000000B0 0700A0E1 MOV R0,R7 \ 000000B4 1C0000EF SWI +28 575 len--; \ 000000B8 00109DE5 LDR R1,[SP, #+0] \ 000000BC 011041E2 SUB R1,R1,#+1 \ 000000C0 00108DE5 STR R1,[SP, #+0] 576 } \ ??EditXStatus_2: \ 000000C4 ........ LDRB R0,[R9], #+1 \ 000000C8 000050E3 CMP R0,#+0 \ 000000CC 00109D15 LDRNE R1,[SP, #+0] \ 000000D0 00005113 CMPNE R1,#+0 \ 000000D4 F3FFFF1A BNE ??EditXStatus_3 577 } 578 PrepareEditControl(&ec); 579 ConstructEditControl(&ec,ECT_NORMAL_TEXT,0x40,ews,20); 580 AddEditControlToEditQend(eq,&ec,ma); //2 581 582 ascii2ws(ews,"Short X:"); // Короткий Икс Статус \ ??EditXStatus_1: \ 000000D8 5C929FE5 LDR R9,??EditXStatus_0+0x4 ;; `?` \ 000000DC 04008DE2 ADD R0,SP,#+4 \ 000000E0 640100EF SWI +356 \ 000000E4 1400A0E3 MOV R0,#+20 \ 000000E8 01002DE9 PUSH {R0} \ 000000EC 0730A0E1 MOV R3,R7 \ 000000F0 4020A0E3 MOV R2,#+64 \ 000000F4 0310A0E3 MOV R1,#+3 \ 000000F8 08008DE2 ADD R0,SP,#+8 \ 000000FC 650100EF SWI +357 \ 00000100 0520A0E1 MOV R2,R5 \ 00000104 08108DE2 ADD R1,SP,#+8 \ 00000108 0600A0E1 MOV R0,R6 \ 0000010C 660100EF SWI +358 \ 00000110 0910A0E1 MOV R1,R9 \ 00000114 0700A0E1 MOV R0,R7 \ 00000118 ........ _BLF ascii2ws,??ascii2ws??rA 583 PrepareEditControl(&ec); \ 0000011C 08008DE2 ADD R0,SP,#+8 \ 00000120 640100EF SWI +356 584 ConstructEditControl(&ec,ECT_HEADER,0x40,ews,ews->wsbody[0]); \ 00000124 000097E5 LDR R0,[R7, #+0] \ 00000128 0730A0E1 MOV R3,R7 \ 0000012C B000D0E1 LDRH R0,[R0, #+0] \ 00000130 4020A0E3 MOV R2,#+64 \ 00000134 0110A0E3 MOV R1,#+1 \ 00000138 01002DE9 PUSH {R0} \ 0000013C 0C008DE2 ADD R0,SP,#+12 \ 00000140 650100EF SWI +357 585 AddEditControlToEditQend(eq,&ec,ma); //3 \ 00000144 0520A0E1 MOV R2,R5 \ 00000148 0C108DE2 ADD R1,SP,#+12 \ 0000014C 0600A0E1 MOV R0,R6 \ 00000150 660100EF SWI +358 586 587 CutWSTR(ews,0); \ 00000154 0010A0E3 MOV R1,#+0 \ 00000158 0700A0E1 MOV R0,R7 \ 0000015C 260100EF SWI +294 588 s=GetXStatusStr(xstatus*3+1, &len); \ 00000160 08108DE2 ADD R1,SP,#+8 \ 00000164 010088E2 ADD R0,R8,#+1 \ 00000168 ........ BL GetXStatusStr \ 0000016C 00A0B0E1 MOVS R10,R0 589 if (s) \ 00000170 08D08DE2 ADD SP,SP,#+8 \ 00000174 0C00000A BEQ ??EditXStatus_4 \ 00000178 060000EA B ??EditXStatus_5 590 { 591 while((c=*s++) && len) 592 { 593 wsAppendChar(ews,char8to16(c)); \ ??EditXStatus_6: \ 0000017C ........ _BLF char8to16,??char8to16??rA \ 00000180 0010A0E1 MOV R1,R0 \ 00000184 0700A0E1 MOV R0,R7 \ 00000188 1C0000EF SWI +28 594 len--; \ 0000018C 00109DE5 LDR R1,[SP, #+0] \ 00000190 011041E2 SUB R1,R1,#+1 \ 00000194 00108DE5 STR R1,[SP, #+0] 595 } \ ??EditXStatus_5: \ 00000198 ........ LDRB R0,[R10], #+1 \ 0000019C 000050E3 CMP R0,#+0 \ 000001A0 00109D15 LDRNE R1,[SP, #+0] \ 000001A4 00005113 CMPNE R1,#+0 \ 000001A8 F3FFFF1A BNE ??EditXStatus_6 596 } 597 PrepareEditControl(&ec); \ ??EditXStatus_4: \ 000001AC 04008DE2 ADD R0,SP,#+4 \ 000001B0 640100EF SWI +356 598 ConstructEditControl(&ec,ECT_NORMAL_TEXT,0x40,ews,128); \ 000001B4 8000A0E3 MOV R0,#+128 \ 000001B8 01002DE9 PUSH {R0} \ 000001BC 0730A0E1 MOV R3,R7 \ 000001C0 4020A0E3 MOV R2,#+64 \ 000001C4 0310A0E3 MOV R1,#+3 \ 000001C8 08008DE2 ADD R0,SP,#+8 \ 000001CC 650100EF SWI +357 599 AddEditControlToEditQend(eq,&ec,ma); //4 \ 000001D0 0520A0E1 MOV R2,R5 \ 000001D4 08108DE2 ADD R1,SP,#+8 \ 000001D8 0600A0E1 MOV R0,R6 \ 000001DC 660100EF SWI +358 600 601 ascii2ws(ews,"Large X:"); // Длинный Икс Статус \ 000001E0 0C1089E2 ADD R1,R9,#+12 \ 000001E4 0700A0E1 MOV R0,R7 \ 000001E8 ........ _BLF ascii2ws,??ascii2ws??rA 602 PrepareEditControl(&ec); \ 000001EC 08008DE2 ADD R0,SP,#+8 \ 000001F0 640100EF SWI +356 603 ConstructEditControl(&ec,ECT_HEADER,0x40,ews,ews->wsbody[0]); \ 000001F4 000097E5 LDR R0,[R7, #+0] \ 000001F8 0730A0E1 MOV R3,R7 \ 000001FC B000D0E1 LDRH R0,[R0, #+0] \ 00000200 4020A0E3 MOV R2,#+64 \ 00000204 0110A0E3 MOV R1,#+1 \ 00000208 01002DE9 PUSH {R0} \ 0000020C 0C008DE2 ADD R0,SP,#+12 \ 00000210 650100EF SWI +357 604 AddEditControlToEditQend(eq,&ec,ma); //5 \ 00000214 0520A0E1 MOV R2,R5 \ 00000218 0C108DE2 ADD R1,SP,#+12 \ 0000021C 0600A0E1 MOV R0,R6 \ 00000220 660100EF SWI +358 605 606 CutWSTR(ews,0); \ 00000224 0010A0E3 MOV R1,#+0 \ 00000228 0700A0E1 MOV R0,R7 \ 0000022C 260100EF SWI +294 607 s=GetXStatusStr(xstatus*3+2, &len); \ 00000230 08108DE2 ADD R1,SP,#+8 \ 00000234 020088E2 ADD R0,R8,#+2 \ 00000238 ........ BL GetXStatusStr \ 0000023C 0080B0E1 MOVS R8,R0 608 if (s) \ 00000240 08D08DE2 ADD SP,SP,#+8 \ 00000244 0C00000A BEQ ??EditXStatus_7 \ 00000248 060000EA B ??EditXStatus_8 609 { 610 while((c=*s++) && len) 611 { 612 wsAppendChar(ews,char8to16(c)); \ ??EditXStatus_9: \ 0000024C ........ _BLF char8to16,??char8to16??rA \ 00000250 0010A0E1 MOV R1,R0 \ 00000254 0700A0E1 MOV R0,R7 \ 00000258 1C0000EF SWI +28 613 len--; \ 0000025C 00109DE5 LDR R1,[SP, #+0] \ 00000260 011041E2 SUB R1,R1,#+1 \ 00000264 00108DE5 STR R1,[SP, #+0] 614 } \ ??EditXStatus_8: \ 00000268 ........ LDRB R0,[R8], #+1 \ 0000026C 000050E3 CMP R0,#+0 \ 00000270 00109D15 LDRNE R1,[SP, #+0] \ 00000274 00005113 CMPNE R1,#+0 \ 00000278 F3FFFF1A BNE ??EditXStatus_9 615 } 616 PrepareEditControl(&ec); \ ??EditXStatus_7: \ 0000027C 04008DE2 ADD R0,SP,#+4 \ 00000280 640100EF SWI +356 617 ConstructEditControl(&ec,ECT_NORMAL_TEXT,0x40,ews,128); \ 00000284 8000A0E3 MOV R0,#+128 \ 00000288 01002DE9 PUSH {R0} \ 0000028C 0730A0E1 MOV R3,R7 \ 00000290 4020A0E3 MOV R2,#+64 \ 00000294 0310A0E3 MOV R1,#+3 \ 00000298 08008DE2 ADD R0,SP,#+8 \ 0000029C 650100EF SWI +357 618 AddEditControlToEditQend(eq,&ec,ma); //6 \ 000002A0 0520A0E1 MOV R2,R5 619 620 FreeWS(ews); 621 patch_header(&edit_xstatus_hdr); \ 000002A4 ........ LDR R5,??DataTable48 ;; xstmenu \ 000002A8 08108DE2 ADD R1,SP,#+8 \ 000002AC 0600A0E1 MOV R0,R6 \ 000002B0 660100EF SWI +358 \ 000002B4 0700A0E1 MOV R0,R7 \ 000002B8 290100EF SWI +297 \ 000002BC 0070A0E3 MOV R7,#+0 \ 000002C0 B07BC5E1 STRH R7,[R5, #+176] \ 000002C4 1800A0E3 MOV R0,#+24 \ 000002C8 B20BC5E1 STRH R0,[R5, #+178] \ 000002CC 888100EF SWI +33160 \ 000002D0 010040E2 SUB R0,R0,#+1 \ 000002D4 B40BC5E1 STRH R0,[R5, #+180] \ 000002D8 8A8100EF SWI +33162 \ 000002DC 170080E2 ADD R0,R0,#+23 \ 000002E0 B60BC5E1 STRH R0,[R5, #+182] 622 patch_input(&edit_xstatus_desc); \ 000002E4 B079C5E1 STRH R7,[R5, #+144] \ 000002E8 8A8100EF SWI +33162 \ 000002EC 190080E2 ADD R0,R0,#+25 \ 000002F0 B209C5E1 STRH R0,[R5, #+146] \ 000002F4 888100EF SWI +33160 \ 000002F8 010040E2 SUB R0,R0,#+1 \ 000002FC B409C5E1 STRH R0,[R5, #+148] \ 00000300 898100EF SWI +33161 \ 00000304 0070A0E1 MOV R7,R0 \ 00000308 8B8100EF SWI +33163 \ 0000030C 000047E0 SUB R0,R7,R0 \ 00000310 010040E2 SUB R0,R0,#+1 \ 00000314 B609C5E1 STRH R0,[R5, #+150] 623 CreateInputTextDialog(&edit_xstatus_desc,&edit_xstatus_hdr,eq,1,(void *)xstatus); \ 00000318 10002DE9 PUSH {R4} \ 0000031C 0130A0E3 MOV R3,#+1 \ 00000320 0620A0E1 MOV R2,R6 \ 00000324 B01085E2 ADD R1,R5,#+176 \ 00000328 780085E2 ADD R0,R5,#+120 \ 0000032C 670100EF SWI +359 624 } \ 00000330 38D08DE2 ADD SP,SP,#+56 \ 00000334 F087BDE8 POP {R4-R10,PC} ;; return \ ??EditXStatus_0: \ 00000338 ........ DC32 lgpData + 276 \ 0000033C ........ DC32 `?` 625 626 #ifndef GUI_INTERFACE 627 628 #else 629 630 631 //------------------------------------------ 632 633 static GUIMENU xstmenu; 634 635 //------------------------------------------ 636 637 \ In segment CODE, align 4, keep-with-next 638 void DrawXScrollBar(int cur,int total) 639 { \ DrawXScrollBar: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 640 // int scr_h = ScreenH()-1; 641 // int scr_w = ScreenW()-1; 642 int y = xstmenu.rc.y2 - xstmenu.rc.y; \ 00000004 ........ LDR R5,??DataTable48 ;; xstmenu \ 00000008 F287D5E1 LDRSH R8,[R5, #+114] \ 0000000C F637D5E1 LDRSH R3,[R5, #+118] 643 int pos = y*cur/total; \ 00000010 8C709FE5 LDR R7,??DrawXScrollBar_0 ;; clrWhite \ 00000014 0140A0E1 MOV R4,R1 \ 00000018 086043E0 SUB R6,R3,R8 \ 0000001C 900601E0 MUL R1,R0,R6 \ 00000020 0100A0E1 MOV R0,R1 \ 00000024 0410A0E1 MOV R1,R4 \ 00000028 ........ _BLF ??div32_a,??rA??div32_a \ 0000002C F407D5E1 LDRSH R0,[R5, #+116] \ 00000030 0190A0E1 MOV R9,R1 \ 00000034 0710A0E1 MOV R1,R7 \ 00000038 02002DE9 PUSH {R1} \ 0000003C 020040E2 SUB R0,R0,#+2 \ 00000040 0020A0E1 MOV R2,R0 \ 00000044 0110A0E3 MOV R1,#+1 \ 00000048 02002DE9 PUSH {R1} \ 0000004C 0810A0E1 MOV R1,R8 644 int y2 = y/total; 645 646 DrawLine(xstmenu.rc.x2-2,xstmenu.rc.y,xstmenu.rc.x2-2,xstmenu.rc.y2,1,clrWhite); \ 00000050 B30100EF SWI +435 647 DrawRoundedFrame(xstmenu.rc.x2-3,xstmenu.rc.y+pos+1,xstmenu.rc.x2-1,xstmenu.rc.y+pos+y2,0,0,0,clrWhite,clrWhite); \ 00000054 F207D5E1 LDRSH R0,[R5, #+114] \ 00000058 F457D5E1 LDRSH R5,[R5, #+116] \ 0000005C 0410A0E1 MOV R1,R4 \ 00000060 008089E0 ADD R8,R9,R0 \ 00000064 0700A0E1 MOV R0,R7 \ 00000068 01002DE9 PUSH {R0} \ 0000006C 80002DE9 PUSH {R7} \ 00000070 012045E2 SUB R2,R5,#+1 \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 01002DE9 PUSH {R0} \ 0000007C 01002DE9 PUSH {R0} \ 00000080 01002DE9 PUSH {R0} \ 00000084 0600A0E1 MOV R0,R6 \ 00000088 ........ _BLF ??div32_a,??rA??div32_a \ 0000008C 083081E0 ADD R3,R1,R8 \ 00000090 011088E2 ADD R1,R8,#+1 \ 00000094 030045E2 SUB R0,R5,#+3 \ 00000098 500100EF SWI +336 648 } \ 0000009C 1CD08DE2 ADD SP,SP,#+28 \ 000000A0 F083BDE8 POP {R4-R9,PC} ;; return \ ??DrawXScrollBar_0: \ 000000A4 ........ DC32 clrWhite \ In segment DATA_I, align 4, align-sorted \ xstmenu: \ 00000000 DS8 120 \ 00000078 REQUIRE `?` \ edit_xstatus_desc: \ 00000078 DS8 56 \ 000000B0 REQUIRE `?` \ edit_xstatus_hdr: \ 000000B0 DS8 20 \ 000000C4 REQUIRE `?` \ XStatusChange_ID: \ 000000C4 DS8 4 \ 000000C8 REQUIRE `?` \ total_xstatuses: \ 000000C8 DS8 4 \ 000000CC REQUIRE `?` 649 650 651 //------------------------------------------ 652 653 654 extern const char _s[]; 655 656 typedef struct 657 { 658 void *next; 659 char *xshort; 660 char *xlong; 661 int index; 662 }XSTTEXT; 663 664 volatile XSTTEXT *xtexttop; \ xtexttop: \ 000000CC DS8 4 \ 000000D0 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ edit_x_sk: \ 00000000 DS8 24 \ 00000018 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ edit_x_skt: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ ??sk: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` 665 \ In segment CODE, align 4, keep-with-next 666 void FreeXSTList() 667 { \ FreeXSTList: \ 00000000 10402DE9 PUSH {R4,LR} 668 LockSched(); \ 00000004 460100EF SWI +326 669 XSTTEXT *bmk=(XSTTEXT *)xtexttop; \ 00000008 ........ LDR R0,??DataTable48 ;; xstmenu 670 xtexttop=0; \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 CC4090E5 LDR R4,[R0, #+204] \ 00000014 CC1080E5 STR R1,[R0, #+204] 671 UnlockSched(); \ 00000018 470100EF SWI +327 \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} 672 while(bmk) 673 { 674 XSTTEXT *bmk_prev=bmk; \ ??FreeXSTList_0: \ 00000024 0400A0E1 MOV R0,R4 675 bmk=bmk->next; \ 00000028 004094E5 LDR R4,[R4, #+0] 676 mfree(bmk_prev); \ 0000002C 150000EF SWI +21 677 } \ 00000030 000054E3 CMP R4,#+0 \ 00000034 FAFFFF1A BNE ??FreeXSTList_0 678 } \ 00000038 1080BDE8 POP {R4,PC} ;; return 679 680 extern int GetWidth(char *s, int font); 681 682 683 /* 684 * Функция: InitXText 685 * Описание: инициализация текста х-статусов, записываем в связный список 686 * Параметры: Никаких 687 * Возвращаемое значение: Ничего не возвращает 688 */ \ In segment CODE, align 4, keep-with-next 689 void InitXText() 690 { \ InitXText: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 691 FreeXSTList(); 692 char *s; 693 int l; 694 for(int i=0;i` \ 0000000C 1C919FE5 LDR R9,??InitXText_0+0x8 ;; _s \ 00000010 04D04DE2 SUB SP,SP,#+4 \ 00000014 ........ BL FreeXSTList \ 00000018 0040A0E3 MOV R4,#+0 \ 0000001C 0B0000EA B ??InitXText_1 695 { 696 XSTTEXT *bmk=malloc(sizeof(XSTTEXT)); 697 bmk->next=0; 698 bmk->xlong=malloc(128); 699 bmk->xshort=malloc(128); 700 701 if(i!=0) 702 { 703 if(s=GetXStatusStr(i*3+1,&l)) 704 snprintf(bmk->xshort,128,_s,s); 705 else 706 snprintf(bmk->xshort,128,"Short XS %d",i); 707 708 if(s=GetXStatusStr(i*3+2,&l)) 709 { 710 /* 711 xstmenu.img = GetXIconByItem(1); 712 int len = strlen(s); 713 //отрезаем строку для вывода 714 while( GetWidth(s,MMFont) > (xstmenu.img->w - (XSRect.x2-XSRect.x-5)) ) 715 { 716 s[len--] = 0; 717 }*/ 718 719 snprintf(bmk->xlong,128,_s,s); 720 } 721 else 722 sprintf(bmk->xlong,"Large XS %d",(i)); 723 } 724 725 if(!xtexttop) 726 { 727 snprintf(bmk->xshort,128,"Без xстатуса"); 728 bmk->xlong=""; 729 bmk->index = 0; 730 xtexttop=bmk; 731 } 732 else 733 { 734 XSTTEXT *bm=(XSTTEXT *)xtexttop; \ ??InitXText_2: \ 00000020 001090E5 LDR R1,[R0, #+0] \ 00000024 000051E3 CMP R1,#+0 \ 00000028 0300000A BEQ ??InitXText_3 735 while(bm->next) 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 736 bmk->index = bm->index+1; \ ??InitXText_3: \ 0000003C 0C1090E5 LDR R1,[R0, #+12] 737 bm->next=bmk; \ 00000040 005080E5 STR R5,[R0, #+0] \ 00000044 011081E2 ADD R1,R1,#+1 \ ??InitXText_5: \ 00000048 0C1085E5 STR R1,[R5, #+12] 738 } \ 0000004C 014084E2 ADD R4,R4,#+1 \ ??InitXText_1: \ 00000050 C80096E5 LDR R0,[R6, #+200] \ 00000054 000054E1 CMP R4,R0 \ 00000058 F183BDA8 POPGE {R0,R4-R9,PC} \ 0000005C 1000A0E3 MOV R0,#+16 \ 00000060 140000EF SWI +20 \ 00000064 0050A0E1 MOV R5,R0 \ 00000068 0000A0E3 MOV R0,#+0 \ 0000006C 000085E5 STR R0,[R5, #+0] \ 00000070 8000A0E3 MOV R0,#+128 \ 00000074 140000EF SWI +20 \ 00000078 080085E5 STR R0,[R5, #+8] \ 0000007C 8000A0E3 MOV R0,#+128 \ 00000080 140000EF SWI +20 \ 00000084 040085E5 STR R0,[R5, #+4] \ 00000088 000054E3 CMP R4,#+0 \ 0000008C 1900000A BEQ ??InitXText_6 \ 00000090 848084E0 ADD R8,R4,R4, LSL #+1 \ 00000094 0D10A0E1 MOV R1,SP \ 00000098 010088E2 ADD R0,R8,#+1 \ 0000009C ........ BL GetXStatusStr \ 000000A0 0030B0E1 MOVS R3,R0 \ 000000A4 040095E5 LDR R0,[R5, #+4] \ 000000A8 0920A011 MOVNE R2,R9 \ 000000AC 0430A001 MOVEQ R3,R4 \ 000000B0 0720A001 MOVEQ R2,R7 \ 000000B4 8010A0E3 MOV R1,#+128 \ 000000B8 1B0100EF SWI +283 \ 000000BC 0D10A0E1 MOV R1,SP \ 000000C0 020088E2 ADD R0,R8,#+2 \ 000000C4 ........ BL GetXStatusStr \ 000000C8 000050E3 CMP R0,#+0 \ 000000CC 0500000A BEQ ??InitXText_7 \ 000000D0 0030A0E1 MOV R3,R0 \ 000000D4 080095E5 LDR R0,[R5, #+8] \ 000000D8 0920A0E1 MOV R2,R9 \ 000000DC 8010A0E3 MOV R1,#+128 \ 000000E0 1B0100EF SWI +283 \ 000000E4 030000EA B ??InitXText_6 \ ??InitXText_7: \ 000000E8 080095E5 LDR R0,[R5, #+8] \ 000000EC 0420A0E1 MOV R2,R4 \ 000000F0 0C1087E2 ADD R1,R7,#+12 \ 000000F4 160000EF SWI +22 \ ??InitXText_6: \ 000000F8 CC0096E5 LDR R0,[R6, #+204] \ 000000FC 000050E3 CMP R0,#+0 \ 00000100 C6FFFF1A BNE ??InitXText_2 \ 00000104 040095E5 LDR R0,[R5, #+4] \ 00000108 182087E2 ADD R2,R7,#+24 \ 0000010C 8010A0E3 MOV R1,#+128 \ 00000110 1B0100EF SWI +283 \ 00000114 030F8FE2 ADR R0,??InitXText_0 ;; "" \ 00000118 080085E5 STR R0,[R5, #+8] \ 0000011C 0010A0E3 MOV R1,#+0 \ 00000120 CC5086E5 STR R5,[R6, #+204] \ 00000124 C7FFFFEA B ??InitXText_5 \ ??InitXText_0: \ 00000128 00000000 DC8 "",+0,+0,+0 \ 0000012C ........ DC32 `?` \ 00000130 ........ DC32 _s 739 } 740 } 741 \ In segment CODE, align 4, keep-with-next 742 XSTTEXT *GetXSTByItem(int curitem) 743 { 744 XSTTEXT *bmk; 745 bmk=(XSTTEXT *)xtexttop; \ GetXSTByItem: \ 00000000 24109FE5 LDR R1,??GetXSTByItem_0 ;; xstmenu + 204 746 //int i=0; 747 while(bmk) 748 { 749 if(/*i*/bmk->index==curitem) return bmk; 750 //i++; 751 bmk=bmk->next; \ ??GetXSTByItem_1: \ 00000004 001091E5 LDR R1,[R1, #+0] \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0400000A BEQ ??GetXSTByItem_2 \ 00000010 0C2091E5 LDR R2,[R1, #+12] \ 00000014 000052E1 CMP R2,R0 \ 00000018 F9FFFF1A BNE ??GetXSTByItem_1 \ 0000001C 0100A0E1 MOV R0,R1 \ 00000020 1EFF2FE1 BX LR 752 } 753 return 0; \ ??GetXSTByItem_2: \ 00000024 0000A0E3 MOV R0,#+0 \ 00000028 1EFF2FE1 BX LR ;; return \ ??GetXSTByItem_0: \ 0000002C ........ DC32 xstmenu + 204 754 } 755 756 757 /* 758 * Функция: XS_DrawList 759 * Описание: Отрисовка меню Х-Статусов 760 * Параметры: Никаких 761 * Возвращаемое значение: Ничего не возвращает 762 */ \ In segment CODE, align 4, keep-with-next 763 void XS_DrawList() 764 { \ XS_DrawList: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 765 int font_y = 16 + 2;// FontH(MMFont)+1; 766 // int scr_h = ScreenH()-1; 767 // int scr_w = ScreenW()-1; 768 #ifdef ELKA 769 xstmenu.itemFromDisp = sdiv(font_y,(xstmenu.rc.y2-xstmenu.rc.y)); \ 00000004 ........ LDR R4,??DataTable48 ;; xstmenu \ 00000008 0CD04DE2 SUB SP,SP,#+12 \ 0000000C F607D4E1 LDRSH R0,[R4, #+118] \ 00000010 F217D4E1 LDRSH R1,[R4, #+114] 770 if(ShowXStatusSecLine) xstmenu.itemFromDisp--; 771 #else 772 xstmenu.itemFromDisp = sdiv(font_y,(xstmenu.rc.y2-xstmenu.rc.y))-3; 773 #endif 774 775 //if( GetXIconByItem(1)->h > font_y ) font_y = GetIconByItem(1)->h + 2; 776 777 //LockSched(); 778 int i = 0; \ 00000014 0050A0E3 MOV R5,#+0 \ 00000018 011040E0 SUB R1,R0,R1 \ 0000001C 1200A0E3 MOV R0,#+18 \ 00000020 B80000EF SWI +184 \ 00000024 00229FE5 LDR R2,??XS_DrawList_0 ;; ShowXStatusSecLine \ 00000028 002092E5 LDR R2,[R2, #+0] \ 0000002C 00208DE5 STR R2,[SP, #+0] \ 00000030 000052E3 CMP R2,#+0 \ 00000034 01004012 SUBNE R0,R0,#+1 \ 00000038 040084E5 STR R0,[R4, #+4] 779 int start_y = 0; 780 XSTTEXT *xstext; 781 782 RECT rc; 783 int x = 18; 784 785 while( i < xstmenu.itemFromDisp ) \ ??XS_DrawList_1: \ 0000003C 040094E5 LDR R0,[R4, #+4] \ 00000040 000055E1 CMP R5,R0 \ 00000044 F78FBD28 POPCS {R0-R2,R4-R11,PC} 786 { 787 xstext = GetXSTByItem(xstmenu.startItem+i); \ 00000048 147094E5 LDR R7,[R4, #+20] \ 0000004C 070085E0 ADD R0,R5,R7 \ 00000050 ........ BL GetXSTByItem \ 00000054 0060B0E1 MOVS R6,R0 788 if(!xstext) break; \ 00000058 F78FBD08 POPEQ {R0-R2,R4-R11,PC} 789 790 //если ниже курсора и показывать вторую линию 791 if(i + xstmenu.startItem > xstmenu.curpos && ShowXStatusSecLine) start_y = font_y+3; \ 0000005C 001094E5 LDR R1,[R4, #+0] \ 00000060 050087E0 ADD R0,R7,R5 \ 00000064 000051E1 CMP R1,R0 \ 00000068 0400002A BCS ??XS_DrawList_2 \ 0000006C 00209DE5 LDR R2,[SP, #+0] \ 00000070 000052E3 CMP R2,#+0 \ 00000074 0200000A BEQ ??XS_DrawList_3 \ 00000078 1520A0E3 MOV R2,#+21 \ 0000007C 000000EA B ??XS_DrawList_3 792 else start_y=0; \ ??XS_DrawList_2: \ 00000080 0020A0E3 MOV R2,#+0 793 794 start_y += (xstmenu.rc.y + 2 + (i*font_y)); \ ??XS_DrawList_3: \ 00000084 F277D4E1 LDRSH R7,[R4, #+114] \ 00000088 1230A0E3 MOV R3,#+18 795 patch_rect(&rc,xstmenu.rc.x+3,start_y,xstmenu.rc.x2-2,start_y+font_y); 796 797 if( i + xstmenu.startItem == xstmenu.curpos) \ 0000008C 010050E1 CMP R0,R1 \ 00000090 937527E0 MLA R7,R3,R5,R7 \ 00000094 023087E2 ADD R3,R7,#+2 \ 00000098 027083E0 ADD R7,R3,R2 \ 0000009C F037D4E1 LDRSH R3,[R4, #+112] \ 000000A0 12A087E2 ADD R10,R7,#+18 \ 000000A4 033083E2 ADD R3,R3,#+3 \ 000000A8 B430CDE1 STRH R3,[SP, #+4] \ 000000AC F427D4E1 LDRSH R2,[R4, #+116] \ 000000B0 ........ LDR R3,??DataTable28 ;; MMFont \ 000000B4 029042E2 SUB R9,R2,#+2 \ 000000B8 003093E5 LDR R3,[R3, #+0] \ 000000BC 08308DE5 STR R3,[SP, #+8] \ 000000C0 3500001A BNE ??XS_DrawList_4 798 { 799 DrawRoundedFrame(rc.x+1, rc.y-1, rc.x2-5, rc.y2-1 + (ShowXStatusSecLine?font_y:0),0,0,0,MMCursorClr,MMCursorBGClr); \ 000000C4 00009DE5 LDR R0,[SP, #+0] \ 000000C8 F4B0DDE1 LDRSH R11,[SP, #+4] \ 000000CC ........ LDR R1,??DataTable29 ;; MMCursorBGClr \ 000000D0 000050E3 CMP R0,#+0 \ 000000D4 02002DE9 PUSH {R1} \ 000000D8 ........ LDR R1,??DataTable30 ;; MMCursorClr \ 000000DC 1200A013 MOVNE R0,#+18 \ 000000E0 02002DE9 PUSH {R1} \ 000000E4 0010A0E3 MOV R1,#+0 \ 000000E8 02002DE9 PUSH {R1} \ 000000EC 02002DE9 PUSH {R1} \ 000000F0 02002DE9 PUSH {R1} \ 000000F4 0A18A0E1 MOV R1,R10, LSL #+16 \ 000000F8 4118A0E1 MOV R1,R1, ASR #+16 \ 000000FC 000081E0 ADD R0,R1,R0 \ 00000100 013040E2 SUB R3,R0,#+1 \ 00000104 0908A0E1 MOV R0,R9, LSL #+16 \ 00000108 4008A0E1 MOV R0,R0, ASR #+16 \ 0000010C 052040E2 SUB R2,R0,#+5 \ 00000110 0708A0E1 MOV R0,R7, LSL #+16 \ 00000114 4008A0E1 MOV R0,R0, ASR #+16 \ 00000118 011040E2 SUB R1,R0,#+1 \ 0000011C 01008BE2 ADD R0,R11,#+1 \ 00000120 500100EF SWI +336 800 if(ShowXStatusSecLine) \ 00000124 14009DE5 LDR R0,[SP, #+20] \ 00000128 14D08DE2 ADD SP,SP,#+20 \ 0000012C 000050E3 CMP R0,#+0 \ 00000130 1500000A BEQ ??XS_DrawList_5 801 DrawStr(xstext->xlong, rc.x + x + 6, rc.y + font_y, rc.x2 - x, rc.y2 + font_y, 0,MMFont,(char*)MMFontClr,0); \ 00000134 0000A0E3 MOV R0,#+0 \ 00000138 01002DE9 PUSH {R0} \ 0000013C ........ LDR R0,??DataTable32 ;; MMFontClr \ 00000140 18108BE2 ADD R1,R11,#+24 \ 00000144 01002DE9 PUSH {R0} \ 00000148 10009DE5 LDR R0,[SP, #+16] \ 0000014C 01002DE9 PUSH {R0} \ 00000150 0000A0E3 MOV R0,#+0 \ 00000154 01002DE9 PUSH {R0} \ 00000158 0A08A0E1 MOV R0,R10, LSL #+16 \ 0000015C 4008A0E1 MOV R0,R0, ASR #+16 \ 00000160 120080E2 ADD R0,R0,#+18 \ 00000164 01002DE9 PUSH {R0} \ 00000168 0908A0E1 MOV R0,R9, LSL #+16 \ 0000016C 4008A0E1 MOV R0,R0, ASR #+16 \ 00000170 123040E2 SUB R3,R0,#+18 \ 00000174 0708A0E1 MOV R0,R7, LSL #+16 \ 00000178 4008A0E1 MOV R0,R0, ASR #+16 \ 0000017C 122080E2 ADD R2,R0,#+18 \ 00000180 080096E5 LDR R0,[R6, #+8] \ 00000184 ........ _BLF DrawStr,??DrawStr??rA \ 00000188 14D08DE2 ADD SP,SP,#+20 802 DrawXScrollBar(xstmenu.startItem+i, total_xstatuses); \ ??XS_DrawList_5: \ 0000018C C81094E5 LDR R1,[R4, #+200] \ 00000190 140094E5 LDR R0,[R4, #+20] \ 00000194 000085E0 ADD R0,R5,R0 \ 00000198 ........ BL DrawXScrollBar 803 } 804 805 DrwImage(GetXIconByItem(i+xstmenu.startItem),rc.x+2,start_y,0); \ ??XS_DrawList_4: \ 0000019C 140094E5 LDR R0,[R4, #+20] 806 807 DrawStr(xstext->xshort,rc.x + x + 6,rc.y - 1, rc.x2 - ( x + 6), rc.y2, 0, MMFont, (char*)MMFontClr, 0); \ 000001A0 0AA8A0E1 MOV R10,R10, LSL #+16 \ 000001A4 050080E0 ADD R0,R0,R5 \ 000001A8 ........ _BLF GetXIconByItem,??GetXIconByItem??rA \ 000001AC F4B0DDE1 LDRSH R11,[SP, #+4] \ 000001B0 0030A0E3 MOV R3,#+0 \ 000001B4 0720A0E1 MOV R2,R7 \ 000001B8 02108BE2 ADD R1,R11,#+2 \ 000001BC ........ _BLF DrwImage,??DrwImage??rA \ 000001C0 0000A0E3 MOV R0,#+0 \ 000001C4 01002DE9 PUSH {R0} \ 000001C8 ........ LDR R0,??DataTable32 ;; MMFontClr \ 000001CC 4AA8A0E1 MOV R10,R10, ASR #+16 \ 000001D0 01002DE9 PUSH {R0} \ 000001D4 10009DE5 LDR R0,[SP, #+16] \ 000001D8 0998A0E1 MOV R9,R9, LSL #+16 \ 000001DC 01002DE9 PUSH {R0} \ 000001E0 4998A0E1 MOV R9,R9, ASR #+16 \ 000001E4 183049E2 SUB R3,R9,#+24 \ 000001E8 0788A0E1 MOV R8,R7, LSL #+16 \ 000001EC 0000A0E3 MOV R0,#+0 \ 000001F0 01002DE9 PUSH {R0} \ 000001F4 00042DE9 PUSH {R10} \ 000001F8 4888A0E1 MOV R8,R8, ASR #+16 \ 000001FC 040096E5 LDR R0,[R6, #+4] \ 00000200 012048E2 SUB R2,R8,#+1 \ 00000204 18108BE2 ADD R1,R11,#+24 \ 00000208 ........ _BLF DrawStr,??DrawStr??rA 808 809 i++; 810 if(xstmenu.startItem + i >= total_xstatuses) break; \ 0000020C 140094E5 LDR R0,[R4, #+20] \ 00000210 C81094E5 LDR R1,[R4, #+200] \ 00000214 015085E2 ADD R5,R5,#+1 \ 00000218 000085E0 ADD R0,R5,R0 \ 0000021C 010050E1 CMP R0,R1 \ 00000220 14D08DE2 ADD SP,SP,#+20 \ 00000224 84FFFF3A BCC ??XS_DrawList_1 811 } 812 } \ 00000228 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??XS_DrawList_0: \ 0000022C ........ DC32 ShowXStatusSecLine 813 814 815 //------------------------------------------ 816 817 818 // Управление курсором \ In segment CODE, align 4, keep-with-next 819 void XS_MoveUp() 820 { 821 if(xstmenu.curpos > xstmenu.itemFromDisp + 2 ) \ XS_MoveUp: \ 00000000 ........ LDR R0,??DataTable48 ;; xstmenu \ 00000004 001090E5 LDR R1,[R0, #+0] \ 00000008 043090E5 LDR R3,[R0, #+4] \ 0000000C 142090E5 LDR R2,[R0, #+20] \ 00000010 02C083E2 ADD R12,R3,#+2 \ 00000014 01005CE1 CMP R12,R1 \ 00000018 0A00002A BCS ??XS_MoveUp_0 822 { 823 xstmenu.curpos--; \ 0000001C 011041E2 SUB R1,R1,#+1 824 if(xstmenu.startItem > 0 && xstmenu.curpos > 5 && xstmenu.curpos < total_xstatuses-5) \ 00000020 000052E3 CMP R2,#+0 \ 00000024 1100000A BEQ ??XS_MoveUp_1 \ 00000028 060051E3 CMP R1,#+6 \ 0000002C 0F0000BA BLT ??XS_MoveUp_1 \ 00000030 C83090E5 LDR R3,[R0, #+200] \ 00000034 053043E2 SUB R3,R3,#+5 \ 00000038 030051E1 CMP R1,R3 \ 0000003C 0B0000AA BGE ??XS_MoveUp_1 825 xstmenu.startItem--; \ ??XS_MoveUp_2: \ 00000040 012042E2 SUB R2,R2,#+1 \ 00000044 090000EA B ??XS_MoveUp_1 826 } 827 else 828 if(xstmenu.curpos > 0) \ ??XS_MoveUp_0: \ 00000048 010051E3 CMP R1,#+1 \ 0000004C 0A0000BA BLT ??XS_MoveUp_3 829 { 830 xstmenu.curpos--; \ 00000050 011041E2 SUB R1,R1,#+1 831 if(xstmenu.startItem > 0 && xstmenu.curpos > 5) \ 00000054 000052E3 CMP R2,#+0 \ 00000058 0100000A BEQ ??XS_MoveUp_4 \ 0000005C 060051E3 CMP R1,#+6 \ 00000060 F6FFFFAA BGE ??XS_MoveUp_2 832 xstmenu.startItem--; 833 else 834 if(xstmenu.curpos < 5) \ ??XS_MoveUp_4: \ 00000064 050051E3 CMP R1,#+5 \ 00000068 000000AA BGE ??XS_MoveUp_1 835 xstmenu.startItem=0; \ 0000006C 0020A0E3 MOV R2,#+0 \ ??XS_MoveUp_1: \ 00000070 142080E5 STR R2,[R0, #+20] \ 00000074 001080E5 STR R1,[R0, #+0] \ 00000078 1EFF2FE1 BX LR 836 } 837 else 838 { 839 xstmenu.curpos=total_xstatuses-1; \ ??XS_MoveUp_3: \ 0000007C C81090E5 LDR R1,[R0, #+200] 840 xstmenu.startItem=total_xstatuses-xstmenu.itemFromDisp; \ 00000080 C82090E5 LDR R2,[R0, #+200] \ 00000084 011041E2 SUB R1,R1,#+1 \ 00000088 032042E0 SUB R2,R2,R3 \ ??XS_MoveUp_5: \ 0000008C F7FFFFEA B ??XS_MoveUp_1 841 } 842 } 843 844 \ In segment CODE, align 4, keep-with-next 845 void XS_MoveDown() 846 { 847 if(xstmenu.curpos < xstmenu.itemFromDisp - 5) xstmenu.curpos++; \ XS_MoveDown: \ 00000000 ........ LDR R0,??DataTable48 ;; xstmenu \ 00000004 001090E5 LDR R1,[R0, #+0] \ 00000008 043090E5 LDR R3,[R0, #+4] \ 0000000C 142090E5 LDR R2,[R0, #+20] \ 00000010 05C043E2 SUB R12,R3,#+5 \ 00000014 0C0051E1 CMP R1,R12 \ 00000018 0100002A BCS ??XS_MoveDown_0 \ ??XS_MoveDown_1: \ 0000001C 011081E2 ADD R1,R1,#+1 \ 00000020 0B0000EA B ??XS_MoveDown_2 848 else 849 if(xstmenu.curpos < total_xstatuses - 1) \ ??XS_MoveDown_0: \ 00000024 C8C090E5 LDR R12,[R0, #+200] \ 00000028 01C04CE2 SUB R12,R12,#+1 \ 0000002C 0C0051E1 CMP R1,R12 \ 00000030 050000AA BGE ??XS_MoveDown_3 850 { 851 if(xstmenu.startItem < total_xstatuses-xstmenu.itemFromDisp) \ 00000034 C8C090E5 LDR R12,[R0, #+200] \ 00000038 03304CE0 SUB R3,R12,R3 \ 0000003C 030052E1 CMP R2,R3 \ 00000040 F5FFFF2A BCS ??XS_MoveDown_1 852 xstmenu.startItem++; \ 00000044 012082E2 ADD R2,R2,#+1 \ 00000048 F3FFFFEA B ??XS_MoveDown_1 853 xstmenu.curpos++; 854 } 855 else 856 { 857 xstmenu.curpos=0; \ ??XS_MoveDown_3: \ 0000004C 0010A0E3 MOV R1,#+0 858 xstmenu.startItem=0; \ 00000050 0020A0E3 MOV R2,#+0 \ ??XS_MoveDown_2: \ 00000054 142080E5 STR R2,[R0, #+20] \ 00000058 001080E5 STR R1,[R0, #+0] 859 } 860 } \ 0000005C 1EFF2FE1 BX LR ;; return 861 862 863 //------------------------------------------ 864 865 \ In segment CODE, align 4, keep-with-next 866 void XS_OnRedraw(MAIN_GUI *data) 867 { 868 DrwImage(&StatusChangeScreen,0,HeaderY+2,0); \ XS_OnRedraw: \ 00000000 ........ LDR R0,??DataTable40 ;; HeaderY \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 0030A0E3 MOV R3,#+0 \ 00000010 022080E2 ADD R2,R0,#+2 \ 00000014 ........ LDR R0,??DataTable41 ;; StatusChangeScreen \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C ........ _BLF DrwImage,??DrwImage??rA 869 DrawRoundedFrame(xstmenu.rc.x,xstmenu.rc.y-2,xstmenu.rc.x2,xstmenu.rc.y2,0,0,0,MMBackgrBordClr,MMBackgrClr); \ 00000020 ........ LDR R1,??DataTable37 ;; MMBackgrClr \ 00000024 ........ LDR R0,??DataTable48 ;; xstmenu \ 00000028 02002DE9 PUSH {R1} \ 0000002C ........ LDR R1,??DataTable39 ;; MMBackgrBordClr \ 00000030 02002DE9 PUSH {R1} \ 00000034 0010A0E3 MOV R1,#+0 \ 00000038 02002DE9 PUSH {R1} \ 0000003C 02002DE9 PUSH {R1} \ 00000040 02002DE9 PUSH {R1} \ 00000044 F637D0E1 LDRSH R3,[R0, #+118] \ 00000048 F427D0E1 LDRSH R2,[R0, #+116] \ 0000004C F217D0E1 LDRSH R1,[R0, #+114] \ 00000050 F007D0E1 LDRSH R0,[R0, #+112] \ 00000054 021041E2 SUB R1,R1,#+2 \ 00000058 500100EF SWI +336 870 XS_DrawList(); \ 0000005C ........ BL XS_DrawList 871 } \ 00000060 14D08DE2 ADD SP,SP,#+20 \ 00000064 0080BDE8 POP {PC} ;; return 872 \ In segment CODE, align 4, keep-with-next 873 void XS_onCreate(MAIN_GUI *data, void *(*malloc_adr)(int)) 874 { \ XS_onCreate: \ 00000000 70402DE9 PUSH {R4-R6,LR} 875 #ifdef ELKA 876 #ifndef ICONBAR 877 DisableIconBar(1); 878 #endif 879 #endif 880 881 int HSIZE = (HeaderY+2)*ScreenW(); \ 00000004 ........ LDR R5,??DataTable40 ;; HeaderY \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 888100EF SWI +33160 \ 00000010 001095E5 LDR R1,[R5, #+0] \ 00000014 021081E2 ADD R1,R1,#+2 \ 00000018 900106E0 MUL R6,R0,R1 882 int ScrH = ScreenH()-(HeaderY+2); \ 0000001C 898100EF SWI +33161 \ 00000020 001095E5 LDR R1,[R5, #+0] 883 StatusChangeScreen = DoScreen(ScrH,HSIZE); \ 00000024 0620A0E1 MOV R2,R6 \ 00000028 010040E0 SUB R0,R0,R1 \ 0000002C 021040E2 SUB R1,R0,#+2 \ 00000030 ........ LDR R0,??DataTable41 ;; StatusChangeScreen \ 00000034 ........ _BLF DoScreen,??DoScreen??rA 884 885 InitXText(); \ 00000038 ........ BL InitXText 886 887 xstmenu.rc = XSRect; \ 0000003C 88209FE5 LDR R2,??XS_onCreate_0 ;; XSRect \ 00000040 ........ LDR R0,??DataTable48 ;; xstmenu \ 00000044 B030D2E1 LDRH R3,[R2, #0] \ 00000048 701080E2 ADD R1,R0,#+112 \ 0000004C B030C1E1 STRH R3,[R1, #+0] \ 00000050 B230D2E1 LDRH R3,[R2, #+2] \ 00000054 B230C1E1 STRH R3,[R1, #+2] \ 00000058 B430D2E1 LDRH R3,[R2, #+4] \ 0000005C B430C1E1 STRH R3,[R1, #+4] \ 00000060 B630D2E1 LDRH R3,[R2, #+6] \ 00000064 B630C1E1 STRH R3,[R1, #+6] 888 889 xstmenu.curpos = CurrentXStatus; \ 00000068 ........ LDR R1,??DataTable46 ;; CurrentXStatus \ 0000006C 001091E5 LDR R1,[R1, #+0] \ 00000070 001080E5 STR R1,[R0, #+0] 890 if(xstmenu.curpos > 5 && xstmenu.curpos < total_xstatuses-xstmenu.itemFromDisp) \ 00000074 060051E3 CMP R1,#+6 \ 00000078 050000BA BLT ??XS_onCreate_1 \ 0000007C C82090E5 LDR R2,[R0, #+200] \ 00000080 043090E5 LDR R3,[R0, #+4] \ 00000084 032042E0 SUB R2,R2,R3 \ 00000088 020051E1 CMP R1,R2 891 xstmenu.startItem = xstmenu.curpos-5; \ 0000008C 05104132 SUBCC R1,R1,#+5 \ 00000090 0900003A BCC ??XS_onCreate_2 892 else 893 if(xstmenu.curpos > total_xstatuses-xstmenu.itemFromDisp) \ ??XS_onCreate_1: \ 00000094 042090E5 LDR R2,[R0, #+4] \ 00000098 C83090E5 LDR R3,[R0, #+200] \ 0000009C 023043E0 SUB R3,R3,R2 \ 000000A0 010053E1 CMP R3,R1 894 xstmenu.startItem = total_xstatuses-xstmenu.itemFromDisp; \ 000000A4 C8109035 LDRCC R1,[R0, #+200] \ 000000A8 02104130 SUBCC R1,R1,R2 \ 000000AC 0200003A BCC ??XS_onCreate_2 895 else 896 if(xstmenu.curpos < 5) \ 000000B0 050051E3 CMP R1,#+5 \ 000000B4 010000AA BGE ??XS_onCreate_3 897 xstmenu.startItem=0; \ 000000B8 0010A0E3 MOV R1,#+0 \ ??XS_onCreate_2: \ 000000BC 141080E5 STR R1,[R0, #+20] 898 899 data->gui.state=1; \ ??XS_onCreate_3: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 0C00C4E5 STRB R0,[R4, #+12] 900 } \ 000000C8 7080BDE8 POP {R4-R6,PC} ;; return \ ??XS_onCreate_0: \ 000000CC ........ DC32 XSRect 901 \ In segment CODE, align 4, keep-with-next 902 void XS_onClose(MAIN_GUI *data, void (*mfree_adr)(void *)) 903 { \ XS_onClose: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 ........ LDR R0,??DataTable44 ;; StatusChangeScreen + 8 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 0000000A BEQ ??XS_onClose_0 904 if(StatusChangeScreen.bitmap) mfree(StatusChangeScreen.bitmap); \ 00000018 150000EF SWI +21 905 FreeXSTList(); \ ??XS_onClose_0: \ 0000001C ........ BL FreeXSTList 906 InitMMenu(); \ 00000020 ........ _BLF InitMMenu,??InitMMenu??rA 907 data->gui.state=0; \ 00000024 0000A0E3 MOV R0,#+0 \ 00000028 0C00C4E5 STRB R0,[R4, #+12] 908 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 909 \ In segment CODE, align 4, keep-with-next 910 void XS_onFocus(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) 911 { \ XS_onFocus: \ 00000000 00402DE9 PUSH {LR} 912 #ifdef ELKA 913 #ifndef ICONBAR 914 DisableIconBar(1); 915 #endif 916 #endif 917 data->gui.state=2; \ 00000004 0210A0E3 MOV R1,#+2 \ 00000008 0C10C0E5 STRB R1,[R0, #+12] 918 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 919 } \ 00000010 0080BDE8 POP {PC} ;; return 920 \ In segment CODE, align 4, keep-with-next 921 void XS_onUnfocus(MAIN_GUI *data, void (*mfree_adr)(void *)) 922 { 923 if (data->gui.state!=2) return; \ XS_onUnfocus: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 924 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 925 } \ 00000010 1EFF2FE1 BX LR ;; return 926 \ In segment CODE, align 4, keep-with-next 927 int XS_OnKey(MAIN_GUI *data, GUI_MSG *msg) 928 { \ XS_OnKey: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 929 // DirectRedrawGUI(); 930 DirectRedrawGUI_ID(XStatusChange_ID); \ 00000004 ........ LDR R4,??DataTable48 ;; xstmenu \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C C40094E5 LDR R0,[R4, #+196] 931 int k=msg->gbsmsg->submess; 932 933 if (msg->gbsmsg->msg==KEY_DOWN || msg->gbsmsg->msg==LONG_PRESS) \ 00000010 9360A0E3 MOV R6,#+147 \ 00000014 400100EF SWI +320 \ 00000018 047095E5 LDR R7,[R5, #+4] \ 0000001C 406F86E3 ORR R6,R6,#0x100 \ 00000020 040097E5 LDR R0,[R7, #+4] \ 00000024 085097E5 LDR R5,[R7, #+8] \ 00000028 060050E1 CMP R0,R6 \ 0000002C 02108612 ADDNE R1,R6,#+2 \ 00000030 01005011 CMPNE R0,R1 \ 00000034 0A00001A BNE ??XS_OnKey_0 934 { 935 switch(k) \ 00000038 040055E2 SUBS R0,R5,#+4 \ 0000003C 08005012 SUBSNE R0,R0,#+8 \ 00000040 1D00000A BEQ ??XS_OnKey_1 \ 00000044 2F0050E2 SUBS R0,R0,#+47 \ 00000048 0400000A BEQ ??XS_OnKey_2 \ 0000004C 010050E2 SUBS R0,R0,#+1 \ 00000050 1700000A BEQ ??XS_OnKey_3 \ 00000054 010050E2 SUBS R0,R0,#+1 \ 00000058 1700000A BEQ ??XS_OnKey_1 \ 0000005C 000000EA B ??XS_OnKey_0 936 { 937 case UP_BUTTON: XS_MoveUp(); break; \ ??XS_OnKey_2: \ 00000060 ........ BL XS_MoveUp 938 case DOWN_BUTTON: XS_MoveDown(); break; 939 case LEFT_BUTTON: case RIGHT_SOFT:case RED_BUTTON: return (1); 940 } 941 } 942 943 if (msg->gbsmsg->msg==KEY_DOWN) \ ??XS_OnKey_0: \ 00000064 040097E5 LDR R0,[R7, #+4] \ 00000068 060050E1 CMP R0,R6 \ 0000006C 1600001A BNE ??XS_OnKey_4 944 { 945 switch(k) \ 00000070 000094E5 LDR R0,[R4, #+0] \ 00000074 015055E2 SUBS R5,R5,#+1 \ 00000078 1100000A BEQ ??XS_OnKey_5 \ 0000007C 195055E2 SUBS R5,R5,#+25 \ 00000080 0300000A BEQ ??XS_OnKey_6 \ 00000084 245055E2 SUBS R5,R5,#+36 \ 00000088 0D00000A BEQ ??XS_OnKey_5 \ 0000008C 0000A0E3 MOV R0,#+0 \ 00000090 F080BDE8 POP {R4-R7,PC} 946 { 947 case ENTER_BUTTON: 948 Change_XStatus(xstmenu.curpos); \ ??XS_OnKey_6: \ 00000094 ........ LDR R1,??DataTable46 ;; CurrentXStatus \ 00000098 000081E5 STR R0,[R1, #+0] \ 0000009C ........ _BLF set_my_xstatus,??set_my_xstatus??rA \ 000000A0 ........ LDR R0,??DataTable47 ;; WriteDefSettings \ 000000A4 710100EF SWI +369 949 DrawHeader(); \ 000000A8 ........ _BLF DrawHeader,??DrawHeader??rA 950 return(1); \ 000000AC 0100A0E3 MOV R0,#+1 \ 000000B0 F080BDE8 POP {R4-R7,PC} \ ??XS_OnKey_3: \ 000000B4 ........ BL XS_MoveDown \ 000000B8 E9FFFFEA B ??XS_OnKey_0 \ ??XS_OnKey_1: \ 000000BC 0100A0E3 MOV R0,#+1 \ 000000C0 F080BDE8 POP {R4-R7,PC} 951 case LEFT_SOFT: case RIGHT_BUTTON: 952 EditXStatus(xstmenu.curpos); \ ??XS_OnKey_5: \ 000000C4 ........ BL EditXStatus 953 REDRAW(); \ 000000C8 720100EF SWI +370 954 break; 955 } 956 } 957 return(0); \ ??XS_OnKey_4: \ 000000CC 0000A0E3 MOV R0,#+0 \ 000000D0 F080BDE8 POP {R4-R7,PC} ;; return 958 } 959 960 extern void kill_data(void *p, void (*func_p)(void *)); 961 \ In segment CODE, align 4, keep-with-next 962 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 963 int XS_method9(void){return(0);} \ XS_method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 964 \ In segment DATA_C, align 4, align-sorted 965 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 966 (void *)XS_OnRedraw, 967 (void *)XS_onCreate, 968 (void *)XS_onClose, 969 (void *)XS_onFocus, 970 (void *)XS_onUnfocus, 971 (void *)XS_OnKey, 972 0, 973 (void *)kill_data, 974 (void *)XS_method8, 975 (void *)XS_method9, 976 0 977 }; 978 979 const RECT XS_Canvas={0,0,0,0}; \ XS_Canvas: \ 0000002C 000000000000 DC16 0, 0, 0, 0 \ 0000 980 \ In segment CODE, align 4, keep-with-next 981 void CreateXSMenu() 982 { 983 edit_xstatus_hdr.lgp_id=(int)lgpData[LGP_MnuXStatus]; \ CreateXSMenu: \ 00000000 48009FE5 LDR R0,??CreateXSMenu_0 ;; lgpData + 96 \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ LDR R4,??DataTable48 ;; xstmenu \ 00000010 BC0084E5 STR R0,[R4, #+188] 984 985 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000014 4000A0E3 MOV R0,#+64 \ 00000018 140000EF SWI +20 \ 0000001C 0050A0E1 MOV R5,R0 986 zeromem(main_gui,sizeof(MAIN_GUI)); \ 00000020 4010A0E3 MOV R1,#+64 \ 00000024 1D0100EF SWI +285 987 main_gui->gui.canvas=(void *)(&XS_Canvas); \ 00000028 24009FE5 LDR R0,??CreateXSMenu_0+0x4 ;; gui_methods_XS \ 0000002C 2C1080E2 ADD R1,R0,#+44 \ 00000030 001085E5 STR R1,[R5, #+0] 988 main_gui->gui.methods=(void *)gui_methods_XS; \ 00000034 040085E5 STR R0,[R5, #+4] 989 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000038 158000EF SWI +32789 \ 0000003C 200085E5 STR R0,[R5, #+32] 990 XStatusChange_ID = CreateGUI(main_gui); \ 00000040 0500A0E1 MOV R0,R5 \ 00000044 370100EF SWI +311 \ 00000048 C40084E5 STR R0,[R4, #+196] 991 } \ 0000004C 3080BDE8 POP {R4,R5,PC} ;; return \ ??CreateXSMenu_0: \ 00000050 ........ DC32 lgpData + 96 \ 00000054 ........ DC32 gui_methods_XS 992 993 #endif 994 \ In segment CODE, align 4, keep-with-next 995 void LoadXStatusText(void) 996 { \ LoadXStatusText: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 4BDF4DE2 SUB SP,SP,#+300 997 FSTATS stat; 998 char fn[256]; 999 int f; 1000 unsigned int ul; 1001 int fsize; 1002 char *p, *s; 1003 int c; 1004 FreeXStatusText(); 1005 strcpy(fn,TEMPLATES_PATH); 1006 strcat(fn,XS_FILE_NAME); 1007 if (GetFileStats(fn,&stat,&ul)==-1) return; \ 00000008 0040E0E3 MVN R4,#+0 \ 0000000C ........ BL FreeXStatusText \ 00000010 ........ LDR R1,??DataTable53 ;; TEMPLATES_PATH \ 00000014 04008DE2 ADD R0,SP,#+4 \ 00000018 1A0000EF SWI +26 \ 0000001C ........ LDR R1,??DataTable54 ;; XS_FILE_NAME \ 00000020 04008DE2 ADD R0,SP,#+4 \ 00000024 170000EF SWI +23 \ 00000028 0D20A0E1 MOV R2,SP \ 0000002C 411F8DE2 ADD R1,SP,#+260 \ 00000030 04008DE2 ADD R0,SP,#+4 \ 00000034 840000EF SWI +132 \ 00000038 040050E1 CMP R0,R4 \ 0000003C 2A00000A BEQ ??LoadXStatusText_0 1008 if ((fsize=stat.size)<=0) return; \ 00000040 08519DE5 LDR R5,[SP, #+264] \ 00000044 010055E3 CMP R5,#+1 \ 00000048 270000BA BLT ??LoadXStatusText_0 1009 if ((f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul))==-1) return; \ 0000004C 0D30A0E1 MOV R3,SP \ 00000050 8020A0E3 MOV R2,#+128 \ 00000054 801CA0E3 MOV R1,#+32768 \ 00000058 04008DE2 ADD R0,SP,#+4 \ 0000005C 0A0000EF SWI +10 \ 00000060 0060A0E1 MOV R6,R0 \ 00000064 040056E1 CMP R6,R4 \ 00000068 1F00000A BEQ ??LoadXStatusText_0 1010 p=XStatusText=malloc(fsize+2); \ 0000006C ........ LDR R4,??DataTable56 ;; XStatusText \ 00000070 020085E2 ADD R0,R5,#+2 \ 00000074 140000EF SWI +20 \ 00000078 000084E5 STR R0,[R4, #+0] \ 0000007C 0040A0E1 MOV R4,R0 1011 s=p+1; \ 00000080 017084E2 ADD R7,R4,#+1 1012 s[fread(f,s,fsize,&ul)]=0; \ 00000084 0080A0E3 MOV R8,#+0 \ 00000088 0D30A0E1 MOV R3,SP \ 0000008C 0520A0E1 MOV R2,R5 \ 00000090 0710A0E1 MOV R1,R7 \ 00000094 0600A0E1 MOV R0,R6 \ 00000098 0B0000EF SWI +11 \ 0000009C 0780C0E7 STRB R8,[R0, +R7] 1013 fclose(f,&ul); \ 000000A0 0D10A0E1 MOV R1,SP \ 000000A4 0600A0E1 MOV R0,R6 \ 000000A8 0D0000EF SWI +13 \ 000000AC 040000EA B ??LoadXStatusText_1 1014 while((c=*s++)!=0) 1015 { 1016 if (c==10) 1017 { 1018 c=13; 1019 if (*s==13) s++; // пропускаем 1020 } 1021 else if (c==13) \ ??LoadXStatusText_2: \ 000000B0 0D0050E3 CMP R0,#+13 \ 000000B4 0100001A BNE ??LoadXStatusText_3 1022 { 1023 if (*s==10) s++; // пропускаем \ 000000B8 0A0051E3 CMP R1,#+10 \ ??LoadXStatusText_4: \ 000000BC 01708702 ADDEQ R7,R7,#+1 1024 } 1025 *p++=c; \ ??LoadXStatusText_3: \ 000000C0 ........ STRB R0,[R4], #+1 \ ??LoadXStatusText_1: \ 000000C4 ........ LDRB R0,[R7], #+1 \ 000000C8 000050E3 CMP R0,#+0 \ 000000CC 0500000A BEQ ??LoadXStatusText_5 \ 000000D0 0010D7E5 LDRB R1,[R7, #+0] \ 000000D4 0A0050E3 CMP R0,#+10 \ 000000D8 F4FFFF1A BNE ??LoadXStatusText_2 \ 000000DC 0D00A0E3 MOV R0,#+13 \ 000000E0 0D0051E3 CMP R1,#+13 \ 000000E4 F4FFFFEA B ??LoadXStatusText_4 1026 } 1027 *p=0; \ ??LoadXStatusText_5: \ 000000E8 0080C4E5 STRB R8,[R4, #+0] 1028 } \ ??LoadXStatusText_0: \ 000000EC 4BDF8DE2 ADD SP,SP,#+300 ;; stack cleaning \ 000000F0 F081BDE8 POP {R4-R8,PC} ;; return 1029 \ In segment CODE, align 4, keep-with-next 1030 void SaveXStatusText(void) 1031 { \ SaveXStatusText: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1032 int f; 1033 char fn[256]; 1034 unsigned int ul; 1035 if (!XStatusText) return; \ 00000004 ........ LDR R4,??DataTable56 ;; XStatusText \ 00000008 41DF4DE2 SUB SP,SP,#+260 \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 1800000A BEQ ??SaveXStatusText_0 1036 strcpy(fn,TEMPLATES_PATH); \ 00000018 ........ LDR R1,??DataTable53 ;; TEMPLATES_PATH \ 0000001C 04008DE2 ADD R0,SP,#+4 \ 00000020 1A0000EF SWI +26 1037 strcat(fn,XS_FILE_NAME); \ 00000024 ........ LDR R1,??DataTable54 ;; XS_FILE_NAME \ 00000028 04008DE2 ADD R0,SP,#+4 \ 0000002C 170000EF SWI +23 1038 if ((f=fopen(fn,A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&ul))==-1) return; \ 00000030 0D30A0E1 MOV R3,SP \ 00000034 602FA0E3 MOV R2,#+384 \ 00000038 0210A0E3 MOV R1,#+2 \ 0000003C 831C81E3 ORR R1,R1,#0x8300 \ 00000040 04008DE2 ADD R0,SP,#+4 \ 00000044 0A0000EF SWI +10 \ 00000048 0050A0E1 MOV R5,R0 \ 0000004C 010075E3 CMN R5,#+1 \ 00000050 0900000A BEQ ??SaveXStatusText_0 1039 fwrite(f,XStatusText,strlen(XStatusText),&ul); \ 00000054 000094E5 LDR R0,[R4, #+0] \ 00000058 1B0000EF SWI +27 \ 0000005C 001094E5 LDR R1,[R4, #+0] \ 00000060 0D30A0E1 MOV R3,SP \ 00000064 0020A0E1 MOV R2,R0 \ 00000068 0500A0E1 MOV R0,R5 \ 0000006C 0C0000EF SWI +12 1040 fclose(f,&ul); \ 00000070 0D10A0E1 MOV R1,SP \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 0D0000EF SWI +13 1041 } \ ??SaveXStatusText_0: \ 0000007C 41DF8DE2 ADD SP,SP,#+260 ;; stack cleaning \ 00000080 3080BDE8 POP {R4,R5,PC} ;; return 1042 \ In segment CODE, align 4, keep-with-next 1043 void FreeXStatusText(void) 1044 { \ FreeXStatusText: \ 00000000 10402DE9 PUSH {R4,LR} 1045 mfree(XStatusText); \ 00000004 ........ LDR R4,??DataTable56 ;; XStatusText \ 00000008 000094E5 LDR R0,[R4, #+0] \ 0000000C 150000EF SWI +21 1046 XStatusText=NULL; \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 000084E5 STR R0,[R4, #+0] 1047 } \ 00000018 1080BDE8 POP {R4,PC} ;; return 1048 \ In segment CODE, align 4, keep-with-next 1049 char *GetXStatusStr(int n, int *len) 1050 { 1051 int l=0; 1052 int c; 1053 char *p=XStatusText; \ GetXStatusStr: \ 00000000 ........ LDR R2,??DataTable56 ;; XStatusText \ 00000004 0030A0E3 MOV R3,#+0 \ 00000008 002092E5 LDR R2,[R2, #+0] 1054 char *pp; 1055 if (len) *len=0; \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 00C0A013 MOVNE R12,#+0 \ 00000014 00C08115 STRNE R12,[R1, #+0] 1056 if (!p) return p; \ 00000018 000052E3 CMP R2,#+0 \ 0000001C 0700001A BNE ??GetXStatusStr_0 \ ??GetXStatusStr_1: \ 00000020 0000A0E3 MOV R0,#+0 \ 00000024 1EFF2FE1 BX LR 1057 while(n) 1058 { 1059 while((c=*p++)>=32); \ ??GetXStatusStr_2: \ 00000028 ........ LDRB R12,[R2], #+1 \ 0000002C 20005CE3 CMP R12,#+32 \ 00000030 FCFFFFAA BGE ??GetXStatusStr_2 1060 if (!c) return NULL; \ 00000034 00005CE3 CMP R12,#+0 \ 00000038 F8FFFF0A BEQ ??GetXStatusStr_1 1061 n--; \ 0000003C 010040E2 SUB R0,R0,#+1 1062 } \ ??GetXStatusStr_0: \ 00000040 000050E3 CMP R0,#+0 \ 00000044 F7FFFF1A BNE ??GetXStatusStr_2 1063 pp=p; \ 00000048 0200A0E1 MOV R0,R2 \ 0000004C 000000EA B ??GetXStatusStr_3 1064 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 1065 if (len) *len=l; \ 00000060 000051E3 CMP R1,#+0 \ 00000064 00308115 STRNE R3,[R1, #+0] 1066 return p; \ 00000068 0200A0E1 MOV R0,R2 \ 0000006C 1EFF2FE1 BX LR ;; return 1067 } \ In segment CODE, align 4, keep-with-next \ ??DataTable2: \ 00000000 ........ DC32 MMCursorBGClr \ In segment CODE, align 4, keep-with-next \ ??DataTable3: \ 00000000 ........ DC32 MMCursorClr \ In segment CODE, align 4, keep-with-next \ ??DataTable4: \ 00000000 ........ DC32 MMFontClr \ 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 HeaderY \ In segment CODE, align 4, keep-with-next \ ??DataTable14: \ 00000000 ........ DC32 StatusChangeScreen \ In segment CODE, align 4, keep-with-next \ ??DataTable15: \ 00000000 ........ DC32 MMFont \ In segment CODE, align 4, keep-with-next \ ??DataTable17: \ 00000000 ........ DC32 StatusChangeScreen + 8 \ In segment CODE, align 4, keep-with-next \ ??DataTable18: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable19: \ 00000000 ........ DC32 CurrentStatus \ In segment CODE, align 4, keep-with-next \ ??DataTable21: \ 00000000 ........ DC32 stmenu \ In segment CODE, align 4, keep-with-next \ ??DataTable22: \ 00000000 ........ DC32 XStatusText \ In segment CODE, align 4, keep-with-next \ ??DataTable28: \ 00000000 ........ DC32 MMFont \ In segment CODE, align 4, keep-with-next \ ??DataTable29: \ 00000000 ........ DC32 MMCursorBGClr \ In segment CODE, align 4, keep-with-next \ ??DataTable30: \ 00000000 ........ DC32 MMCursorClr \ In segment CODE, align 4, keep-with-next \ ??DataTable32: \ 00000000 ........ DC32 MMFontClr \ In segment CODE, align 4, keep-with-next \ ??DataTable37: \ 00000000 ........ DC32 MMBackgrClr \ In segment CODE, align 4, keep-with-next \ ??DataTable39: \ 00000000 ........ DC32 MMBackgrBordClr \ In segment CODE, align 4, keep-with-next \ ??DataTable40: \ 00000000 ........ DC32 HeaderY \ In segment CODE, align 4, keep-with-next \ ??DataTable41: \ 00000000 ........ DC32 StatusChangeScreen \ In segment CODE, align 4, keep-with-next \ ??DataTable44: \ 00000000 ........ DC32 StatusChangeScreen + 8 \ In segment CODE, align 4, keep-with-next \ ??DataTable46: \ 00000000 ........ DC32 CurrentXStatus \ In segment CODE, align 4, keep-with-next \ ??DataTable47: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable48: \ 00000000 ........ DC32 xstmenu \ In segment CODE, align 4, keep-with-next \ ??DataTable53: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable54: \ 00000000 ........ DC32 XS_FILE_NAME \ In segment CODE, align 4, keep-with-next \ ??DataTable56: \ 00000000 ........ DC32 XStatusText \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000010 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000020 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000030 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000040 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000050 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000060 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000070 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00000078 01000000.... DC32 1, edit_xstatus_onkey, edit_xstatus_ghook, edit_xstatus_locret, 0 \ ............ \ ........0000 \ 0000 \ 0000008C ........ DC32 edit_x_skt \ 00000090 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000098 080000006400 DC32 8, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ `?`: \ 000000B0 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 000000B8 000000000000 DC32 0H, 0, 2147483647 \ 0000FFFFFF7F \ `?`: \ 000000C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000C8 23000000 DC32 35 \ `?`: \ 000000CC 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_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 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 53686F727420 DC8 "Short X:" \ 583A00 \ 00000009 000000 DC8 0, 0, 0 \ 0000000C 4C6172676520 DC8 "Large X:" \ 583A00 \ 00000015 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 53686F727420 DC8 "Short XS %d" \ 585320256400 \ 0000000C 4C6172676520 DC8 "Large XS %d" \ 585320256400 \ 00000018 C1E5E72078F1 DC8 "\301\345\347 x\361\362\340\362\363\361\340" \ F2E0F2F3F1E0 \ 00 \ 00000025 000000 DC8 0, 0, 0 Maximum stack usage in bytes: Function CSTACK -------- ------ CreateSCMenu 8 CreateXSMenu 12 DrawXScrollBar 56 EditXStatus 88 FreeXSTList 8 FreeXStatusText 8 GetXSTByItem 0 GetXStatusStr 0 InitXText 32 LoadXStatusText 324 ReplaceStr 36 SC_DrawList 72 SC_MoveDown 0 SC_MoveUp 0 SC_OnKey 20 SC_OnRedraw 24 SC_method8 0 SC_method9 0 SC_onClose 8 SC_onCreate 16 SC_onFocus 4 SC_onUnfocus 0 SaveXStatusText 272 XS_DrawList 68 XS_MoveDown 0 XS_MoveUp 0 XS_OnKey 20 XS_OnRedraw 24 XS_method8 0 XS_method9 0 XS_onClose 8 XS_onCreate 16 XS_onFocus 4 XS_onUnfocus 0 edit_xstatus_ghook 4 edit_xstatus_locret 0 edit_xstatus_onkey 224 Segment part sizes: Function/Label Bytes -------------- ----- XS_FILE_NAME 16 XStatusText 4 stmenu 168 SC_DrawList 808 SC_MoveUp 80 SC_MoveDown 84 StatusChangeScreen 12 SC_OnRedraw 120 SC_onCreate 284 SC_onClose 44 SC_onFocus 20 SC_onUnfocus 20 SC_OnKey 512 SC_method8 8 SC_method9 8 gui_methods_SC 52 CreateSCMenu 172 edit_xstatus_locret 4 ReplaceStr 152 edit_xstatus_onkey 648 edit_xstatus_ghook 48 EditXStatus 832 DrawXScrollBar 168 xstmenu 208 edit_x_sk 24 edit_x_skt 8 sk 8 FreeXSTList 60 InitXText 308 GetXSTByItem 48 XS_DrawList 560 XS_MoveUp 144 XS_MoveDown 96 XS_OnRedraw 104 XS_onCreate 208 XS_onClose 48 XS_onFocus 20 XS_onUnfocus 20 XS_OnKey 212 XS_method8 8 XS_method9 8 gui_methods_XS 52 CreateXSMenu 88 LoadXStatusText 244 SaveXStatusText 132 FreeXStatusText 28 GetXStatusStr 112 ??DataTable2 4 ??DataTable3 4 ??DataTable4 4 ??DataTable9 4 ??DataTable11 4 ??DataTable12 4 ??DataTable14 4 ??DataTable15 4 ??DataTable17 4 ??DataTable18 4 ??DataTable19 4 ??DataTable21 4 ??DataTable22 4 ??DataTable28 4 ??DataTable29 4 ??DataTable30 4 ??DataTable32 4 ??DataTable37 4 ??DataTable39 4 ??DataTable40 4 ??DataTable41 4 ??DataTable44 4 ??DataTable46 4 ??DataTable47 4 ??DataTable48 4 ??DataTable53 4 ??DataTable54 4 ??DataTable56 4 ? 208 ? 24 ? 8 ? 8 ? 8 ? 1 ? 16 ? 24 ? 40 Others 340 6 888 bytes in segment CODE 209 bytes in segment DATA_C 248 bytes in segment DATA_I 248 bytes in segment DATA_ID 184 bytes in segment DATA_Z 24 bytes in segment INITTAB 6 572 bytes of CODE memory (+ 340 bytes shared) 457 bytes of CONST memory 432 bytes of DATA memory Errors: none Warnings: none