############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 11/May/2010 12:02:30 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = F:\SVN\cn\LaunchElf\elf\visual.c # # Command line = F:\SVN\cn\LaunchElf\elf\visual.c -lC # # F:\SVN\cn\LaunchElf\elf\Release\List\ -o # # F:\SVN\cn\LaunchElf\elf\Release\Obj\ -s9 --cpu_mode # # arm --endian little --cpu ARM926EJ-S --stack_align # # 4 --interwork -e --fpu None --dlib_config # # "F:\software\Embedded Workbench 4.0 # # Evaluation\ARM\LIB\dl5tpainl8n.h" -I # # "F:\software\Embedded Workbench 4.0 # # Evaluation\ARM\INC\" --inline_threshold=2 # # List file = F:\SVN\cn\LaunchElf\elf\Release\List\visual.lst # # Object file = F:\SVN\cn\LaunchElf\elf\Release\Obj\visual.r79 # # # # # ############################################################################## F:\SVN\cn\LaunchElf\elf\visual.c 1 #include "..\..\inc\swilib.h" 2 3 /* 4 (c) Kren, Rst7 5 */ 6 7 char colors[4][4]={{0xFF,0,0,0x64},{0,0xFF,0,0x64},{0,0,0xFF,0x64},{0xC6,0xAA,0xAF,0x32}}; 8 char black[4]={0x00,0x00,0x00,0x64}; 9 char white[4]={0xFF,0xFF,0xFF,0x64}; 10 char transparent[4]={0x00,0x00,0x00,0x00}; 11 extern long strtol (const char *nptr,char **endptr,int base); 12 extern unsigned long strtoul (const char *nptr,char **endptr,int base); 13 #define MIN(a,b) (ab)?a:b 15 16 #pragma inline 17 void patch_rect(RECT*rc,int x,int y, int x2, int y2) 18 { 19 rc->x=x; 20 rc->y=y; 21 rc->x2=x2; 22 rc->y2=y2; 23 } 24 25 //=============================================================================================== 26 // ELKA Compatibility 27 #pragma inline 28 void patch_header(HEADER_DESC* head) 29 { 30 head->rc.x=0; 31 head->rc.y=YDISP; 32 head->rc.x2=ScreenW()-1; 33 head->rc.y2=HeaderH()+YDISP; 34 } 35 #pragma inline 36 void patch_input(INPUTDIA_DESC* inp) 37 { 38 inp->rc.x=0; 39 inp->rc.y=HeaderH()+1+YDISP; 40 inp->rc.x2=ScreenW()-1; 41 inp->rc.y2=ScreenH()-SoftkeyH()-1; 42 } 43 //=============================================================================================== 44 // YDISP нам больше не нужен так как иконбар отключим 45 #ifdef ELKA 46 #undef YDISP 47 #define YDISP 0 48 #endif 49 50 typedef struct 51 { 52 GUI gui; 53 WSHDR *ws1; 54 int is_rect_needed; 55 int is_first_set; 56 int x_pos; 57 int y_pos; 58 int x2_pos; 59 int y2_pos; 60 union 61 { 62 unsigned int *xy; 63 RECT *rc; 64 }; 65 int cstep; 66 }RECT_GUI; 67 68 typedef struct 69 { 70 GUI gui; 71 WSHDR*ws1; 72 int r; 73 int g; 74 int b; 75 int a; 76 char *color; 77 int current_column; 78 char testcolor[4]; 79 int cstep; 80 }MAIN_GUI_2; 81 \ In segment DATA_C, align 4, align-sorted 82 const char Pointer[5]={0x27,0x27,0xFF,0x27,0x27}; \ Pointer: \ 00000000 2727FF272700 DC8 39, 39, 255, 39, 39, 0, 0, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25752C25752C DC8 "%u,%u,%u,%u" \ 25752C257500 \ 0000000C 25752C257500 DC8 "%u,%u" \ 00000012 0000 DC8 0, 0 83 const IMGHDR imgPointer = {5,5,0x1,(char *)Pointer}; \ imgPointer: \ 00000014 0505 DC8 5, 5 \ 00000016 0100 DC16 1 \ 00000018 ........ DC32 Pointer 84 \ In segment CODE, align 4, keep-with-next 85 void DrwImg(IMGHDR *img, int x, int y, char *pen, char *brush) 86 { \ DrwImg: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 \ 00000008 3C609DE5 LDR R6,[SP, #+60] \ 0000000C 0040A0E1 MOV R4,R0 87 RECT rc; 88 DRWOBJ drwobj; 89 StoreXYWHtoRECT(&rc,x,y,img->w,img->h); \ 00000010 0100D4E5 LDRB R0,[R4, #+1] \ 00000014 0350A0E1 MOV R5,R3 \ 00000018 01002DE9 PUSH {R0} \ 0000001C 0030D4E5 LDRB R3,[R4, #+0] \ 00000020 04008DE2 ADD R0,SP,#+4 \ 00000024 330100EF SWI +307 90 SetPropTo_Obj5(&drwobj,&rc,0,img); \ 00000028 0430A0E1 MOV R3,R4 \ 0000002C 0020A0E3 MOV R2,#+0 \ 00000030 04108DE2 ADD R1,SP,#+4 \ 00000034 0C008DE2 ADD R0,SP,#+12 \ 00000038 510100EF SWI +337 91 SetColor(&drwobj,pen,brush); \ 0000003C 0620A0E1 MOV R2,R6 \ 00000040 0510A0E1 MOV R1,R5 \ 00000044 0C008DE2 ADD R0,SP,#+12 \ 00000048 4B0100EF SWI +331 92 DrawObject(&drwobj); \ 0000004C 0C008DE2 ADD R0,SP,#+12 \ 00000050 2A0100EF SWI +298 93 } \ 00000054 30D08DE2 ADD SP,SP,#+48 \ 00000058 7080BDE8 POP {R4-R6,PC} ;; return \ In segment DATA_I, align 4, align-sorted 94 extern const char ms_pic[]; 95 extern const char icon_ms[]; 96 char* databuf; 97 int draw_pic=0; 98 IMGHDR ms_img={0,0,8,0}; \ ms_img: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ databuf: \ 00000008 DS8 4 \ 0000000C REQUIRE `?` \ draw_pic: \ 0000000C DS8 4 \ 00000010 REQUIRE `?` \ colors: \ 00000010 DS8 16 \ 00000020 REQUIRE `?` \ black: \ 00000020 DS8 4 \ 00000024 REQUIRE `?` \ white: \ 00000024 DS8 4 \ 00000028 REQUIRE `?` \ transparent: \ 00000028 DS8 4 \ 0000002C REQUIRE `?` 99 \ In segment CODE, align 4, keep-with-next 100 void method0_rect(RECT_GUI *data) 101 { \ method0_rect: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 102 int scr_w=ScreenW(); 103 int scr_h=ScreenH(); 104 if (draw_pic){ \ 00000004 ........ LDR R6,??DataTable1 ;; ms_img \ 00000008 90829FE5 LDR R8,??method0_rect_0 ;; `?` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 888100EF SWI +33160 \ 00000014 0090A0E1 MOV R9,R0 \ 00000018 898100EF SWI +33161 \ 0000001C 0050A0E1 MOV R5,R0 \ 00000020 0C0096E5 LDR R0,[R6, #+12] \ 00000024 000050E3 CMP R0,#+0 \ 00000028 0F00000A BEQ ??method0_rect_1 105 DrwImg((IMGHDR *)&ms_img,0,0,GetPaletteAdrByColorIndex(1),GetPaletteAdrByColorIndex(0)); \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 2E0100EF SWI +302 \ 00000034 0070A0E1 MOV R7,R0 \ 00000038 0100A0E3 MOV R0,#+1 \ 0000003C 2E0100EF SWI +302 \ 00000040 80002DE9 PUSH {R7} \ 00000044 0030A0E1 MOV R3,R0 \ 00000048 0020A0E3 MOV R2,#+0 \ 0000004C 0010A0E3 MOV R1,#+0 \ 00000050 0600A0E1 MOV R0,R6 \ 00000054 ........ BL DrwImg 106 DrawImg(data->x_pos,data->y_pos,(int)icon_ms); \ 00000058 44229FE5 LDR R2,??method0_rect_0+0x4 ;; icon_ms \ 0000005C 401094E5 LDR R1,[R4, #+64] \ 00000060 3C0094E5 LDR R0,[R4, #+60] \ 00000064 230000EF SWI +35 \ 00000068 360000EA B ??method0_rect_2 107 } 108 else 109 { 110 DrawRectangle(0,YDISP,scr_w-1,scr_h-1,0,white,white); \ ??method0_rect_1: \ 0000006C 240086E2 ADD R0,R6,#+36 \ 00000070 01002DE9 PUSH {R0} \ 00000074 01002DE9 PUSH {R0} \ 00000078 01A049E2 SUB R10,R9,#+1 \ 0000007C 017045E2 SUB R7,R5,#+1 \ 00000080 0730A0E1 MOV R3,R7 \ 00000084 0000A0E3 MOV R0,#+0 \ 00000088 01002DE9 PUSH {R0} \ 0000008C 0A20A0E1 MOV R2,R10 \ 00000090 0010A0E3 MOV R1,#+0 111 // Нарисуем сетку 112 for (int y_0=YDISP; y_0< scr_h;y_0+=10) \ 00000094 00B0A0E3 MOV R11,#+0 \ 00000098 B40100EF SWI +436 \ 0000009C 010055E3 CMP R5,#+1 \ 000000A0 0CD08DE2 ADD SP,SP,#+12 \ 000000A4 0B0000AA BGE ??method0_rect_3 \ 000000A8 0C0000EA B ??method0_rect_4 113 { 114 DrawLine(0,y_0,scr_w-1,y_0,1,colors[3]); \ ??method0_rect_5: \ 000000AC 1C0086E2 ADD R0,R6,#+28 \ 000000B0 01002DE9 PUSH {R0} \ 000000B4 0B30A0E1 MOV R3,R11 \ 000000B8 0A20A0E1 MOV R2,R10 \ 000000BC 0B10A0E1 MOV R1,R11 \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 01002DE9 PUSH {R0} 115 } \ 000000C8 0AB08BE2 ADD R11,R11,#+10 \ 000000CC 0000A0E3 MOV R0,#+0 \ 000000D0 B30100EF SWI +435 \ 000000D4 08D08DE2 ADD SP,SP,#+8 \ ??method0_rect_3: \ 000000D8 05005BE1 CMP R11,R5 \ 000000DC F2FFFFBA BLT ??method0_rect_5 116 for (int x_0=0; x_0x_pos-2,data->y_pos-2,black,transparent); \ ??method0_rect_7: \ 00000124 280086E2 ADD R0,R6,#+40 \ 00000128 01002DE9 PUSH {R0} \ 0000012C 400094E5 LDR R0,[R4, #+64] \ 00000130 203086E2 ADD R3,R6,#+32 \ 00000134 022040E2 SUB R2,R0,#+2 \ 00000138 3C0094E5 LDR R0,[R4, #+60] \ 0000013C 021040E2 SUB R1,R0,#+2 \ 00000140 140088E2 ADD R0,R8,#+20 \ 00000144 ........ BL DrwImg \ ??method0_rect_2: \ 00000148 04D08DE2 ADD SP,SP,#+4 122 } 123 124 if (data->is_rect_needed) \ 0000014C 340094E5 LDR R0,[R4, #+52] \ 00000150 049049E2 SUB R9,R9,#+4 \ 00000154 017045E2 SUB R7,R5,#+1 \ 00000158 000050E3 CMP R0,#+0 \ 0000015C 3400000A BEQ ??method0_rect_9 125 { 126 DrawRoundedFrame(data->rc->x,data->rc->y,data->rc->x2,data->rc->y2, 127 0,0,0,colors[3],transparent); // Предыдущий рект \ 00000160 4C0094E5 LDR R0,[R4, #+76] \ 00000164 281086E2 ADD R1,R6,#+40 \ 00000168 02002DE9 PUSH {R1} \ 0000016C 1C1086E2 ADD R1,R6,#+28 \ 00000170 02002DE9 PUSH {R1} \ 00000174 0010A0E3 MOV R1,#+0 \ 00000178 02002DE9 PUSH {R1} \ 0000017C 02002DE9 PUSH {R1} \ 00000180 02002DE9 PUSH {R1} \ 00000184 F630D0E1 LDRSH R3,[R0, #+6] \ 00000188 F420D0E1 LDRSH R2,[R0, #+4] \ 0000018C F210D0E1 LDRSH R1,[R0, #+2] \ 00000190 F000D0E1 LDRSH R0,[R0, #+0] \ 00000194 500100EF SWI +336 128 if (data->is_first_set) \ 00000198 380094E5 LDR R0,[R4, #+56] \ 0000019C 14D08DE2 ADD SP,SP,#+20 \ 000001A0 000050E3 CMP R0,#+0 \ 000001A4 1700000A BEQ ??method0_rect_10 129 { 130 DrawRoundedFrame(data->x2_pos,data->y2_pos,data->x_pos,data->y_pos, 131 0,0,0,black,transparent); \ 000001A8 280086E2 ADD R0,R6,#+40 \ 000001AC 01002DE9 PUSH {R0} \ 000001B0 200086E2 ADD R0,R6,#+32 \ 000001B4 01002DE9 PUSH {R0} \ 000001B8 0000A0E3 MOV R0,#+0 \ 000001BC 01002DE9 PUSH {R0} \ 000001C0 01002DE9 PUSH {R0} \ 000001C4 01002DE9 PUSH {R0} \ 000001C8 403094E5 LDR R3,[R4, #+64] \ 000001CC 3C2094E5 LDR R2,[R4, #+60] \ 000001D0 481094E5 LDR R1,[R4, #+72] \ 000001D4 440094E5 LDR R0,[R4, #+68] \ 000001D8 500100EF SWI +336 132 wsprintf(data->ws1,"%u,%u,%u,%u",data->x2_pos,data->y2_pos,data->x_pos,data->y_pos); \ 000001DC 400094E5 LDR R0,[R4, #+64] \ 000001E0 0810A0E1 MOV R1,R8 \ 000001E4 01002DE9 PUSH {R0} \ 000001E8 3C0094E5 LDR R0,[R4, #+60] \ 000001EC 01002DE9 PUSH {R0} \ 000001F0 483094E5 LDR R3,[R4, #+72] \ 000001F4 442094E5 LDR R2,[R4, #+68] \ 000001F8 300094E5 LDR R0,[R4, #+48] \ 000001FC 240100EF SWI +292 \ 00000200 1CD08DE2 ADD SP,SP,#+28 \ 00000204 120000EA B ??method0_rect_11 133 } 134 else 135 { 136 wsprintf(data->ws1,"%u,%u,%u,%u",data->x_pos,data->y_pos,data->x2_pos,data->y2_pos); \ ??method0_rect_10: \ 00000208 480094E5 LDR R0,[R4, #+72] \ 0000020C 0810A0E1 MOV R1,R8 \ 00000210 01002DE9 PUSH {R0} \ 00000214 440094E5 LDR R0,[R4, #+68] \ 00000218 01002DE9 PUSH {R0} \ 0000021C 403094E5 LDR R3,[R4, #+64] \ 00000220 3C2094E5 LDR R2,[R4, #+60] \ 00000224 300094E5 LDR R0,[R4, #+48] \ 00000228 240100EF SWI +292 \ 0000022C 08D08DE2 ADD SP,SP,#+8 137 } 138 DrawString(data->ws1,3,scr_h-GetFontYSIZE(FONT_SMALL)-1,scr_w-4,scr_h-1,FONT_SMALL,1,black,transparent); \ ??method0_rect_12: \ 00000230 070000EA B ??method0_rect_11 139 } 140 else if (!draw_pic) \ ??method0_rect_9: \ 00000234 0C0096E5 LDR R0,[R6, #+12] \ 00000238 000050E3 CMP R0,#+0 \ 0000023C F08FBD18 POPNE {R4-R11,PC} 141 { 142 wsprintf(data->ws1,"%u,%u",data->x_pos,data->y_pos); \ 00000240 403094E5 LDR R3,[R4, #+64] \ 00000244 3C2094E5 LDR R2,[R4, #+60] \ 00000248 300094E5 LDR R0,[R4, #+48] \ 0000024C 0C1088E2 ADD R1,R8,#+12 \ 00000250 240100EF SWI +292 143 DrawString(data->ws1,3,scr_h-GetFontYSIZE(FONT_SMALL)-1,scr_w-4,scr_h-1,FONT_SMALL,1,black,transparent); \ ??method0_rect_11: \ 00000254 0700A0E3 MOV R0,#+7 \ 00000258 C50100EF SWI +453 \ 0000025C 281086E2 ADD R1,R6,#+40 \ 00000260 02002DE9 PUSH {R1} \ 00000264 0930A0E1 MOV R3,R9 \ 00000268 000045E0 SUB R0,R5,R0 \ 0000026C 012040E2 SUB R2,R0,#+1 \ 00000270 201086E2 ADD R1,R6,#+32 \ 00000274 02002DE9 PUSH {R1} \ 00000278 0110A0E3 MOV R1,#+1 \ 0000027C 02002DE9 PUSH {R1} \ 00000280 0710A0E3 MOV R1,#+7 \ 00000284 02002DE9 PUSH {R1} \ 00000288 80002DE9 PUSH {R7} \ 0000028C 300094E5 LDR R0,[R4, #+48] \ 00000290 0310A0E3 MOV R1,#+3 \ 00000294 4C0100EF SWI +332 \ 00000298 14D08DE2 ADD SP,SP,#+20 144 } 145 } \ 0000029C F08FBDE8 POP {R4-R11,PC} ;; return \ ??method0_rect_0: \ 000002A0 ........ DC32 `?` \ 000002A4 ........ DC32 icon_ms 146 147 \ In segment CODE, align 4, keep-with-next 148 void method1_rect(RECT_GUI *data, void *(*malloc_adr)(int)) 149 { \ method1_rect: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 150 FSTATS fs; 151 unsigned int ul; 152 if (!GetFileStats(ms_pic,&fs,&ul)){ \ 00000004 ........ LDR R5,??DataTable1 ;; ms_img \ 00000008 D0709FE5 LDR R7,??method1_rect_0 ;; ms_pic \ 0000000C 34D04DE2 SUB SP,SP,#+52 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0060A0E3 MOV R6,#+0 \ 00000018 08208DE2 ADD R2,SP,#+8 \ 0000001C 0C108DE2 ADD R1,SP,#+12 \ 00000020 0700A0E1 MOV R0,R7 \ 00000024 840000EF SWI +132 \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 2300001A BNE ??method1_rect_1 153 volatile int hFile; 154 unsigned int io_error = 0; \ 00000030 00608DE5 STR R6,[SP, #+0] 155 if ((hFile=fopen(ms_pic,A_ReadOnly+A_BIN,P_READ,&io_error))!=-1) \ 00000034 0D30A0E1 MOV R3,SP \ 00000038 8020A0E3 MOV R2,#+128 \ 0000003C 801CA0E3 MOV R1,#+32768 \ 00000040 0700A0E1 MOV R0,R7 \ 00000044 0A0000EF SWI +10 \ 00000048 04008DE5 STR R0,[SP, #+4] \ 0000004C 010070E3 CMN R0,#+1 \ 00000050 1B00000A BEQ ??method1_rect_2 156 { 157 int len=fs.size; \ 00000054 10609DE5 LDR R6,[SP, #+16] 158 if (len>0){ \ 00000058 010056E3 CMP R6,#+1 \ 0000005C 110000BA BLT ??method1_rect_3 159 databuf=malloc(len+1); \ 00000060 010086E2 ADD R0,R6,#+1 \ 00000064 140000EF SWI +20 \ 00000068 080085E5 STR R0,[R5, #+8] 160 fread(hFile,databuf,len,&io_error); \ 0000006C 0010A0E1 MOV R1,R0 \ 00000070 04009DE5 LDR R0,[SP, #+4] \ 00000074 0D30A0E1 MOV R3,SP \ 00000078 0620A0E1 MOV R2,R6 \ 0000007C 0B0000EF SWI +11 161 ms_img.w=ScreenW(); \ 00000080 888100EF SWI +33160 \ 00000084 0000C5E5 STRB R0,[R5, #+0] 162 ms_img.h=ScreenH(); \ 00000088 898100EF SWI +33161 \ 0000008C 0100C5E5 STRB R0,[R5, #+1] 163 ms_img.bpnum=8; \ 00000090 0800A0E3 MOV R0,#+8 \ 00000094 B200C5E1 STRH R0,[R5, #+2] 164 ms_img.bitmap=databuf; \ 00000098 080095E5 LDR R0,[R5, #+8] \ 0000009C 040085E5 STR R0,[R5, #+4] 165 draw_pic=1; \ 000000A0 0100A0E3 MOV R0,#+1 \ 000000A4 000000EA B ??method1_rect_4 166 } 167 else 168 draw_pic=0; \ ??method1_rect_3: \ 000000A8 0000A0E3 MOV R0,#+0 \ ??method1_rect_4: \ 000000AC 0C0085E5 STR R0,[R5, #+12] 169 fclose(hFile,&io_error); \ 000000B0 04009DE5 LDR R0,[SP, #+4] \ 000000B4 0D10A0E1 MOV R1,SP \ 000000B8 0D0000EF SWI +13 \ 000000BC 000000EA B ??method1_rect_2 170 } 171 } 172 else 173 draw_pic=0; \ ??method1_rect_1: \ 000000C0 0C6085E5 STR R6,[R5, #+12] 174 data->ws1=AllocWS(256); \ ??method1_rect_2: \ 000000C4 400FA0E3 MOV R0,#+256 \ 000000C8 250100EF SWI +293 \ 000000CC 300084E5 STR R0,[R4, #+48] 175 data->gui.state=1; \ 000000D0 0100A0E3 MOV R0,#+1 \ 000000D4 0C00C4E5 STRB R0,[R4, #+12] 176 } \ 000000D8 34D08DE2 ADD SP,SP,#+52 \ 000000DC F080BDE8 POP {R4-R7,PC} ;; return \ ??method1_rect_0: \ 000000E0 ........ DC32 ms_pic 177 \ In segment CODE, align 4, keep-with-next 178 void method2_rect(RECT_GUI *data, void (*mfree_adr)(void *)) 179 { \ method2_rect: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 180 if (draw_pic) \ 00000008 ........ LDR R0,??DataTable3 ;; ms_img \ 0000000C 0C1090E5 LDR R1,[R0, #+12] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 0100000A BEQ ??method2_rect_0 181 mfree(databuf); \ 00000018 080090E5 LDR R0,[R0, #+8] \ 0000001C 150000EF SWI +21 182 FreeWS(data->ws1); \ ??method2_rect_0: \ 00000020 300094E5 LDR R0,[R4, #+48] \ 00000024 290100EF SWI +297 183 data->gui.state=0; \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 0C00C4E5 STRB R0,[R4, #+12] 184 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 185 \ In segment CODE, align 4, keep-with-next 186 void method3_rect(RECT_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) 187 { 188 #ifdef ELKA 189 DisableIconBar(1); 190 #endif 191 data->gui.state=2; \ method3_rect: \ 00000000 0210A0E3 MOV R1,#+2 \ 00000004 0C10C0E5 STRB R1,[R0, #+12] 192 } \ 00000008 1EFF2FE1 BX LR ;; return 193 \ In segment CODE, align 4, keep-with-next 194 void method4_rect(RECT_GUI *data, void (*mfree_adr)(void *)) 195 { 196 if (data->gui.state!=2) return; \ method4_rect: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 197 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 198 } \ 00000010 1EFF2FE1 BX LR ;; return 199 /* 200 #define MIN_STEP 1 201 #define MAX_STEP 8 202 */ 203 204 \ In segment CODE, align 4, keep-with-next 205 int method5_rect(RECT_GUI *data, GUI_MSG *msg) 206 { \ method5_rect: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0150A0E1 MOV R5,R1 207 if ((msg->gbsmsg->msg==KEY_DOWN)||(msg->gbsmsg->msg==LONG_PRESS)) \ 00000008 041095E5 LDR R1,[R5, #+4] \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 F200D1E1 LDRSH R0,[R1, #+2] \ 00000014 0160A0E3 MOV R6,#+1 \ 00000018 652F86E3 ORR R2,R6,#0x194 \ 0000001C 023042E2 SUB R3,R2,#+2 \ 00000020 030050E1 CMP R0,R3 \ 00000024 02005011 CMPNE R0,R2 \ 00000028 8F00001A BNE ??method5_rect_1 208 { 209 if (msg->gbsmsg->msg==KEY_DOWN) \ 0000002C F2C0D1E1 LDRSH R12,[R1, #+2] \ 00000030 3C0094E5 LDR R0,[R4, #+60] \ 00000034 0070A0E3 MOV R7,#+0 \ 00000038 03005CE1 CMP R12,R3 \ 0000003C 0D00001A BNE ??method5_rect_2 210 { 211 switch(msg->gbsmsg->submess) \ 00000040 04E091E5 LDR LR,[R1, #+4] \ 00000044 383094E5 LDR R3,[R4, #+56] \ 00000048 34C094E5 LDR R12,[R4, #+52] \ 0000004C 04E05EE2 SUBS LR,LR,#+4 \ 00000050 0400000A BEQ ??method5_rect_3 \ 00000054 08E05EE2 SUBS LR,LR,#+8 \ 00000058 4500000A BEQ ??method5_rect_4 \ 0000005C 0EE05EE2 SUBS LR,LR,#+14 \ 00000060 1F00000A BEQ ??method5_rect_5 \ 00000064 030000EA B ??method5_rect_2 212 { 213 case RIGHT_SOFT: 214 if (data->is_rect_needed) \ ??method5_rect_3: \ 00000068 00005CE3 CMP R12,#+0 215 { 216 if (data->is_first_set) \ 0000006C 00005313 CMPNE R3,#+0 \ 00000070 3F00000A BEQ ??method5_rect_4 217 { 218 data->is_first_set=0; \ 00000074 387084E5 STR R7,[R4, #+56] 219 break; 220 } 221 } 222 223 case RED_BUTTON: 224 return (1); 225 226 case ENTER_BUTTON: 227 if (data->is_rect_needed) 228 { 229 if (!data->is_first_set) 230 { 231 data->x2_pos=data->x_pos; 232 data->y2_pos=data->y_pos; 233 data->is_first_set=1; 234 } 235 else 236 { 237 data->rc->x=MIN(data->x2_pos,data->x_pos); 238 data->rc->y=MIN(data->y2_pos,data->y_pos); 239 data->rc->x2=MAX(data->x2_pos,data->x_pos); 240 data->rc->y2=MAX(data->y2_pos,data->y_pos); 241 return (1); 242 } 243 } 244 else 245 { 246 data->xy[0]=data->x_pos; 247 data->xy[1]=data->y_pos; 248 return (1); 249 } 250 } 251 } 252 if (msg->gbsmsg->msg==LONG_PRESS) \ ??method5_rect_2: \ 00000078 F230D1E1 LDRSH R3,[R1, #+2] \ 0000007C 020053E1 CMP R3,R2 253 #ifdef ELKA 254 data->cstep=9; 255 #else 256 data->cstep=5; \ 00000080 0520A003 MOVEQ R2,#+5 \ 00000084 50208405 STREQ R2,[R4, #+80] 257 #endif 258 259 switch(msg->gbsmsg->submess) \ 00000088 502094E5 LDR R2,[R4, #+80] \ 0000008C 403094E5 LDR R3,[R4, #+64] \ 00000090 041091E5 LDR R1,[R1, #+4] \ 00000094 023043E0 SUB R3,R3,R2 \ 00000098 020040E0 SUB R0,R0,R2 \ 0000009C 311041E2 SUB R1,R1,#+49 \ 000000A0 0D0051E3 CMP R1,#+13 \ 000000A4 7000008A BHI ??method5_rect_1 \ 000000A8 012F8FE2 ADR R2,??method5_rect_0 \ 000000AC 0120D2E7 LDRB R2,[R2, R1] \ 000000B0 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??method5_rect_0: \ 000000B4 03063141 DC8 +3,+6,+49,+65 \ 000000B8 6D465262 DC8 +109,+70,+82,+98 \ 000000BC 576D0662 DC8 +87,+109,+6,+98 \ 000000C0 41460000 DC8 +65,+70,+0,+0 260 { 261 case '1': 262 if ((data->x_pos-=data->cstep)<0) \ ??method5_rect_6: \ 000000C4 3C0084E5 STR R0,[R4, #+60] \ 000000C8 000050E3 CMP R0,#+0 263 data->x_pos=0; \ 000000CC 3C708445 STRMI R7,[R4, #+60] 264 if ((data->y_pos-=data->cstep)y_pos=YDISP; \ 000000DC 407084E5 STR R7,[R4, #+64] \ 000000E0 610000EA B ??method5_rect_1 \ ??method5_rect_5: \ 000000E4 00005CE3 CMP R12,#+0 \ 000000E8 1C00000A BEQ ??method5_rect_9 \ 000000EC 000053E3 CMP R3,#+0 \ 000000F0 0400001A BNE ??method5_rect_10 \ 000000F4 440084E5 STR R0,[R4, #+68] \ 000000F8 403094E5 LDR R3,[R4, #+64] \ 000000FC 483084E5 STR R3,[R4, #+72] \ 00000100 386084E5 STR R6,[R4, #+56] \ 00000104 DBFFFFEA B ??method5_rect_2 \ ??method5_rect_10: \ 00000108 441094E5 LDR R1,[R4, #+68] \ 0000010C 4C3094E5 LDR R3,[R4, #+76] \ 00000110 000051E1 CMP R1,R0 \ 00000114 0120A0B1 MOVLT R2,R1 \ 00000118 0020A0A1 MOVGE R2,R0 \ 0000011C B020C3E1 STRH R2,[R3, #+0] \ 00000120 403094E5 LDR R3,[R4, #+64] \ 00000124 482094E5 LDR R2,[R4, #+72] \ 00000128 4C6094E5 LDR R6,[R4, #+76] \ 0000012C 030052E1 CMP R2,R3 \ 00000130 0250A0B1 MOVLT R5,R2 \ 00000134 0350A0A1 MOVGE R5,R3 \ 00000138 B250C6E1 STRH R5,[R6, #+2] \ 0000013C 010050E1 CMP R0,R1 \ 00000140 0100A0B1 MOVLT R0,R1 \ 00000144 4C1094E5 LDR R1,[R4, #+76] \ 00000148 020053E1 CMP R3,R2 \ 0000014C B400C1E1 STRH R0,[R1, #+4] \ 00000150 4C0094E5 LDR R0,[R4, #+76] \ 00000154 0230A0B1 MOVLT R3,R2 \ 00000158 B630C0E1 STRH R3,[R0, #+6] \ 0000015C 040000EA B ??method5_rect_4 \ ??method5_rect_9: \ 00000160 4C1094E5 LDR R1,[R4, #+76] \ 00000164 000081E5 STR R0,[R1, #+0] \ 00000168 4C0094E5 LDR R0,[R4, #+76] \ 0000016C 401094E5 LDR R1,[R4, #+64] \ 00000170 041080E5 STR R1,[R0, #+4] \ ??method5_rect_4: \ 00000174 0100A0E3 MOV R0,#+1 \ 00000178 F080BDE8 POP {R4-R7,PC} 266 break; 267 268 case '2': 269 case UP_BUTTON: 270 if ((data->y_pos-=data->cstep)y_pos=YDISP; 272 break; 273 274 case '3': 275 if ((data->x_pos+=data->cstep)>ScreenW()-1) \ ??method5_rect_11: \ 0000017C 888100EF SWI +33160 \ 00000180 3C1094E5 LDR R1,[R4, #+60] \ 00000184 502094E5 LDR R2,[R4, #+80] \ 00000188 010040E2 SUB R0,R0,#+1 \ 0000018C 011082E0 ADD R1,R2,R1 \ 00000190 3C1084E5 STR R1,[R4, #+60] \ 00000194 010050E1 CMP R0,R1 \ 00000198 020000AA BGE ??method5_rect_12 276 data->x_pos=ScreenW()-1; \ 0000019C 888100EF SWI +33160 \ 000001A0 010040E2 SUB R0,R0,#+1 \ 000001A4 3C0084E5 STR R0,[R4, #+60] 277 if ((data->y_pos-=data->cstep)y_pos=YDISP; 279 break; 280 281 case '4': 282 case LEFT_BUTTON: 283 if ((data->x_pos-=data->cstep)<0) \ ??method5_rect_13: \ 000001BC 3C0084E5 STR R0,[R4, #+60] \ 000001C0 000050E3 CMP R0,#+0 \ 000001C4 2800005A BPL ??method5_rect_1 284 data->x_pos=0; \ 000001C8 3C7084E5 STR R7,[R4, #+60] \ 000001CC 260000EA B ??method5_rect_1 285 break; 286 287 case '6': 288 case RIGHT_BUTTON: 289 if ((data->x_pos+=data->cstep)>ScreenW()-1) \ ??method5_rect_14: \ 000001D0 888100EF SWI +33160 \ 000001D4 3C1094E5 LDR R1,[R4, #+60] \ 000001D8 502094E5 LDR R2,[R4, #+80] \ 000001DC 010040E2 SUB R0,R0,#+1 \ 000001E0 011082E0 ADD R1,R2,R1 \ 000001E4 3C1084E5 STR R1,[R4, #+60] \ 000001E8 010050E1 CMP R0,R1 \ 000001EC 1E0000AA BGE ??method5_rect_1 290 data->x_pos=ScreenW()-1; \ 000001F0 888100EF SWI +33160 \ 000001F4 010040E2 SUB R0,R0,#+1 \ 000001F8 3C0084E5 STR R0,[R4, #+60] \ 000001FC 1A0000EA B ??method5_rect_1 291 break; 292 293 case '7': 294 if ((data->x_pos-=data->cstep)<0) \ ??method5_rect_15: \ 00000200 3C0084E5 STR R0,[R4, #+60] \ 00000204 000050E3 CMP R0,#+0 \ 00000208 0C00005A BPL ??method5_rect_16 295 data->x_pos=0; \ 0000020C 3C7084E5 STR R7,[R4, #+60] 296 if ((data->y_pos+=data->cstep)>ScreenH()-1) \ 00000210 0A0000EA B ??method5_rect_16 297 data->y_pos=ScreenH()-1; 298 break; 299 300 case '8': 301 case DOWN_BUTTON: 302 if ((data->y_pos+=data->cstep)>ScreenH()-1) 303 data->y_pos=ScreenH()-1; 304 break; 305 306 case '9': 307 if ((data->x_pos+=data->cstep)>ScreenW()-1) \ ??method5_rect_17: \ 00000214 888100EF SWI +33160 \ 00000218 3C1094E5 LDR R1,[R4, #+60] \ 0000021C 502094E5 LDR R2,[R4, #+80] \ 00000220 010040E2 SUB R0,R0,#+1 \ 00000224 011082E0 ADD R1,R2,R1 \ 00000228 3C1084E5 STR R1,[R4, #+60] \ 0000022C 010050E1 CMP R0,R1 \ 00000230 020000AA BGE ??method5_rect_16 308 data->x_pos=ScreenW()-1; \ 00000234 888100EF SWI +33160 \ 00000238 010040E2 SUB R0,R0,#+1 \ 0000023C 3C0084E5 STR R0,[R4, #+60] 309 if ((data->y_pos+=data->cstep)>ScreenH()-1) \ ??method5_rect_16: \ 00000240 898100EF SWI +33161 \ 00000244 401094E5 LDR R1,[R4, #+64] \ 00000248 502094E5 LDR R2,[R4, #+80] \ 0000024C 010040E2 SUB R0,R0,#+1 \ 00000250 011082E0 ADD R1,R2,R1 \ 00000254 401084E5 STR R1,[R4, #+64] \ 00000258 010050E1 CMP R0,R1 \ 0000025C 020000AA BGE ??method5_rect_1 310 data->y_pos=ScreenH()-1; \ 00000260 898100EF SWI +33161 \ 00000264 010040E2 SUB R0,R0,#+1 \ 00000268 400084E5 STR R0,[R4, #+64] 311 break; 312 } 313 } 314 if (msg->gbsmsg->msg==KEY_UP) \ ??method5_rect_1: \ 0000026C 040095E5 LDR R0,[R5, #+4] \ 00000270 F200D0E1 LDRSH R0,[R0, #+2] \ 00000274 650F50E3 CMP R0,#+404 315 data->cstep=1; \ 00000278 50608405 STREQ R6,[R4, #+80] 316 317 DirectRedrawGUI(); \ 0000027C 3F0100EF SWI +319 318 return(0); \ 00000280 0000A0E3 MOV R0,#+0 \ 00000284 F080BDE8 POP {R4-R7,PC} ;; return 319 } 320 \ In segment CODE, align 4, keep-with-next 321 void method7_rect(RECT_GUI *data, void (*mfree_adr)(void *)) 322 { 323 extern void kill_data(void *p, void (*func_p)(void *)); 324 kill_data(data,mfree_adr); \ method7_rect: \ 00000000 ........ _BF kill_data,??kill_data??rA ;; tailcall 325 } 326 \ In segment CODE, align 4, keep-with-next 327 int method8_rect(void){return(0);} \ method8_rect: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 328 \ In segment CODE, align 4, keep-with-next 329 int method9_rect(void){return(0);} \ method9_rect: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 330 \ In segment DATA_C, align 4, align-sorted 331 const void * const gui_methods_rect[11]={ 332 (void *)method0_rect, //Redraw 333 (void *)method1_rect, //Create 334 (void *)method2_rect, //Close 335 (void *)method3_rect, //Focus 336 (void *)method4_rect, //Unfocus 337 (void *)method5_rect, //OnKey 338 0, 339 (void *)method7_rect, //Destroy 340 (void *)method8_rect, 341 (void *)method9_rect, 342 0 343 }; 344 345 const RECT Canvas_1={0,0,0,0}; \ Canvas_1: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ gui_methods_rect: \ 00000008 ............ DC32 method0_rect, method1_rect, method2_rect, method3_rect \ ............ \ ........ \ 00000018 ............ DC32 method4_rect, method5_rect, 0H, method7_rect, method8_rect \ ....00000000 \ ............ \ .... \ 0000002C ........0000 DC32 method9_rect, 0H \ 0000 346 \ In segment CODE, align 4, keep-with-next 347 void EditCoordinates(void *rect_or_xy, int is_rect) 348 { \ EditCoordinates: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0050A0E1 MOV R5,R0 349 RECT_GUI *rect_gui=malloc(sizeof(RECT_GUI)); \ 00000008 5400A0E3 MOV R0,#+84 \ 0000000C 0160A0E1 MOV R6,R1 \ 00000010 140000EF SWI +20 \ 00000014 0040A0E1 MOV R4,R0 350 zeromem(rect_gui,sizeof(RECT_GUI)); \ 00000018 5410A0E3 MOV R1,#+84 \ 0000001C 1D0100EF SWI +285 351 352 rect_gui->is_rect_needed=is_rect; \ 00000020 346084E5 STR R6,[R4, #+52] 353 if (!is_rect) \ 00000024 000056E3 CMP R6,#+0 \ 00000028 0400001A BNE ??EditCoordinates_0 354 { 355 unsigned int *xy=rect_or_xy; 356 rect_gui->x_pos=xy[0]; \ 0000002C 000095E5 LDR R0,[R5, #+0] \ 00000030 3C0084E5 STR R0,[R4, #+60] 357 rect_gui->y_pos=xy[1]; \ 00000034 040095E5 LDR R0,[R5, #+4] \ 00000038 400084E5 STR R0,[R4, #+64] 358 rect_gui->xy=rect_or_xy; \ 0000003C 070000EA B ??EditCoordinates_1 359 } 360 else 361 { 362 RECT *rc=rect_or_xy; 363 rect_gui->x_pos=rc->x; \ ??EditCoordinates_0: \ 00000040 F000D5E1 LDRSH R0,[R5, #+0] \ 00000044 3C0084E5 STR R0,[R4, #+60] 364 rect_gui->y_pos=rc->y; \ 00000048 F200D5E1 LDRSH R0,[R5, #+2] \ 0000004C 400084E5 STR R0,[R4, #+64] 365 rect_gui->x2_pos=rc->x2; \ 00000050 F400D5E1 LDRSH R0,[R5, #+4] \ 00000054 440084E5 STR R0,[R4, #+68] 366 rect_gui->y2_pos=rc->y2; \ 00000058 F600D5E1 LDRSH R0,[R5, #+6] \ 0000005C 480084E5 STR R0,[R4, #+72] 367 rect_gui->rc=rect_or_xy; \ ??EditCoordinates_1: \ 00000060 4C5084E5 STR R5,[R4, #+76] 368 } 369 rect_gui->cstep=1; \ 00000064 0100A0E3 MOV R0,#+1 \ 00000068 500084E5 STR R0,[R4, #+80] 370 patch_rect((RECT*)&Canvas_1,0,YDISP,ScreenW()-1,ScreenH()-1); \ 0000006C 898100EF SWI +33161 \ 00000070 0050A0E1 MOV R5,R0 \ 00000074 888100EF SWI +33160 \ 00000078 3C209FE5 LDR R2,??EditCoordinates_2 ;; Canvas_1 \ 0000007C 011045E2 SUB R1,R5,#+1 \ 00000080 010040E2 SUB R0,R0,#+1 \ 00000084 0030A0E3 MOV R3,#+0 \ 00000088 003082E5 STR R3,[R2, #+0] \ 0000008C B400C2E1 STRH R0,[R2, #+4] \ 00000090 B610C2E1 STRH R1,[R2, #+6] 371 rect_gui->gui.canvas=(void *)(&Canvas_1); \ 00000094 002084E5 STR R2,[R4, #+0] 372 rect_gui->gui.flag30=2; \ 00000098 0200A0E3 MOV R0,#+2 \ 0000009C 2C0084E5 STR R0,[R4, #+44] 373 rect_gui->gui.methods=(void *)gui_methods_rect; \ 000000A0 080082E2 ADD R0,R2,#+8 \ 000000A4 040084E5 STR R0,[R4, #+4] 374 rect_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 000000A8 158000EF SWI +32789 \ 000000AC 1C0084E5 STR R0,[R4, #+28] 375 CreateGUI(rect_gui); \ 000000B0 0400A0E1 MOV R0,R4 \ 000000B4 370100EF SWI +311 376 } \ 000000B8 7080BDE8 POP {R4-R6,PC} ;; return \ ??EditCoordinates_2: \ 000000BC ........ DC32 Canvas_1 377 378 379 \ In segment CODE, align 4, keep-with-next 380 void method0_2(MAIN_GUI_2 *data) 381 { \ method0_2: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 382 int scr_w=ScreenW(); 383 int scr_h=ScreenH(); 384 DrawRectangle(0,YDISP,scr_w-1,scr_h-1,0,white,white); \ 00000004 ........ LDR R6,??DataTable3 ;; ms_img \ 00000008 10D04DE2 SUB SP,SP,#+16 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 888100EF SWI +33160 \ 00000014 08008DE5 STR R0,[SP, #+8] \ 00000018 898100EF SWI +33161 \ 0000001C 08109DE5 LDR R1,[SP, #+8] \ 00000020 0070A0E1 MOV R7,R0 \ 00000024 011041E2 SUB R1,R1,#+1 \ 00000028 0C108DE5 STR R1,[SP, #+12] \ 0000002C 240086E2 ADD R0,R6,#+36 \ 00000030 01002DE9 PUSH {R0} \ 00000034 01002DE9 PUSH {R0} \ 00000038 013047E2 SUB R3,R7,#+1 \ 0000003C 0120A0E1 MOV R2,R1 \ 00000040 0010A0E3 MOV R1,#+0 \ 00000044 0000A0E3 MOV R0,#+0 \ 00000048 01002DE9 PUSH {R0} \ 0000004C B40100EF SWI +436 385 386 int fsize=GetFontYSIZE(FONT_SMALL)+1; \ 00000050 0700A0E3 MOV R0,#+7 \ 00000054 C50100EF SWI +453 387 int column_height=scr_h-fsize-fsize-YDISP; 388 int column_width=scr_w/9; \ 00000058 14109DE5 LDR R1,[SP, #+20] \ 0000005C 38229FE5 LDR R2,??method0_2_0 ;; 0x38e38e39 \ 00000060 018080E2 ADD R8,R0,#+1 \ 00000064 9231C9E0 SMULL R3,R9,R2,R1 \ 00000068 887047E0 SUB R7,R7,R8, LSL #+1 \ 0000006C C990A0E1 ASR R9,R9,#+1 \ 00000070 A11F89E0 ADD R1,R9,R1, LSR #+31 \ 00000074 10108DE5 STR R1,[SP, #+16] 389 int start_column; 390 int y_line; 391 wsprintf(data->ws1,"%02X,%02X,%02X,%02X",data->r,data->g,data->b,data->a); \ 00000078 400094E5 LDR R0,[R4, #+64] \ 0000007C 1C129FE5 LDR R1,??method0_2_0+0x4 ;; `?` \ 00000080 01002DE9 PUSH {R0} \ 00000084 3C0094E5 LDR R0,[R4, #+60] \ 00000088 01002DE9 PUSH {R0} \ 0000008C 383094E5 LDR R3,[R4, #+56] \ 00000090 342094E5 LDR R2,[R4, #+52] \ 00000094 300094E5 LDR R0,[R4, #+48] \ 00000098 240100EF SWI +292 392 393 DrawString(data->ws1,1,YDISP+1,scr_w-20,YDISP+fsize,FONT_SMALL,1,black,transparent); \ 0000009C 280086E2 ADD R0,R6,#+40 \ 000000A0 01002DE9 PUSH {R0} \ 000000A4 0120A0E3 MOV R2,#+1 \ 000000A8 0210A0E1 MOV R1,R2 \ 000000AC 200086E2 ADD R0,R6,#+32 \ 000000B0 01002DE9 PUSH {R0} \ 000000B4 0100A0E3 MOV R0,#+1 \ 000000B8 01002DE9 PUSH {R0} \ 000000BC 0700A0E3 MOV R0,#+7 \ 000000C0 01002DE9 PUSH {R0} \ 000000C4 0800A0E1 MOV R0,R8 \ 000000C8 01002DE9 PUSH {R0} \ 000000CC 30009DE5 LDR R0,[SP, #+48] \ 000000D0 143040E2 SUB R3,R0,#+20 \ 000000D4 300094E5 LDR R0,[R4, #+48] \ 000000D8 4C0100EF SWI +332 \ 000000DC 28D08DE2 ADD SP,SP,#+40 394 fsize+=3; \ 000000E0 031088E2 ADD R1,R8,#+3 \ 000000E4 00108DE5 STR R1,[SP, #+0] 395 for (int i=0;i!=4;i++) \ 000000E8 0080A0E3 MOV R8,#+0 396 { 397 start_column=column_width+2*i*column_width; \ ??method0_2_1: \ 000000EC 04009DE5 LDR R0,[SP, #+4] \ 000000F0 0010A0E1 MOV R1,R0 \ 000000F4 910802E0 MUL R2,R1,R8 \ 000000F8 829080E0 ADD R9,R0,R2, LSL #+1 398 if (data->current_column==i) \ 000000FC 00009DE5 LDR R0,[SP, #+0] \ 00000100 00A087E0 ADD R10,R7,R0 \ 00000104 480094E5 LDR R0,[R4, #+72] \ 00000108 080050E1 CMP R0,R8 \ 0000010C 0D00001A BNE ??method0_2_2 399 DrawRectangle(start_column-2,YDISP+fsize-2,start_column+column_width+2,YDISP+fsize+column_height+2, 400 0,black,white); \ 00000110 240086E2 ADD R0,R6,#+36 \ 00000114 01002DE9 PUSH {R0} \ 00000118 02308AE2 ADD R3,R10,#+2 \ 0000011C 200086E2 ADD R0,R6,#+32 \ 00000120 01002DE9 PUSH {R0} \ 00000124 0000A0E3 MOV R0,#+0 \ 00000128 01002DE9 PUSH {R0} \ 0000012C 010089E0 ADD R0,R9,R1 \ 00000130 022080E2 ADD R2,R0,#+2 \ 00000134 0C009DE5 LDR R0,[SP, #+12] \ 00000138 021040E2 SUB R1,R0,#+2 \ 0000013C 020049E2 SUB R0,R9,#+2 \ 00000140 B40100EF SWI +436 \ 00000144 0CD08DE2 ADD SP,SP,#+12 401 402 DrawRectangle(start_column,YDISP+fsize,start_column+column_width,YDISP+fsize+column_height, 403 0,black,colors[i]); \ ??method0_2_2: \ 00000148 04009DE5 LDR R0,[SP, #+4] \ 0000014C 0A30A0E1 MOV R3,R10 \ 00000150 09B080E0 ADD R11,R0,R9 \ 00000154 080186E0 ADD R0,R6,R8, LSL #+2 \ 00000158 100080E2 ADD R0,R0,#+16 \ 0000015C 01002DE9 PUSH {R0} \ 00000160 0B20A0E1 MOV R2,R11 \ 00000164 200086E2 ADD R0,R6,#+32 \ 00000168 01002DE9 PUSH {R0} \ 0000016C 0000A0E3 MOV R0,#+0 \ 00000170 01002DE9 PUSH {R0} \ 00000174 0C109DE5 LDR R1,[SP, #+12] \ 00000178 0900A0E1 MOV R0,R9 \ 0000017C B40100EF SWI +436 404 switch(i) \ 00000180 0800B0E1 MOVS R0,R8 \ 00000184 0CD08DE2 ADD SP,SP,#+12 \ 00000188 0600000A BEQ ??method0_2_3 \ 0000018C 010058E2 SUBS R0,R8,#+1 \ 00000190 0B00000A BEQ ??method0_2_4 \ 00000194 010050E2 SUBS R0,R0,#+1 \ 00000198 0B00000A BEQ ??method0_2_5 \ 0000019C 010050E2 SUBS R0,R0,#+1 \ 000001A0 1000000A BEQ ??method0_2_6 \ 000001A4 160000EA B ??method0_2_7 405 { 406 case 0: 407 y_line=YDISP+fsize+column_height-(data->r*column_height)/0xFF; \ ??method0_2_3: \ 000001A8 340094E5 LDR R0,[R4, #+52] \ ??method0_2_8: \ 000001AC F0109FE5 LDR R1,??method0_2_0+0x8 ;; 0xffffffff80808081 \ 000001B0 970000E0 MUL R0,R7,R0 \ 000001B4 9120C3E0 SMULL R2,R3,R1,R0 \ 000001B8 003083E0 ADD R3,R3,R0 \ 000001BC C333A0E1 ASR R3,R3,#+7 \ 000001C0 0D0000EA B ??method0_2_9 408 break; 409 case 1: 410 y_line=YDISP+fsize+column_height-(data->g*column_height)/0xFF; \ ??method0_2_4: \ 000001C4 380094E5 LDR R0,[R4, #+56] \ 000001C8 F7FFFFEA B ??method0_2_8 411 break; 412 case 2: 413 y_line=YDISP+fsize+column_height-(data->b*column_height)/0xFF; \ ??method0_2_5: \ 000001CC 3C0094E5 LDR R0,[R4, #+60] \ 000001D0 CC109FE5 LDR R1,??method0_2_0+0x8 ;; 0xffffffff80808081 \ 000001D4 970000E0 MUL R0,R7,R0 \ 000001D8 9120C3E0 SMULL R2,R3,R1,R0 \ 000001DC 003083E0 ADD R3,R3,R0 \ 000001E0 C333A0E1 ASR R3,R3,#+7 \ 000001E4 040000EA B ??method0_2_9 414 break; 415 case 3: 416 y_line=YDISP+fsize+column_height-(data->a*column_height)/0x64; \ ??method0_2_6: \ 000001E8 400094E5 LDR R0,[R4, #+64] \ 000001EC B4109FE5 LDR R1,??method0_2_0+0xC ;; 0x51eb851f \ 000001F0 970000E0 MUL R0,R7,R0 \ 000001F4 9120C3E0 SMULL R2,R3,R1,R0 \ 000001F8 C332A0E1 ASR R3,R3,#+5 \ ??method0_2_9: \ 000001FC A00F83E0 ADD R0,R3,R0, LSR #+31 \ 00000200 00504AE0 SUB R5,R10,R0 417 break; 418 } 419 DrawLine(start_column,y_line,start_column+column_width,y_line,0,black); \ ??method0_2_7: \ 00000204 200086E2 ADD R0,R6,#+32 \ 00000208 01002DE9 PUSH {R0} \ 0000020C 0530A0E1 MOV R3,R5 \ 00000210 0B20A0E1 MOV R2,R11 \ 00000214 0510A0E1 MOV R1,R5 \ 00000218 0000A0E3 MOV R0,#+0 \ 0000021C 01002DE9 PUSH {R0} 420 } \ 00000220 018088E2 ADD R8,R8,#+1 \ 00000224 0900A0E1 MOV R0,R9 \ 00000228 B30100EF SWI +435 \ 0000022C 040058E3 CMP R8,#+4 \ 00000230 08D08DE2 ADD SP,SP,#+8 \ 00000234 ACFFFF1A BNE ??method0_2_1 421 setColor(data->r,data->g,data->b,data->a,data->testcolor); \ 00000238 4C0084E2 ADD R0,R4,#+76 \ 0000023C 01002DE9 PUSH {R0} \ 00000240 403094E5 LDR R3,[R4, #+64] \ 00000244 3C2094E5 LDR R2,[R4, #+60] \ 00000248 381094E5 LDR R1,[R4, #+56] \ 0000024C 340094E5 LDR R0,[R4, #+52] \ 00000250 310100EF SWI +305 422 DrawRoundedFrame(scr_w-1-fsize,YDISP+1,scr_w-2,YDISP+fsize,2,2,0,black,data->testcolor); \ 00000254 4C0084E2 ADD R0,R4,#+76 \ 00000258 01002DE9 PUSH {R0} \ 0000025C 0110A0E3 MOV R1,#+1 \ 00000260 200086E2 ADD R0,R6,#+32 \ 00000264 01002DE9 PUSH {R0} \ 00000268 0000A0E3 MOV R0,#+0 \ 0000026C 01002DE9 PUSH {R0} \ 00000270 0200A0E3 MOV R0,#+2 \ 00000274 01002DE9 PUSH {R0} \ 00000278 01002DE9 PUSH {R0} \ 0000027C 18309DE5 LDR R3,[SP, #+24] \ 00000280 20009DE5 LDR R0,[SP, #+32] \ 00000284 022040E2 SUB R2,R0,#+2 \ 00000288 24009DE5 LDR R0,[SP, #+36] \ 0000028C 030040E0 SUB R0,R0,R3 \ 00000290 500100EF SWI +336 423 } \ 00000294 28D08DE2 ADD SP,SP,#+40 \ 00000298 F08FBDE8 POP {R4-R11,PC} ;; return \ ??method0_2_0: \ 0000029C 398EE338 DC32 0x38e38e39 \ 000002A0 ........ DC32 `?` \ 000002A4 81808080 DC32 0xffffffff80808081 \ 000002A8 1F85EB51 DC32 0x51eb851f 424 \ In segment CODE, align 4, keep-with-next 425 void method1_2(MAIN_GUI_2 *data, void *(*malloc_adr)(int)) 426 { \ method1_2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 427 data->ws1=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 300084E5 STR R0,[R4, #+48] 428 data->gui.state=1; \ 00000014 0100A0E3 MOV R0,#+1 \ 00000018 0C00C4E5 STRB R0,[R4, #+12] 429 } \ 0000001C 1080BDE8 POP {R4,PC} ;; return 430 \ In segment CODE, align 4, keep-with-next 431 void method2_2(MAIN_GUI_2 *data, void (*mfree_adr)(void *)) 432 { \ method2_2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 433 FreeWS(data->ws1); \ 00000008 300094E5 LDR R0,[R4, #+48] \ 0000000C 290100EF SWI +297 434 data->gui.state=0; \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 0C00C4E5 STRB R0,[R4, #+12] 435 } \ 00000018 1080BDE8 POP {R4,PC} ;; return 436 \ In segment CODE, align 4, keep-with-next 437 void method3_2(MAIN_GUI_2 *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) 438 { 439 #ifdef ELKA 440 DisableIconBar(1); 441 #endif 442 data->gui.state=2; \ method3_2: \ 00000000 0210A0E3 MOV R1,#+2 \ 00000004 0C10C0E5 STRB R1,[R0, #+12] 443 } \ 00000008 1EFF2FE1 BX LR ;; return 444 \ In segment CODE, align 4, keep-with-next 445 void method4_2(MAIN_GUI_2 *data, void (*mfree_adr)(void *)) 446 { 447 if (data->gui.state!=2) return; \ method4_2: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 448 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 449 } \ 00000010 1EFF2FE1 BX LR ;; return 450 \ In segment CODE, align 4, keep-with-next 451 int method5_2(MAIN_GUI_2 *data, GUI_MSG *msg) 452 { \ method5_2: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 453 int n; 454 if ((msg->gbsmsg->msg==KEY_DOWN)||(msg->gbsmsg->msg==LONG_PRESS)) \ 00000004 044091E5 LDR R4,[R1, #+4] \ 00000008 0020A0E1 MOV R2,R0 \ 0000000C F200D4E1 LDRSH R0,[R4, #+2] \ 00000010 9550A0E3 MOV R5,#+149 \ 00000014 405F85E3 ORR R5,R5,#0x100 \ 00000018 026045E2 SUB R6,R5,#+2 \ 0000001C 060050E1 CMP R0,R6 \ 00000020 05005011 CMPNE R0,R5 \ 00000024 7200001A BNE ??method5_2_1 455 { 456 if (msg->gbsmsg->msg==KEY_DOWN) \ 00000028 F270D4E1 LDRSH R7,[R4, #+2] \ 0000002C 340092E5 LDR R0,[R2, #+52] \ 00000030 381092E5 LDR R1,[R2, #+56] \ 00000034 3CC092E5 LDR R12,[R2, #+60] \ 00000038 403092E5 LDR R3,[R2, #+64] \ 0000003C 060057E1 CMP R7,R6 \ 00000040 0F00001A BNE ??method5_2_2 457 { 458 switch(msg->gbsmsg->submess) \ 00000044 046094E5 LDR R6,[R4, #+4] \ 00000048 046056E2 SUBS R6,R6,#+4 \ 0000004C 08605612 SUBSNE R6,R6,#+8 \ 00000050 0200000A BEQ ??method5_2_3 \ 00000054 0E6056E2 SUBS R6,R6,#+14 \ 00000058 0200000A BEQ ??method5_2_4 \ 0000005C 080000EA B ??method5_2_2 459 { 460 case RIGHT_SOFT: 461 case RED_BUTTON: 462 return (1); \ ??method5_2_3: \ 00000060 0100A0E3 MOV R0,#+1 \ 00000064 F081BDE8 POP {R4-R8,PC} 463 464 case ENTER_BUTTON: 465 setColor(data->r,data->g,data->b,data->a,data->color); \ ??method5_2_4: \ 00000068 442092E5 LDR R2,[R2, #+68] \ 0000006C 04002DE9 PUSH {R2} \ 00000070 0C20A0E1 MOV R2,R12 \ 00000074 310100EF SWI +305 466 return (1); \ 00000078 0100A0E3 MOV R0,#+1 \ 0000007C 04D08DE2 ADD SP,SP,#+4 \ 00000080 F081BDE8 POP {R4-R8,PC} 467 } 468 } 469 if (msg->gbsmsg->msg==LONG_PRESS) \ ??method5_2_2: \ 00000084 050057E1 CMP R7,R5 470 data->cstep=8; \ 00000088 0850A003 MOVEQ R5,#+8 \ 0000008C 50508205 STREQ R5,[R2, #+80] 471 472 switch(msg->gbsmsg->submess) \ 00000090 04E094E5 LDR LR,[R4, #+4] \ 00000094 506092E5 LDR R6,[R2, #+80] \ 00000098 487092E5 LDR R7,[R2, #+72] \ 0000009C 0050A0E3 MOV R5,#+0 \ 000000A0 32E04EE2 SUB LR,LR,#+50 \ 000000A4 0C005EE3 CMP LR,#+12 \ 000000A8 5100008A BHI ??method5_2_1 \ 000000AC 018F8FE2 ADR R8,??method5_2_0 \ 000000B0 0E80D8E7 LDRB R8,[R8, LR] \ 000000B4 08F18FE0 ADD PC,PC,R8, LSL #+2 \ ??method5_2_0: \ 000000B8 034E264E DC8 +3,+78,+38,+78 \ 000000BC 2C4E324E DC8 +44,+78,+50,+78 \ 000000C0 4E033226 DC8 +78,+3,+50,+38 \ 000000C4 2C000000 DC8 +44,+0,+0,+0 473 { 474 case UP_BUTTON: 475 case '2': 476 switch(data->current_column) \ ??method5_2_5: \ 000000C8 000057E3 CMP R7,#+0 \ 000000CC 0600000A BEQ ??method5_2_6 \ 000000D0 017057E2 SUBS R7,R7,#+1 \ 000000D4 0A00000A BEQ ??method5_2_7 \ 000000D8 017057E2 SUBS R7,R7,#+1 \ 000000DC 0E00000A BEQ ??method5_2_8 \ 000000E0 017057E2 SUBS R7,R7,#+1 \ 000000E4 1200000A BEQ ??method5_2_9 \ 000000E8 410000EA B ??method5_2_1 477 { 478 case 0: 479 if ((data->r+=data->cstep)>0xFF) \ ??method5_2_6: \ 000000EC 000086E0 ADD R0,R6,R0 \ 000000F0 340082E5 STR R0,[R2, #+52] \ 000000F4 400F50E3 CMP R0,#+256 \ 000000F8 3D0000BA BLT ??method5_2_1 480 data->r=0; \ ??method5_2_10: \ 000000FC 345082E5 STR R5,[R2, #+52] \ 00000100 3B0000EA B ??method5_2_1 481 break; 482 case 1: 483 if ((data->g+=data->cstep)>0xFF) \ ??method5_2_7: \ 00000104 010086E0 ADD R0,R6,R1 \ 00000108 380082E5 STR R0,[R2, #+56] \ 0000010C 400F50E3 CMP R0,#+256 \ 00000110 370000BA BLT ??method5_2_1 484 data->g=0; \ ??method5_2_11: \ 00000114 385082E5 STR R5,[R2, #+56] \ 00000118 350000EA B ??method5_2_1 485 break; 486 case 2: 487 if ((data->b+=data->cstep)>0xFF) \ ??method5_2_8: \ 0000011C 0C0086E0 ADD R0,R6,R12 \ 00000120 3C0082E5 STR R0,[R2, #+60] \ 00000124 400F50E3 CMP R0,#+256 \ 00000128 310000BA BLT ??method5_2_1 488 data->b=0; \ ??method5_2_12: \ 0000012C 3C5082E5 STR R5,[R2, #+60] \ 00000130 2F0000EA B ??method5_2_1 489 break; 490 case 3: 491 if ((data->a+=((n=data->cstep)==8?n>>1:n))>0x64) \ ??method5_2_9: \ 00000134 080056E3 CMP R6,#+8 \ 00000138 0460A003 MOVEQ R6,#+4 \ 0000013C 030086E0 ADD R0,R6,R3 \ 00000140 400082E5 STR R0,[R2, #+64] \ 00000144 650050E3 CMP R0,#+101 \ 00000148 290000BA BLT ??method5_2_1 492 data->a=0; \ 0000014C 405082E5 STR R5,[R2, #+64] \ 00000150 270000EA B ??method5_2_1 493 break; 494 } 495 break; 496 497 case LEFT_BUTTON: 498 case '4': 499 if (--data->current_column<0) \ ??method5_2_13: \ 00000154 010057E2 SUBS R0,R7,#+1 \ 00000158 480082E5 STR R0,[R2, #+72] \ 0000015C 2400005A BPL ??method5_2_1 500 data->current_column=3; \ 00000160 0300A0E3 MOV R0,#+3 \ 00000164 480082E5 STR R0,[R2, #+72] \ 00000168 210000EA B ??method5_2_1 501 break; 502 case RIGHT_BUTTON: 503 case '6': 504 if (++data->current_column>3) \ ??method5_2_14: \ 0000016C 010087E2 ADD R0,R7,#+1 \ 00000170 480082E5 STR R0,[R2, #+72] \ 00000174 040050E3 CMP R0,#+4 \ 00000178 1D0000BA BLT ??method5_2_1 505 data->current_column=0; \ 0000017C 485082E5 STR R5,[R2, #+72] \ 00000180 1B0000EA B ??method5_2_1 506 break; 507 508 case DOWN_BUTTON: 509 case '8': 510 switch(data->current_column) \ ??method5_2_15: \ 00000184 FF50A0E3 MOV R5,#+255 \ 00000188 000057E3 CMP R7,#+0 \ 0000018C 0600000A BEQ ??method5_2_16 \ 00000190 017057E2 SUBS R7,R7,#+1 \ 00000194 0800000A BEQ ??method5_2_17 \ 00000198 017057E2 SUBS R7,R7,#+1 \ 0000019C 0A00000A BEQ ??method5_2_18 \ 000001A0 017057E2 SUBS R7,R7,#+1 \ 000001A4 0C00000A BEQ ??method5_2_19 \ 000001A8 110000EA B ??method5_2_1 511 { 512 case 0: 513 if ((data->r-=data->cstep)<0) \ ??method5_2_16: \ 000001AC 060050E0 SUBS R0,R0,R6 \ 000001B0 340082E5 STR R0,[R2, #+52] \ 000001B4 0E00005A BPL ??method5_2_1 514 data->r=0xFF; \ 000001B8 CFFFFFEA B ??method5_2_10 515 break; 516 case 1: 517 if ((data->g-=data->cstep)<0) \ ??method5_2_17: \ 000001BC 060051E0 SUBS R0,R1,R6 \ 000001C0 380082E5 STR R0,[R2, #+56] \ 000001C4 0A00005A BPL ??method5_2_1 518 data->g=0xFF; \ 000001C8 D1FFFFEA B ??method5_2_11 519 break; 520 case 2: 521 if ((data->b-=data->cstep)<0) \ ??method5_2_18: \ 000001CC 06005CE0 SUBS R0,R12,R6 \ 000001D0 3C0082E5 STR R0,[R2, #+60] \ 000001D4 0600005A BPL ??method5_2_1 522 data->b=0xFF; \ 000001D8 D3FFFFEA B ??method5_2_12 523 break; 524 case 3: 525 if ((data->a-=((n=data->cstep)==8?n>>1:n))<0) \ ??method5_2_19: \ 000001DC 080056E3 CMP R6,#+8 \ 000001E0 0460A003 MOVEQ R6,#+4 \ 000001E4 060053E0 SUBS R0,R3,R6 \ 000001E8 400082E5 STR R0,[R2, #+64] 526 data->a=0x64; \ 000001EC 6400A043 MOVMI R0,#+100 \ 000001F0 40008245 STRMI R0,[R2, #+64] 527 break; 528 } 529 break; 530 } 531 } 532 if (msg->gbsmsg->msg==KEY_UP) \ ??method5_2_1: \ 000001F4 F200D4E1 LDRSH R0,[R4, #+2] \ 000001F8 650F50E3 CMP R0,#+404 533 data->cstep=1; \ 000001FC 0100A003 MOVEQ R0,#+1 \ 00000200 50008205 STREQ R0,[R2, #+80] 534 DirectRedrawGUI(); \ 00000204 3F0100EF SWI +319 535 return(0); \ 00000208 0000A0E3 MOV R0,#+0 \ 0000020C F081BDE8 POP {R4-R8,PC} ;; return 536 } 537 538 \ In segment CODE, align 4, keep-with-next 539 void method7_2(MAIN_GUI_2 *data, void (*mfree_adr)(void *)) 540 { 541 extern void kill_data(void *p, void (*func_p)(void *)); 542 kill_data(data,mfree_adr); \ method7_2: \ 00000000 ........ _BF kill_data,??kill_data??rA ;; tailcall 543 } 544 \ In segment CODE, align 4, keep-with-next 545 int method8_2(void){return(0);} \ method8_2: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 546 \ In segment CODE, align 4, keep-with-next 547 int method9_2(void){return(0);} \ method9_2: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 548 549 \ In segment DATA_C, align 4, align-sorted 550 const void * const gui_methods_2[11]={ 551 (void *)method0_2, //Redraw 552 (void *)method1_2, //Create 553 (void *)method2_2, //Close 554 (void *)method3_2, //Focus 555 (void *)method4_2, //Unfocus 556 (void *)method5_2, //OnKey 557 0, 558 (void *)method7_2, //Destroy 559 (void *)method8_2, 560 (void *)method9_2, 561 0 562 }; 563 564 const RECT Canvas_2={0,0,0,0}; \ Canvas_2: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ gui_methods_2: \ 00000008 ............ DC32 method0_2, method1_2, method2_2, method3_2, method4_2, method5_2 \ ............ \ ............ \ ............ \ 00000020 00000000.... DC32 0H, method7_2, method8_2, method9_2, 0H \ ............ \ ........0000 \ 0000 565 \ In segment CODE, align 4, keep-with-next 566 void EditColors(char *color) 567 { \ EditColors: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0050A0E1 MOV R5,R0 568 MAIN_GUI_2 *main_gui=malloc(sizeof(MAIN_GUI_2)); \ 00000008 5400A0E3 MOV R0,#+84 \ 0000000C 140000EF SWI +20 \ 00000010 0040A0E1 MOV R4,R0 569 zeromem(main_gui,sizeof(MAIN_GUI_2)); \ 00000014 5410A0E3 MOV R1,#+84 \ 00000018 1D0100EF SWI +285 570 main_gui->r=color[0]; \ 0000001C 0000D5E5 LDRB R0,[R5, #+0] \ 00000020 340084E5 STR R0,[R4, #+52] 571 main_gui->g=color[1]; \ 00000024 0100D5E5 LDRB R0,[R5, #+1] \ 00000028 380084E5 STR R0,[R4, #+56] 572 main_gui->b=color[2]; \ 0000002C 0200D5E5 LDRB R0,[R5, #+2] \ 00000030 3C0084E5 STR R0,[R4, #+60] 573 main_gui->a=color[3]; \ 00000034 0300D5E5 LDRB R0,[R5, #+3] \ 00000038 400084E5 STR R0,[R4, #+64] 574 main_gui->color=color; \ 0000003C 445084E5 STR R5,[R4, #+68] 575 patch_rect((RECT*)&Canvas_2,0,YDISP,ScreenW()-1,ScreenH()-1); \ 00000040 898100EF SWI +33161 \ 00000044 0050A0E1 MOV R5,R0 \ 00000048 888100EF SWI +33160 \ 0000004C 3C209FE5 LDR R2,??EditColors_0 ;; Canvas_2 \ 00000050 011045E2 SUB R1,R5,#+1 \ 00000054 010040E2 SUB R0,R0,#+1 \ 00000058 0030A0E3 MOV R3,#+0 \ 0000005C 003082E5 STR R3,[R2, #+0] \ 00000060 B400C2E1 STRH R0,[R2, #+4] \ 00000064 B610C2E1 STRH R1,[R2, #+6] 576 main_gui->gui.canvas=(void *)(&Canvas_2); \ 00000068 002084E5 STR R2,[R4, #+0] 577 main_gui->gui.flag30=2; \ 0000006C 0200A0E3 MOV R0,#+2 \ 00000070 2C0084E5 STR R0,[R4, #+44] 578 main_gui->gui.methods=(void *)gui_methods_2; \ 00000074 080082E2 ADD R0,R2,#+8 \ 00000078 040084E5 STR R0,[R4, #+4] 579 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 0000007C 158000EF SWI +32789 \ 00000080 1C0084E5 STR R0,[R4, #+28] 580 CreateGUI(main_gui); \ 00000084 0400A0E1 MOV R0,R4 \ 00000088 370100EF SWI +311 581 } \ 0000008C 3080BDE8 POP {R4,R5,PC} ;; return \ ??EditColors_0: \ 00000090 ........ DC32 Canvas_2 582 583 typedef struct 584 { 585 void *next; 586 int is_folder; 587 char *fullname; 588 char *name; 589 }FLIST; 590 591 typedef struct 592 { 593 void *gui; 594 int type; 595 }FVIEW; 596 \ In segment DATA_Z, align 4, align-sorted 597 volatile FLIST *fltop; \ fltop: \ 00000000 DS8 4 598 \ In segment CODE, align 4, keep-with-next 599 void Free_FLIST(void) 600 { \ Free_FLIST: \ 00000000 10402DE9 PUSH {R4,LR} 601 LockSched(); \ 00000004 460100EF SWI +326 602 FLIST *fl=(FLIST *)fltop; \ 00000008 ........ LDR R0,??DataTable6 ;; fltop 603 fltop=0; \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 004090E5 LDR R4,[R0, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 604 UnlockSched(); \ 00000018 470100EF SWI +327 \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} 605 while(fl) 606 { 607 FLIST *fl_prev=fl; \ ??Free_FLIST_0: \ 00000024 0400A0E1 MOV R0,R4 608 fl=fl->next; \ 00000028 004094E5 LDR R4,[R4, #+0] 609 mfree(fl_prev); \ 0000002C 150000EF SWI +21 610 } \ 00000030 000054E3 CMP R4,#+0 \ 00000034 FAFFFF1A BNE ??Free_FLIST_0 611 } \ 00000038 1080BDE8 POP {R4,PC} ;; return 612 613 enum TYPES {IS_BACK, IS_FOLDER, IS_FILE}; \ In segment DATA_C, align 4, align-sorted 614 const char back[]=".."; \ back: \ 00000000 2E2E00 DC8 ".." \ 00000003 00 DC8 0 \ 00000004 524F4F5400 DC8 "ROOT" \ 00000009 000000 DC8 0, 0, 0 615 616 \ In segment CODE, align 4, keep-with-next 617 int strcmp_nocase(const char *s, const char *d) 618 { 619 int cs; 620 int ds; 621 do 622 { 623 cs=*s++; \ strcmp_nocase: \ ??strcmp_nocase_0: \ 00000000 ........ LDRB R2,[R0], #+1 624 if (cs&0x40) cs&=0xDF; 625 ds=*d++; \ 00000004 ........ LDRB R3,[R1], #+1 \ 00000008 400012E3 TST R2,#0x40 \ 0000000C DF200212 ANDNE R2,R2,#0xDF 626 if (ds&0x40) ds&=0xDF; \ 00000010 400013E3 TST R3,#0x40 \ 00000014 DF300312 ANDNE R3,R3,#0xDF 627 cs-=ds; \ 00000018 032052E0 SUBS R2,R2,R3 628 if (cs) break; \ 0000001C 0100001A BNE ??strcmp_nocase_1 629 } 630 while(ds); \ 00000020 000053E3 CMP R3,#+0 \ 00000024 F5FFFF1A BNE ??strcmp_nocase_0 631 return(cs); \ ??strcmp_nocase_1: \ 00000028 0200A0E1 MOV R0,R2 \ 0000002C 1EFF2FE1 BX LR ;; return 632 } 633 \ In segment CODE, align 4, keep-with-next 634 FLIST *AddToFList(const char* full_name, const char *name, int is_folder) 635 { \ AddToFList: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0050A0E1 MOV R5,R0 \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 0270A0E1 MOV R7,R2 636 int l_fname; 637 FLIST *fl; 638 FLIST *fn=malloc(sizeof(FLIST)+(l_fname=strlen(full_name))+strlen(name)+2); \ 00000010 1B0000EF SWI +27 \ 00000014 0080A0E1 MOV R8,R0 \ 00000018 0600A0E1 MOV R0,R6 \ 0000001C 1B0000EF SWI +27 \ 00000020 080080E0 ADD R0,R0,R8 \ 00000024 120080E2 ADD R0,R0,#+18 \ 00000028 140000EF SWI +20 \ 0000002C 0040A0E1 MOV R4,R0 639 fn->fullname=(char *)fn+sizeof(FLIST); \ 00000030 100084E2 ADD R0,R4,#+16 \ 00000034 080084E5 STR R0,[R4, #+8] 640 fn->name=(char *)fn+sizeof(FLIST)+l_fname+1; \ 00000038 040088E0 ADD R0,R8,R4 \ 0000003C 110080E2 ADD R0,R0,#+17 \ 00000040 0C0084E5 STR R0,[R4, #+12] 641 strcpy(fn->fullname,full_name); \ 00000044 080094E5 LDR R0,[R4, #+8] \ 00000048 0510A0E1 MOV R1,R5 642 strcpy(fn->name,name); 643 fn->is_folder=is_folder; 644 fn->next=0; 645 fl=(FLIST *)fltop; \ 0000004C ........ LDR R5,??DataTable6 ;; fltop \ 00000050 1A0000EF SWI +26 \ 00000054 0C0094E5 LDR R0,[R4, #+12] \ 00000058 0610A0E1 MOV R1,R6 \ 0000005C 1A0000EF SWI +26 \ 00000060 047084E5 STR R7,[R4, #+4] \ 00000064 0000A0E3 MOV R0,#+0 \ 00000068 000084E5 STR R0,[R4, #+0] \ 0000006C 006095E5 LDR R6,[R5, #+0] 646 if (fl) \ 00000070 000056E3 CMP R6,#+0 \ 00000074 0A00000A BEQ ??AddToFList_0 647 { 648 FLIST *pr; 649 pr=(FLIST *)&fltop; \ 00000078 0C7094E5 LDR R7,[R4, #+12] 650 while(strcmp_nocase(fl->name,fn->name)<0) \ ??AddToFList_1: \ 0000007C 0C0096E5 LDR R0,[R6, #+12] \ 00000080 0710A0E1 MOV R1,R7 \ 00000084 ........ BL strcmp_nocase \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 0300005A BPL ??AddToFList_2 651 { 652 pr=fl; \ 00000090 0650A0E1 MOV R5,R6 653 fl=fl->next; \ 00000094 006096E5 LDR R6,[R6, #+0] 654 if (!fl) break; \ 00000098 000056E3 CMP R6,#+0 \ 0000009C F6FFFF1A BNE ??AddToFList_1 655 } 656 fn->next=fl; \ ??AddToFList_2: \ 000000A0 006084E5 STR R6,[R4, #+0] 657 pr->next=fn; 658 } 659 else 660 { 661 fltop=fn; \ ??AddToFList_0: \ 000000A4 004085E5 STR R4,[R5, #+0] 662 } 663 return (fn); \ 000000A8 0400A0E1 MOV R0,R4 \ 000000AC F081BDE8 POP {R4-R8,PC} ;; return 664 } 665 \ In segment CODE, align 4, keep-with-next 666 int FindFiles(char *str, int type) // type == 0 SelectFolder, type == 1 SelectFile 667 { \ FindFiles: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 CFDF4DE2 SUB SP,SP,#+828 \ 00000008 0140A0E1 MOV R4,R1 668 DIR_ENTRY de; 669 unsigned int err; 670 char *rev,*s,*d; 671 int i, c, n=0; 672 char path[256]; 673 char name[128]; 674 675 strcpy(path,str); \ 0000000C 0010A0E1 MOV R1,R0 \ 00000010 6F0F8DE2 ADD R0,SP,#+444 \ 00000014 1A0000EF SWI +26 676 Free_FLIST(); \ 00000018 ........ BL Free_FLIST 677 s=path; \ 0000001C 6F0F8DE2 ADD R0,SP,#+444 678 d=name; \ 00000020 AF1F8DE2 ADD R1,SP,#+700 679 rev=0; \ 00000024 0050A0E3 MOV R5,#+0 \ 00000028 0020A0E3 MOV R2,#+0 \ 0000002C 050000EA B ??FindFiles_0 680 while((c=*s++)) 681 { 682 *d++=c; \ ??FindFiles_1: \ 00000030 ........ STRB R3,[R1], #+1 683 if (c=='\\' && *s!='\0') rev=d; \ 00000034 5C0053E3 CMP R3,#+92 \ 00000038 0200001A BNE ??FindFiles_0 \ 0000003C 0030D0E5 LDRB R3,[R0, #+0] \ 00000040 000053E3 CMP R3,#+0 \ 00000044 0120A011 MOVNE R2,R1 684 } \ ??FindFiles_0: \ 00000048 ........ LDRB R3,[R0], #+1 \ 0000004C 000053E3 CMP R3,#+0 \ 00000050 F6FFFF1A BNE ??FindFiles_1 685 if(rev==0) \ 00000054 20019FE5 LDR R0,??FindFiles_2 ;; back \ 00000058 000052E3 CMP R2,#+0 686 AddToFList("ROOT",back,IS_BACK); \ 0000005C 0010A001 MOVEQ R1,R0 \ 00000060 04008002 ADDEQ R0,R0,#+4 \ 00000064 0300000A BEQ ??FindFiles_3 687 else 688 { 689 *rev=0; \ 00000068 0050C2E5 STRB R5,[R2, #+0] 690 AddToFList(name,back,IS_BACK); \ 0000006C 0020A0E3 MOV R2,#+0 \ 00000070 0010A0E1 MOV R1,R0 \ 00000074 AF0F8DE2 ADD R0,SP,#+700 \ ??FindFiles_3: \ 00000078 ........ BL AddToFList 691 } 692 n++; \ 0000007C 0160A0E3 MOV R6,#+1 693 694 695 i=strlen(path); \ 00000080 6F0F8DE2 ADD R0,SP,#+444 \ 00000084 1B0000EF SWI +27 \ 00000088 0090A0E1 MOV R9,R0 696 path[i++]='*'; \ 0000008C 6F0F8DE2 ADD R0,SP,#+444 \ 00000090 000089E0 ADD R0,R9,R0 \ 00000094 2A10A0E3 MOV R1,#+42 \ 00000098 0010C0E5 STRB R1,[R0, #+0] 697 path[i]='\0'; \ 0000009C 0150C0E5 STRB R5,[R0, #+1] 698 if (FindFirstFile(&de,path,&err)) \ 000000A0 0D20A0E1 MOV R2,SP \ 000000A4 6F1F8DE2 ADD R1,SP,#+444 \ 000000A8 04008DE2 ADD R0,SP,#+4 \ 000000AC 6B0000EF SWI +107 \ 000000B0 000050E3 CMP R0,#+0 \ 000000B4 5C70A0E3 MOV R7,#+92 \ 000000B8 2900000A BEQ ??FindFiles_4 699 { 700 do 701 { 702 i=strlen(de.folder_name); \ ??FindFiles_5: \ 000000BC 2C008DE2 ADD R0,SP,#+44 \ 000000C0 1B0000EF SWI +27 \ 000000C4 0090A0E1 MOV R9,R0 703 strcpy(path,de.folder_name); \ 000000C8 2C108DE2 ADD R1,SP,#+44 \ 000000CC 6F0F8DE2 ADD R0,SP,#+444 \ 000000D0 1A0000EF SWI +26 704 path[i++]='\\'; \ 000000D4 6F0F8DE2 ADD R0,SP,#+444 \ 000000D8 000089E0 ADD R0,R9,R0 \ 000000DC ........ STRB R7,[R0], #+1 705 strcpy(path+i,de.file_name); \ 000000E0 AD108DE2 ADD R1,SP,#+173 \ 000000E4 1A0000EF SWI +26 706 if (de.file_attr&FA_DIRECTORY) \ 000000E8 F201DDE1 LDRSH R0,[SP, #+18] \ 000000EC 018086E2 ADD R8,R6,#+1 \ 000000F0 100010E3 TST R0,#0x10 \ 000000F4 0E00000A BEQ ??FindFiles_6 707 { 708 i=strlen(path); \ 000000F8 6F0F8DE2 ADD R0,SP,#+444 \ 000000FC 1B0000EF SWI +27 \ 00000100 0090A0E1 MOV R9,R0 709 path[i++]='\\'; \ 00000104 6F0F8DE2 ADD R0,SP,#+444 \ 00000108 000089E0 ADD R0,R9,R0 \ 0000010C 0070C0E5 STRB R7,[R0, #+0] 710 path[i]=0; \ 00000110 0150C0E5 STRB R5,[R0, #+1] 711 name[0]='\\'; \ 00000114 BC72CDE5 STRB R7,[SP, #+700] 712 strcpy(name+1,de.file_name); \ 00000118 AD108DE2 ADD R1,SP,#+173 \ 0000011C BD008DE2 ADD R0,SP,#+189 \ 00000120 800F80E2 ADD R0,R0,#+512 \ 00000124 1A0000EF SWI +26 713 AddToFList(path,name,IS_FOLDER); \ 00000128 0120A0E3 MOV R2,#+1 \ 0000012C AF1F8DE2 ADD R1,SP,#+700 \ 00000130 030000EA B ??FindFiles_7 714 n++; 715 } 716 else 717 { 718 if (type!=0) \ ??FindFiles_6: \ 00000134 000054E3 CMP R4,#+0 \ 00000138 0400000A BEQ ??FindFiles_8 719 { 720 AddToFList(path,de.file_name,IS_FILE); \ 0000013C 0220A0E3 MOV R2,#+2 \ 00000140 AD108DE2 ADD R1,SP,#+173 \ ??FindFiles_7: \ 00000144 6F0F8DE2 ADD R0,SP,#+444 \ 00000148 ........ BL AddToFList 721 n++; \ 0000014C 0860A0E1 MOV R6,R8 722 } 723 } 724 } 725 while(FindNextFile(&de,&err)); \ ??FindFiles_8: \ 00000150 0D10A0E1 MOV R1,SP \ 00000154 04008DE2 ADD R0,SP,#+4 \ 00000158 6C0000EF SWI +108 \ 0000015C 000050E3 CMP R0,#+0 \ 00000160 D5FFFF1A BNE ??FindFiles_5 726 } 727 FindClose(&de,&err); \ ??FindFiles_4: \ 00000164 0D10A0E1 MOV R1,SP \ 00000168 04008DE2 ADD R0,SP,#+4 \ 0000016C 6D0000EF SWI +109 728 return n; \ 00000170 0600A0E1 MOV R0,R6 \ 00000174 CFDF8DE2 ADD SP,SP,#+828 \ 00000178 F083BDE8 POP {R4-R9,PC} ;; return \ ??FindFiles_2: \ 0000017C ........ DC32 back 729 } 730 731 732 \ In segment CODE, align 4, keep-with-next 733 FLIST *FindFLISTtByNS(int *i, int si) 734 { 735 FLIST *fl; 736 fl=(FLIST *)fltop; \ FindFLISTtByNS: \ 00000000 ........ LDR R2,??DataTable6 ;; fltop \ 00000004 010000EA B ??FindFLISTtByNS_0 737 while(fl) 738 { 739 if (fl->is_folder==si) 740 { 741 if (!(*i)) return (fl); 742 (*i)--; \ ??FindFLISTtByNS_1: \ 00000008 013043E2 SUB R3,R3,#+1 \ 0000000C 003080E5 STR R3,[R0, #+0] 743 } 744 fl=fl->next; \ ??FindFLISTtByNS_0: \ 00000010 002092E5 LDR R2,[R2, #+0] \ 00000014 000052E3 CMP R2,#+0 \ 00000018 0700000A BEQ ??FindFLISTtByNS_2 \ 0000001C 043092E5 LDR R3,[R2, #+4] \ 00000020 010053E1 CMP R3,R1 \ 00000024 F9FFFF1A BNE ??FindFLISTtByNS_0 \ 00000028 003090E5 LDR R3,[R0, #+0] \ 0000002C 000053E3 CMP R3,#+0 \ 00000030 F4FFFF1A BNE ??FindFLISTtByNS_1 \ 00000034 0200A0E1 MOV R0,R2 \ 00000038 1EFF2FE1 BX LR 745 } 746 return fl; \ ??FindFLISTtByNS_2: \ 0000003C 0000A0E3 MOV R0,#+0 \ 00000040 1EFF2FE1 BX LR ;; return 747 } 748 \ In segment CODE, align 4, keep-with-next 749 FLIST *FindFLISTtByN(int n) 750 { \ FindFLISTtByN: \ 00000000 01402DE9 PUSH {R0,LR} 751 FLIST *fl; 752 fl=FindFLISTtByNS(&n,IS_BACK); if ((!n)&&(fl)) return(fl); \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 0D00A0E1 MOV R0,SP \ 0000000C ........ BL FindFLISTtByNS \ 00000010 00109DE5 LDR R1,[SP, #+0] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0100001A BNE ??FindFLISTtByN_0 \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0280BD18 POPNE {R1,PC} 753 fl=FindFLISTtByNS(&n,IS_FOLDER); if ((!n)&&(fl)) return(fl); \ ??FindFLISTtByN_0: \ 00000024 0110A0E3 MOV R1,#+1 \ 00000028 0D00A0E1 MOV R0,SP \ 0000002C ........ BL FindFLISTtByNS \ 00000030 00109DE5 LDR R1,[SP, #+0] \ 00000034 000051E3 CMP R1,#+0 \ 00000038 0100001A BNE ??FindFLISTtByN_1 \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 0280BD18 POPNE {R1,PC} 754 fl=FindFLISTtByNS(&n,IS_FILE); if ((!n)&&(fl)) return(fl); \ ??FindFLISTtByN_1: \ 00000044 0210A0E3 MOV R1,#+2 \ 00000048 0D00A0E1 MOV R0,SP \ 0000004C ........ BL FindFLISTtByNS \ 00000050 0280BDE8 POP {R1,PC} 755 return fl; 756 } 757 \ In segment CODE, align 4, keep-with-next 758 void SavePath(void *ed_gui, FLIST *fl) 759 { \ SavePath: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 760 EDITCONTROL ec; 761 EDIT_ExtractFocusedControl(ed_gui,&ec); \ 00000010 0D10A0E1 MOV R1,SP \ 00000014 C60100EF SWI +454 762 WSHDR *ws=AllocWS(ec.maxlen); \ 00000018 F801DDE1 LDRSH R0,[SP, #+24] \ 0000001C 250100EF SWI +293 763 str_2ws(ws,fl->fullname,ec.maxlen); \ 00000020 F821DDE1 LDRSH R2,[SP, #+24] \ 00000024 081095E5 LDR R1,[R5, #+8] \ 00000028 0060A0E1 MOV R6,R0 \ 0000002C 6C0100EF SWI +364 764 EDIT_SetTextToFocused(ed_gui,ws); \ 00000030 0610A0E1 MOV R1,R6 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 810100EF SWI +385 765 FreeWS(ws); \ 0000003C 0600A0E1 MOV R0,R6 \ 00000040 290100EF SWI +297 766 } \ 00000044 2CD08DE2 ADD SP,SP,#+44 \ 00000048 7080BDE8 POP {R4-R6,PC} ;; return 767 768 769 char header[128]; \ In segment CODE, align 4, keep-with-next 770 int filelist_menu_onkey(void *data, GUI_MSG *msg) 771 { \ filelist_menu_onkey: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0170A0E1 MOV R7,R1 772 FVIEW *fview=MenuGetUserPointer(data); \ 0000000C E00100EF SWI +480 \ 00000010 0050A0E1 MOV R5,R0 773 FLIST *fl; 774 int i, n; 775 i=GetCurMenuItem(data); \ 00000014 0400A0E1 MOV R0,R4 \ 00000018 8F0100EF SWI +399 776 fl=FindFLISTtByN(i); \ 0000001C ........ BL FindFLISTtByN \ 00000020 0060A0E1 MOV R6,R0 777 778 if (msg->keys==0x3D) \ 00000024 F200D7E1 LDRSH R0,[R7, #+2] \ 00000028 3D0050E3 CMP R0,#+61 \ 0000002C 2400001A BNE ??filelist_menu_onkey_0 779 { 780 if (fl) \ 00000030 000056E3 CMP R6,#+0 \ 00000034 2000000A BEQ ??filelist_menu_onkey_1 781 { 782 if (fl->is_folder==IS_FOLDER || fl->is_folder==IS_BACK) \ 00000038 040096E5 LDR R0,[R6, #+4] \ 0000003C 010050E3 CMP R0,#+1 \ 00000040 00005013 CMPNE R0,#+0 \ 00000044 2400001A BNE ??filelist_menu_onkey_2 783 { 784 int len; 785 if (strcmp(fl->fullname,"ROOT")) \ 00000048 080096E5 LDR R0,[R6, #+8] \ 0000004C A4109FE5 LDR R1,??filelist_menu_onkey_3 ;; back + 4 \ 00000050 190000EF SWI +25 \ 00000054 000050E3 CMP R0,#+0 \ 00000058 0F00000A BEQ ??filelist_menu_onkey_4 786 { 787 strncpy(header,fl->fullname,sizeof(header)-1); \ 0000005C 98709FE5 LDR R7,??filelist_menu_onkey_3+0x4 ;; filelist_HDR \ 00000060 081096E5 LDR R1,[R6, #+8] \ 00000064 7F20A0E3 MOV R2,#+127 \ 00000068 140087E2 ADD R0,R7,#+20 \ 0000006C 160100EF SWI +278 788 len=strlen(fl->fullname); \ 00000070 080096E5 LDR R0,[R6, #+8] \ 00000074 1B0000EF SWI +27 789 header[len>sizeof(header)-1?sizeof(header)-1:len]=0; \ 00000078 800050E3 CMP R0,#+128 \ 0000007C 7F00A023 MOVCS R0,#+127 \ 00000080 070080E0 ADD R0,R0,R7 \ 00000084 0010A0E3 MOV R1,#+0 \ 00000088 1410C0E5 STRB R1,[R0, #+20] 790 n=FindFiles(fl->fullname,fview->type); \ 0000008C 041095E5 LDR R1,[R5, #+4] \ 00000090 080096E5 LDR R0,[R6, #+8] \ 00000094 ........ BL FindFiles \ 00000098 000000EA B ??filelist_menu_onkey_5 791 } 792 else 793 { 794 int CreateRootMenu(); 795 n=CreateRootMenu(); \ ??filelist_menu_onkey_4: \ 0000009C ........ BL CreateRootMenu \ ??filelist_menu_onkey_5: \ 000000A0 0010A0E1 MOV R1,R0 796 } 797 Menu_SetItemCountDyn(data,n); \ 000000A4 0400A0E1 MOV R0,R4 \ 000000A8 E60100EF SWI +486 798 SetCursorToMenuItem(data, 0); \ 000000AC 0010A0E3 MOV R1,#+0 \ 000000B0 0400A0E1 MOV R0,R4 \ 000000B4 C40100EF SWI +452 799 RefreshGUI(); \ 000000B8 960100EF SWI +406 800 } 801 else 802 { 803 SavePath(fview->gui,fl); 804 return (1); 805 } 806 } 807 // GeneralFunc_F1(1); 808 return(-1); \ ??filelist_menu_onkey_1: \ 000000BC 0000E0E3 MVN R0,#+0 \ 000000C0 F080BDE8 POP {R4-R7,PC} 809 } 810 if (msg->keys==0x18) \ ??filelist_menu_onkey_0: \ 000000C4 180050E3 CMP R0,#+24 \ 000000C8 0800001A BNE ??filelist_menu_onkey_6 811 { 812 if (fl) \ 000000CC 000056E3 CMP R6,#+0 813 { 814 if (fl->is_folder!=IS_BACK) \ 000000D0 04009615 LDRNE R0,[R6, #+4] \ 000000D4 00005013 CMPNE R0,#+0 \ 000000D8 F7FFFF0A BEQ ??filelist_menu_onkey_1 815 { 816 SavePath(fview->gui,fl); 817 return (1); 818 } 819 } 820 return (-1); 821 } \ ??filelist_menu_onkey_2: \ 000000DC 000095E5 LDR R0,[R5, #+0] \ 000000E0 0610A0E1 MOV R1,R6 \ 000000E4 ........ BL SavePath \ 000000E8 0100A0E3 MOV R0,#+1 \ 000000EC F080BDE8 POP {R4-R7,PC} 822 return (0); \ ??filelist_menu_onkey_6: \ 000000F0 0000A0E3 MOV R0,#+0 \ 000000F4 F080BDE8 POP {R4-R7,PC} ;; return \ ??filelist_menu_onkey_3: \ 000000F8 ........ DC32 back + 4 \ 000000FC ........ DC32 filelist_HDR 823 } 824 \ In segment CODE, align 4, keep-with-next 825 void filelist_menu_ghook(void *data, int cmd) 826 { \ filelist_menu_ghook: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0140A0E1 MOV R4,R1 827 FVIEW *fview=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0050A0E1 MOV R5,R0 828 if (cmd==3) \ 00000010 030054E3 CMP R4,#+3 \ 00000014 0300001A BNE ??filelist_menu_ghook_0 829 { 830 Free_FLIST(); \ 00000018 ........ BL Free_FLIST 831 mfree(fview); \ 0000001C 0500A0E1 MOV R0,R5 \ 00000020 150000EF SWI +21 \ 00000024 3080BDE8 POP {R4,R5,PC} 832 } 833 if (cmd==0x0A) \ ??filelist_menu_ghook_0: \ 00000028 0A0054E3 CMP R4,#+10 \ 0000002C 3080BD18 POPNE {R4,R5,PC} 834 { 835 DisableIDLETMR(); \ 00000030 7F0100EF SWI +383 836 } 837 } \ 00000034 3080BDE8 POP {R4,R5,PC} ;; return 838 \ In segment CODE, align 4, keep-with-next 839 void filelist_menu_iconhndl(void *data, int curitem, void *user_pointer) 840 { \ filelist_menu_iconhndl: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 841 FLIST *fl; 842 WSHDR *ws; 843 void *item=AllocMenuItem(data); \ 0000000C 970100EF SWI +407 \ 00000010 0060A0E1 MOV R6,R0 844 int len; 845 fl=FindFLISTtByN(curitem); \ 00000014 0500A0E1 MOV R0,R5 \ 00000018 ........ BL FindFLISTtByN \ 0000001C 0070B0E1 MOVS R7,R0 846 if (fl) \ 00000020 1D00000A BEQ ??filelist_menu_iconhndl_0 847 { 848 len=strlen(fl->name); \ 00000024 0C0097E5 LDR R0,[R7, #+12] \ 00000028 1B0000EF SWI +27 \ 0000002C 0080A0E1 MOV R8,R0 849 ws=AllocMenuWS(data,len+4); \ 00000030 041088E2 ADD R1,R8,#+4 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 980100EF SWI +408 \ 0000003C 0090A0E1 MOV R9,R0 850 if (fl->is_folder==IS_BACK || fl->is_folder==IS_FOLDER) \ 00000040 040097E5 LDR R0,[R7, #+4] \ 00000044 000050E3 CMP R0,#+0 \ 00000048 01005013 CMPNE R0,#+1 \ 0000004C 0D00001A BNE ??filelist_menu_iconhndl_1 851 { 852 str_2ws(ws,fl->name,len); \ 00000050 0C1097E5 LDR R1,[R7, #+12] \ 00000054 0820A0E1 MOV R2,R8 \ 00000058 0900A0E1 MOV R0,R9 \ 0000005C 6C0100EF SWI +364 853 wsInsertChar(ws,0x0002,1); \ 00000060 0120A0E3 MOV R2,#+1 \ 00000064 0210A0E3 MOV R1,#+2 \ 00000068 0900A0E1 MOV R0,R9 \ 0000006C 1D0000EF SWI +29 854 wsInsertChar(ws,0xE008,1); \ 00000070 0120A0E3 MOV R2,#+1 \ 00000074 0810A0E3 MOV R1,#+8 \ 00000078 E01C81E3 ORR R1,R1,#0xE000 \ 0000007C 0900A0E1 MOV R0,R9 \ 00000080 1D0000EF SWI +29 \ 00000084 0A0000EA B ??filelist_menu_iconhndl_2 855 } 856 else 857 { 858 str_2ws(ws,fl->name,len); \ ??filelist_menu_iconhndl_1: \ 00000088 0C1097E5 LDR R1,[R7, #+12] \ 0000008C 0820A0E1 MOV R2,R8 \ 00000090 0900A0E1 MOV R0,R9 \ 00000094 6C0100EF SWI +364 \ 00000098 050000EA B ??filelist_menu_iconhndl_2 859 } 860 } 861 else 862 { 863 ws=AllocMenuWS(data,10); \ ??filelist_menu_iconhndl_0: \ 0000009C 0A10A0E3 MOV R1,#+10 \ 000000A0 0400A0E1 MOV R0,R4 \ 000000A4 980100EF SWI +408 864 wsprintf(ws, "Ошибка"); \ 000000A8 1C109FE5 LDR R1,??filelist_menu_iconhndl_3 ;; `?` \ 000000AC 0090A0E1 MOV R9,R0 \ 000000B0 240100EF SWI +292 865 } 866 SetMenuItemText(data, item, ws, curitem); \ ??filelist_menu_iconhndl_2: \ 000000B4 0530A0E1 MOV R3,R5 \ 000000B8 0920A0E1 MOV R2,R9 \ 000000BC 0610A0E1 MOV R1,R6 \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 9A0100EF SWI +410 867 } \ 000000C8 F083BDE8 POP {R4-R9,PC} ;; return \ ??filelist_menu_iconhndl_3: \ 000000CC ........ DC32 `?` \ In segment DATA_I, align 4, align-sorted 868 869 int fmenusoftkeys[]={0,1,2}; 870 SOFTKEY_DESC fmenu_sk[]= 871 { 872 {0x0018,0x0000,(int)"Select"}, 873 {0x0001,0x0000,(int)"Close"}, 874 {0x003D,0x0000,(int)"+"} 875 }; 876 877 SOFTKEYSTAB fmenu_skt= 878 { 879 fmenu_sk,0 880 }; 881 882 HEADER_DESC filelist_HDR={0,0,0,0,NULL,(int)header,LGP_NULL}; \ filelist_HDR: \ 00000000 DS8 20 \ 00000014 REQUIRE `?` \ header: \ 00000014 DS8 128 \ 00000094 REQUIRE `?` 883 884 MENU_DESC filelist_STRUCT= \ filelist_STRUCT: \ 00000094 DS8 44 \ 000000C0 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ fmenusoftkeys: \ 00000000 DS8 12 \ 0000000C REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ fmenu_sk: \ 00000000 DS8 24 \ 00000018 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ fmenu_skt: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` 885 { 886 8,filelist_menu_onkey,filelist_menu_ghook,NULL, 887 fmenusoftkeys, 888 &fmenu_skt, 889 0x10, 890 filelist_menu_iconhndl, 891 NULL, //Items 892 NULL, //Procs 893 0 //n 894 }; 895 \ In segment CODE, align 4, keep-with-next 896 int CreateRootMenu() 897 { \ CreateRootMenu: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 24D04DE2 SUB SP,SP,#+36 898 char path[32]; 899 unsigned int err; 900 int n=0; \ 00000008 0040A0E3 MOV R4,#+0 901 Free_FLIST(); 902 for (int i=0; i!=5; i++) \ 0000000C 0050A0E3 MOV R5,#+0 \ 00000010 ........ BL Free_FLIST 903 { 904 path[0]=i+'0'; \ ??CreateRootMenu_0: \ 00000014 301085E2 ADD R1,R5,#+48 \ 00000018 0410CDE5 STRB R1,[SP, #+4] 905 path[1]=':'; \ 0000001C 3A10A0E3 MOV R1,#+58 \ 00000020 0510CDE5 STRB R1,[SP, #+5] 906 path[2]='\\'; \ 00000024 5C10A0E3 MOV R1,#+92 \ 00000028 0610CDE5 STRB R1,[SP, #+6] 907 path[3]=0; \ 0000002C 0010A0E3 MOV R1,#+0 \ 00000030 0710CDE5 STRB R1,[SP, #+7] 908 if (isdir(path,&err)) \ 00000034 0D10A0E1 MOV R1,SP \ 00000038 04008DE2 ADD R0,SP,#+4 \ 0000003C 910000EF SWI +145 \ 00000040 000050E3 CMP R0,#+0 \ 00000044 0400000A BEQ ??CreateRootMenu_1 909 { 910 AddToFList(path,path,IS_FOLDER); \ 00000048 0120A0E3 MOV R2,#+1 \ 0000004C 04108DE2 ADD R1,SP,#+4 \ 00000050 04008DE2 ADD R0,SP,#+4 \ 00000054 ........ BL AddToFList 911 n++; \ 00000058 014084E2 ADD R4,R4,#+1 912 } 913 } \ ??CreateRootMenu_1: \ 0000005C 015085E2 ADD R5,R5,#+1 \ 00000060 050055E3 CMP R5,#+5 \ 00000064 EAFFFF1A BNE ??CreateRootMenu_0 914 strcpy(header,"Root"); \ 00000068 10109FE5 LDR R1,??CreateRootMenu_2 ;; `?` \ 0000006C 10009FE5 LDR R0,??CreateRootMenu_2+0x4 ;; filelist_HDR + 20 \ 00000070 1A0000EF SWI +26 915 return (n); \ 00000074 0400A0E1 MOV R0,R4 \ 00000078 24D08DE2 ADD SP,SP,#+36 \ 0000007C 3080BDE8 POP {R4,R5,PC} ;; return \ ??CreateRootMenu_2: \ 00000080 ........ DC32 `?` \ 00000084 ........ DC32 filelist_HDR + 20 916 } 917 918 \ In segment CODE, align 4, keep-with-next 919 void open_select_file_gui(void *ed_gui, int type) 920 { \ open_select_file_gui: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 ACD04DE2 SUB SP,SP,#+172 \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 0080A0E1 MOV R8,R0 921 EDITCONTROL ec; 922 FVIEW *fview; 923 char path[128]; 924 char *s, *rev=0; \ 00000010 0040A0E3 MOV R4,#+0 \ 00000014 0070A0E3 MOV R7,#+0 925 int n, c, len; 926 927 fview=malloc(sizeof(FVIEW)); \ 00000018 0800A0E3 MOV R0,#+8 \ 0000001C 140000EF SWI +20 \ 00000020 0050A0E1 MOV R5,R0 928 fview->gui=ed_gui; \ 00000024 008085E5 STR R8,[R5, #+0] 929 fview->type=type; \ 00000028 046085E5 STR R6,[R5, #+4] 930 EDIT_ExtractFocusedControl(ed_gui,&ec); \ 0000002C 80108DE2 ADD R1,SP,#+128 \ 00000030 0800A0E1 MOV R0,R8 \ 00000034 C60100EF SWI +454 931 ws_2str(ec.pWS,path,127); \ 00000038 A8009DE5 LDR R0,[SP, #+168] \ 0000003C 7F20A0E3 MOV R2,#+127 \ 00000040 0D10A0E1 MOV R1,SP \ 00000044 A30000EF SWI +163 932 s=path; \ 00000048 0D00A0E1 MOV R0,SP \ 0000004C 040000EA B ??open_select_file_gui_0 933 while((c=*s++)) 934 { 935 if (c=='\\' && *s!='\0') rev=s; \ ??open_select_file_gui_1: \ 00000050 5C0051E3 CMP R1,#+92 \ 00000054 0200001A BNE ??open_select_file_gui_0 \ 00000058 0010D0E5 LDRB R1,[R0, #+0] \ 0000005C 000051E3 CMP R1,#+0 \ 00000060 0070A011 MOVNE R7,R0 936 } \ ??open_select_file_gui_0: \ 00000064 ........ LDRB R1,[R0], #+1 \ 00000068 000051E3 CMP R1,#+0 \ 0000006C F7FFFF1A BNE ??open_select_file_gui_1 937 if (!rev) \ 00000070 8C809FE5 LDR R8,??open_select_file_gui_2 ;; filelist_HDR \ 00000074 000057E3 CMP R7,#+0 \ 00000078 0100001A BNE ??open_select_file_gui_3 938 n=CreateRootMenu(); \ 0000007C ........ BL CreateRootMenu \ 00000080 0D0000EA B ??open_select_file_gui_4 939 else 940 { 941 *rev=0; \ ??open_select_file_gui_3: \ 00000084 0040C7E5 STRB R4,[R7, #+0] 942 strncpy(header,path,sizeof(header)-1); \ 00000088 7F20A0E3 MOV R2,#+127 \ 0000008C 0D10A0E1 MOV R1,SP \ 00000090 140088E2 ADD R0,R8,#+20 \ 00000094 160100EF SWI +278 943 len=strlen(path); \ 00000098 0D00A0E1 MOV R0,SP \ 0000009C 1B0000EF SWI +27 944 header[len>sizeof(header)-1?sizeof(header)-1:len]=0; \ 000000A0 800050E3 CMP R0,#+128 \ 000000A4 7F00A023 MOVCS R0,#+127 \ 000000A8 080080E0 ADD R0,R0,R8 \ 000000AC 1440C0E5 STRB R4,[R0, #+20] 945 n=FindFiles(path,type); \ 000000B0 0610A0E1 MOV R1,R6 \ 000000B4 0D00A0E1 MOV R0,SP \ 000000B8 ........ BL FindFiles \ ??open_select_file_gui_4: \ 000000BC 0060A0E1 MOV R6,R0 946 } 947 patch_header(&filelist_HDR); \ 000000C0 004088E5 STR R4,[R8, #+0] \ 000000C4 888100EF SWI +33160 \ 000000C8 010040E2 SUB R0,R0,#+1 \ 000000CC B400C8E1 STRH R0,[R8, #+4] \ 000000D0 8A8100EF SWI +33162 \ 000000D4 B600C8E1 STRH R0,[R8, #+6] 948 CreateMenu(0,0,&filelist_STRUCT,&filelist_HDR,0,n,fview,0); \ 000000D8 0000A0E3 MOV R0,#+0 \ 000000DC 01002DE9 PUSH {R0} \ 000000E0 20002DE9 PUSH {R5} \ 000000E4 40002DE9 PUSH {R6} \ 000000E8 01002DE9 PUSH {R0} \ 000000EC 0830A0E1 MOV R3,R8 \ 000000F0 942088E2 ADD R2,R8,#+148 \ 000000F4 0010A0E1 MOV R1,R0 \ 000000F8 520100EF SWI +338 949 } \ 000000FC BCD08DE2 ADD SP,SP,#+188 \ 00000100 F081BDE8 POP {R4-R8,PC} ;; return \ ??open_select_file_gui_2: \ 00000104 ........ DC32 filelist_HDR \ In segment CODE, align 4, keep-with-next \ ??DataTable1: \ 00000000 ........ DC32 ms_img \ In segment CODE, align 4, keep-with-next \ ??DataTable3: \ 00000000 ........ DC32 ms_img \ In segment CODE, align 4, keep-with-next \ ??DataTable6: \ 00000000 ........ DC32 fltop \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 0000 DC8 0, 0 \ 00000002 0800 DC16 8 \ 00000004 00000000 DC32 0H \ `?`: \ 00000008 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000000C 00000000 DC32 0 \ `?`: \ 00000010 FF00006400FF DC8 255, 0, 0, 100, 0, 255, 0, 100, 0, 0, 255, 100, 198, 170, 175, 50 \ 00640000FF64 \ C6AAAF32 \ `?`: \ 00000020 00000064 DC8 0, 0, 0, 100 \ `?`: \ 00000024 FFFFFF64 DC8 255, 255, 255, 100 \ `?`: \ 00000028 00000000 DC8 0, 0, 0, 0 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 00000000.... DC32 0H, header, 32767 \ ....FF7F0000 \ `?`: \ 00000014 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000024 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000034 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000044 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000054 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000064 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000074 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000084 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000094 08000000.... DC32 8, filelist_menu_onkey, filelist_menu_ghook, 0H, fmenusoftkeys \ ............ \ 00000000.... \ .... \ 000000A8 ........1000 DC32 fmenu_skt, 16, filelist_menu_iconhndl, 0H, 0H, 0 \ 0000........ \ 000000000000 \ 000000000000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 000000000100 DC32 0, 1, 2 \ 000002000000 \ 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 ........ DC32 `?` \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 ........0000 DC32 fmenu_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 53656C656374 DC8 "Select" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 436C6F736500 DC8 "Close" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 1, align-sorted \ `?`: \ 00000000 2B00 DC8 "+" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 253032582C25 DC8 "%02X,%02X,%02X,%02X" \ 3032582C2530 \ 32582C253032 \ 5800 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CEF8E8E1EAE0 DC8 "\316\370\350\341\352\340" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 526F6F7400 DC8 "Root" \ 00000005 000000 DC8 0, 0, 0 Maximum stack usage in bytes: Function CSTACK -------- ------ AddToFList 24 CreateRootMenu 48 DrwImg 64 EditColors 12 EditCoordinates 16 FindFLISTtByN 8 FindFLISTtByNS 0 FindFiles 856 Free_FLIST 8 SavePath 60 filelist_menu_ghook 12 filelist_menu_iconhndl 28 filelist_menu_onkey 20 method0_2 92 method0_rect 64 method1_2 8 method1_rect 72 method2_2 8 method2_rect 8 method3_2 0 method3_rect 0 method4_2 0 method4_rect 0 method5_2 28 method5_rect 20 method7_2 4 method7_rect 4 method8_2 0 method8_rect 0 method9_2 0 method9_rect 0 open_select_file_gui 212 strcmp_nocase 0 Segment part sizes: Function/Label Bytes -------------- ----- Pointer 8 ? 28 DrwImg 92 ms_img 44 method0_rect 680 method1_rect 228 method2_rect 52 method3_rect 12 method4_rect 20 method5_rect 648 method7_rect 4 method8_rect 8 method9_rect 8 Canvas_1 52 EditCoordinates 192 method0_2 684 method1_2 32 method2_2 28 method3_2 12 method4_2 20 method5_2 528 method7_2 4 method8_2 8 method9_2 8 Canvas_2 52 EditColors 148 fltop 4 Free_FLIST 60 back 12 ??strcmp_nocase_0 48 AddToFList 176 FindFiles 384 FindFLISTtByNS 68 FindFLISTtByN 84 SavePath 76 filelist_menu_onkey 256 filelist_menu_ghook 56 filelist_menu_iconhndl 208 filelist_HDR 192 fmenusoftkeys 12 fmenu_sk 24 fmenu_skt 8 CreateRootMenu 136 open_select_file_gui 264 ??DataTable1 4 ??DataTable3 4 ??DataTable6 4 ? 44 ? 192 ? 12 ? 24 ? 8 ? 8 ? 8 ? 2 ? 20 ? 8 ? 8 Others 168 5 388 bytes in segment CODE 206 bytes in segment DATA_C 280 bytes in segment DATA_I 280 bytes in segment DATA_ID 4 bytes in segment DATA_Z 24 bytes in segment INITTAB 5 244 bytes of CODE memory (+ 168 bytes shared) 486 bytes of CONST memory 284 bytes of DATA memory Errors: none Warnings: none