############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 14/May/2008 12:49:22 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\googlecode\MyMenu2\MyMenu2_Editor\open_ # # select_file.c # # Command line = D:\Pasha\elf\googlecode\MyMenu2\MyMenu2_Editor\open_ # # select_file.c -D NEWSGOLD -D ELKA -lC # # D:\Pasha\elf\googlecode\MyMenu2\MyMenu2_Editor\Relea # # se\List\ -o D:\Pasha\elf\googlecode\MyMenu2\MyMenu2_ # # Editor\Release\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\googlecode\MyMenu2\MyMenu2_Editor\Relea # # se\List\open_select_file.lst # # Object file = D:\Pasha\elf\googlecode\MyMenu2\MyMenu2_Editor\Relea # # se\Obj\open_select_file.r79 # # # # # ############################################################################## D:\Pasha\elf\googlecode\MyMenu2\MyMenu2_Editor\open_select_file.c 1 #include "swilib.h" 2 #include "rect_patcher.h" 3 #include "lang.h" 4 #include "type.h" 5 \ In segment DATA_Z, align 4, align-sorted 6 volatile FLIST *fltop; \ fltop: \ 00000000 DS8 4 7 \ In segment CODE, align 4, keep-with-next 8 void Free_FLIST(void) 9 { \ Free_FLIST: \ 00000000 10402DE9 PUSH {R4,LR} 10 LockSched(); \ 00000004 460100EF SWI +326 11 FLIST *fl=(FLIST *)fltop; \ 00000008 ........ LDR R0,??DataTable2 ;; fltop 12 fltop=0; \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 004090E5 LDR R4,[R0, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 13 UnlockSched(); \ 00000018 470100EF SWI +327 \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} 14 while(fl) 15 { 16 FLIST *fl_prev=fl; \ ??Free_FLIST_0: \ 00000024 0400A0E1 MOV R0,R4 17 fl=fl->next; \ 00000028 004094E5 LDR R4,[R4, #+0] 18 mfree(fl_prev); \ 0000002C 150000EF SWI +21 19 } \ 00000030 000054E3 CMP R4,#+0 \ 00000034 FAFFFF1A BNE ??Free_FLIST_0 20 } \ 00000038 1080BDE8 POP {R4,PC} ;; return 21 22 enum TYPES {IS_BACK, IS_FOLDER, IS_FILE}; \ In segment DATA_C, align 4, align-sorted 23 const char back[]=".."; \ back: \ 00000000 2E2E00 DC8 ".." \ 00000003 00 DC8 0 \ 00000004 524F4F5400 DC8 "ROOT" \ 00000009 000000 DC8 0, 0, 0 24 25 \ In segment CODE, align 4, keep-with-next 26 int strcmp_nocase(const char *s, const char *d) 27 { 28 int cs; 29 int ds; 30 do 31 { 32 cs=*s++; \ strcmp_nocase: \ ??strcmp_nocase_0: \ 00000000 ........ LDRB R2,[R0], #+1 33 if (cs&0x40) cs&=0xDF; 34 ds=*d++; \ 00000004 ........ LDRB R3,[R1], #+1 \ 00000008 400012E3 TST R2,#0x40 \ 0000000C DF200212 ANDNE R2,R2,#0xDF 35 if (ds&0x40) ds&=0xDF; \ 00000010 400013E3 TST R3,#0x40 \ 00000014 DF300312 ANDNE R3,R3,#0xDF 36 cs-=ds; \ 00000018 032052E0 SUBS R2,R2,R3 37 if (cs) break; \ 0000001C 0100001A BNE ??strcmp_nocase_1 38 } 39 while(ds); \ 00000020 000053E3 CMP R3,#+0 \ 00000024 F5FFFF1A BNE ??strcmp_nocase_0 40 return(cs); \ ??strcmp_nocase_1: \ 00000028 0200A0E1 MOV R0,R2 \ 0000002C 1EFF2FE1 BX LR ;; return 41 } 42 \ In segment CODE, align 4, keep-with-next 43 FLIST *AddToFList(const char* full_name, const char *name, int is_folder) 44 { \ AddToFList: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0050A0E1 MOV R5,R0 \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 0270A0E1 MOV R7,R2 45 int l_fname; 46 FLIST *fl; 47 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 48 fn->fullname=(char *)fn+sizeof(FLIST); \ 00000030 100084E2 ADD R0,R4,#+16 \ 00000034 080084E5 STR R0,[R4, #+8] 49 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] 50 strcpy(fn->fullname,full_name); \ 00000044 080094E5 LDR R0,[R4, #+8] \ 00000048 0510A0E1 MOV R1,R5 51 strcpy(fn->name,name); 52 fn->is_folder=is_folder; 53 fn->next=0; 54 fl=(FLIST *)fltop; \ 0000004C ........ LDR R5,??DataTable2 ;; 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] 55 if (fl) \ 00000070 000056E3 CMP R6,#+0 \ 00000074 0A00000A BEQ ??AddToFList_0 56 { 57 FLIST *pr; 58 pr=(FLIST *)&fltop; \ 00000078 0C7094E5 LDR R7,[R4, #+12] 59 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 60 { 61 pr=fl; \ 00000090 0650A0E1 MOV R5,R6 62 fl=fl->next; \ 00000094 006096E5 LDR R6,[R6, #+0] 63 if (!fl) break; \ 00000098 000056E3 CMP R6,#+0 \ 0000009C F6FFFF1A BNE ??AddToFList_1 64 } 65 fn->next=fl; \ ??AddToFList_2: \ 000000A0 006084E5 STR R6,[R4, #+0] 66 pr->next=fn; 67 } 68 else 69 { 70 fltop=fn; \ ??AddToFList_0: \ 000000A4 004085E5 STR R4,[R5, #+0] 71 } 72 return (fn); \ 000000A8 0400A0E1 MOV R0,R4 \ 000000AC F081BDE8 POP {R4-R8,PC} ;; return 73 } 74 \ In segment CODE, align 4, keep-with-next 75 int FindFiles(char *str, int type) // type == 0 SelectFolder, type == 1 SelectFile 76 { \ FindFiles: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 C8D04DE2 SUB SP,SP,#+200 \ 00000008 40DE4DE2 SUB SP,SP,#+1024 \ 0000000C 0140A0E1 MOV R4,R1 77 DIR_ENTRY de; 78 unsigned int err; 79 char *rev,*s,*d; 80 int i, c, n=0; 81 char path[256]; 82 char name[128]; 83 84 strcpy(path,str); \ 00000010 0010A0E1 MOV R1,R0 \ 00000014 D20F8DE2 ADD R0,SP,#+840 \ 00000018 1A0000EF SWI +26 85 Free_FLIST(); \ 0000001C ........ BL Free_FLIST 86 s=path; \ 00000020 D20F8DE2 ADD R0,SP,#+840 87 d=name; \ 00000024 48108DE2 ADD R1,SP,#+72 \ 00000028 401E81E2 ADD R1,R1,#+1024 88 rev=0; \ 0000002C 0050A0E3 MOV R5,#+0 \ 00000030 0020A0E3 MOV R2,#+0 \ 00000034 050000EA B ??FindFiles_0 89 while((c=*s++)) 90 { 91 *d++=c; \ ??FindFiles_1: \ 00000038 ........ STRB R3,[R1], #+1 92 if (c=='\\' && *s!='\0') rev=d; \ 0000003C 5C0053E3 CMP R3,#+92 \ 00000040 0200001A BNE ??FindFiles_0 \ 00000044 0030D0E5 LDRB R3,[R0, #+0] \ 00000048 000053E3 CMP R3,#+0 \ 0000004C 0120A011 MOVNE R2,R1 93 } \ ??FindFiles_0: \ 00000050 ........ LDRB R3,[R0], #+1 \ 00000054 000053E3 CMP R3,#+0 \ 00000058 F6FFFF1A BNE ??FindFiles_1 94 if(rev==0) \ 0000005C 2C019FE5 LDR R0,??FindFiles_2 ;; back \ 00000060 000052E3 CMP R2,#+0 95 AddToFList("ROOT",back,IS_BACK); \ 00000064 0010A001 MOVEQ R1,R0 \ 00000068 04008002 ADDEQ R0,R0,#+4 \ 0000006C 0400000A BEQ ??FindFiles_3 96 else 97 { 98 *rev=0; \ 00000070 0050C2E5 STRB R5,[R2, #+0] 99 AddToFList(name,back,IS_BACK); \ 00000074 0020A0E3 MOV R2,#+0 \ 00000078 0010A0E1 MOV R1,R0 \ 0000007C 48008DE2 ADD R0,SP,#+72 \ 00000080 400E80E2 ADD R0,R0,#+1024 \ ??FindFiles_3: \ 00000084 ........ BL AddToFList 100 } 101 n++; \ 00000088 0160A0E3 MOV R6,#+1 102 103 104 i=strlen(path); \ 0000008C D20F8DE2 ADD R0,SP,#+840 \ 00000090 1B0000EF SWI +27 \ 00000094 0090A0E1 MOV R9,R0 105 path[i++]='*'; \ 00000098 D20F8DE2 ADD R0,SP,#+840 \ 0000009C 000089E0 ADD R0,R9,R0 \ 000000A0 2A10A0E3 MOV R1,#+42 \ 000000A4 0010C0E5 STRB R1,[R0, #+0] 106 path[i]='\0'; \ 000000A8 0150C0E5 STRB R5,[R0, #+1] 107 if (FindFirstFile(&de,path,&err)) \ 000000AC 0D20A0E1 MOV R2,SP \ 000000B0 D21F8DE2 ADD R1,SP,#+840 \ 000000B4 04008DE2 ADD R0,SP,#+4 \ 000000B8 6B0000EF SWI +107 \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 5C70A0E3 MOV R7,#+92 \ 000000C4 2A00000A BEQ ??FindFiles_4 108 { 109 do 110 { 111 i=strlen(de.folder_name); \ ??FindFiles_5: \ 000000C8 38008DE2 ADD R0,SP,#+56 \ 000000CC 1B0000EF SWI +27 \ 000000D0 0090A0E1 MOV R9,R0 112 strcpy(path,de.folder_name); \ 000000D4 38108DE2 ADD R1,SP,#+56 \ 000000D8 D20F8DE2 ADD R0,SP,#+840 \ 000000DC 1A0000EF SWI +26 113 path[i++]='\\'; \ 000000E0 D20F8DE2 ADD R0,SP,#+840 \ 000000E4 000089E0 ADD R0,R9,R0 \ 000000E8 ........ STRB R7,[R0], #+1 114 strcpy(path+i,de.file_name); \ 000000EC B9108DE2 ADD R1,SP,#+185 \ 000000F0 1A0000EF SWI +26 115 if (de.file_attr&FA_DIRECTORY) \ 000000F4 F003DDE1 LDRSH R0,[SP, #+48] \ 000000F8 018086E2 ADD R8,R6,#+1 \ 000000FC 100010E3 TST R0,#0x10 \ 00000100 0F00000A BEQ ??FindFiles_6 116 { 117 i=strlen(path); \ 00000104 D20F8DE2 ADD R0,SP,#+840 \ 00000108 1B0000EF SWI +27 \ 0000010C 0090A0E1 MOV R9,R0 118 path[i++]='\\'; \ 00000110 D20F8DE2 ADD R0,SP,#+840 \ 00000114 000089E0 ADD R0,R9,R0 \ 00000118 0070C0E5 STRB R7,[R0, #+0] 119 path[i]=0; \ 0000011C 0150C0E5 STRB R5,[R0, #+1] 120 name[0]='\\'; \ 00000120 4874CDE5 STRB R7,[SP, #+1096] 121 strcpy(name+1,de.file_name); \ 00000124 B9108DE2 ADD R1,SP,#+185 \ 00000128 49008DE2 ADD R0,SP,#+73 \ 0000012C 400E80E2 ADD R0,R0,#+1024 \ 00000130 1A0000EF SWI +26 122 AddToFList(path,name,IS_FOLDER); \ 00000134 0120A0E3 MOV R2,#+1 \ 00000138 48108DE2 ADD R1,SP,#+72 \ 0000013C 401E81E2 ADD R1,R1,#+1024 \ 00000140 030000EA B ??FindFiles_7 123 n++; 124 } 125 else 126 { 127 if (type!=0) \ ??FindFiles_6: \ 00000144 000054E3 CMP R4,#+0 \ 00000148 0400000A BEQ ??FindFiles_8 128 { 129 AddToFList(path,de.file_name,IS_FILE); \ 0000014C 0220A0E3 MOV R2,#+2 \ 00000150 B9108DE2 ADD R1,SP,#+185 \ ??FindFiles_7: \ 00000154 D20F8DE2 ADD R0,SP,#+840 \ 00000158 ........ BL AddToFList 130 n++; \ 0000015C 0860A0E1 MOV R6,R8 131 } 132 } 133 } 134 while(FindNextFile(&de,&err)); \ ??FindFiles_8: \ 00000160 0D10A0E1 MOV R1,SP \ 00000164 04008DE2 ADD R0,SP,#+4 \ 00000168 6C0000EF SWI +108 \ 0000016C 000050E3 CMP R0,#+0 \ 00000170 D4FFFF1A BNE ??FindFiles_5 135 } 136 FindClose(&de,&err); \ ??FindFiles_4: \ 00000174 0D10A0E1 MOV R1,SP \ 00000178 04008DE2 ADD R0,SP,#+4 \ 0000017C 6D0000EF SWI +109 137 return n; \ 00000180 0600A0E1 MOV R0,R6 \ 00000184 C8D08DE2 ADD SP,SP,#+200 \ 00000188 40DE8DE2 ADD SP,SP,#+1024 \ 0000018C F083BDE8 POP {R4-R9,PC} ;; return \ ??FindFiles_2: \ 00000190 ........ DC32 back 138 } 139 140 141 \ In segment CODE, align 4, keep-with-next 142 FLIST *FindFLISTtByNS(int *i, int si) 143 { 144 FLIST *fl; 145 fl=(FLIST *)fltop; \ FindFLISTtByNS: \ 00000000 ........ LDR R2,??DataTable2 ;; fltop \ 00000004 010000EA B ??FindFLISTtByNS_0 146 while(fl) 147 { 148 if (fl->is_folder==si) 149 { 150 if (!(*i)) return (fl); 151 (*i)--; \ ??FindFLISTtByNS_1: \ 00000008 013043E2 SUB R3,R3,#+1 \ 0000000C 003080E5 STR R3,[R0, #+0] 152 } 153 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 154 } 155 return fl; \ ??FindFLISTtByNS_2: \ 0000003C 0000A0E3 MOV R0,#+0 \ 00000040 1EFF2FE1 BX LR ;; return 156 } 157 \ In segment CODE, align 4, keep-with-next 158 FLIST *FindFLISTtByN(int n) 159 { \ FindFLISTtByN: \ 00000000 01402DE9 PUSH {R0,LR} 160 FLIST *fl; 161 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} 162 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} 163 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} 164 return fl; 165 } 166 \ In segment CODE, align 4, keep-with-next 167 void SavePath(void *ed_gui, FLIST *fl) 168 { \ SavePath: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 169 EDITCONTROL ec; 170 EDIT_ExtractFocusedControl(ed_gui,&ec); \ 00000010 0D10A0E1 MOV R1,SP \ 00000014 C60100EF SWI +454 171 WSHDR *ws=AllocWS(ec.maxlen); \ 00000018 F801DDE1 LDRSH R0,[SP, #+24] \ 0000001C 250100EF SWI +293 172 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 173 EDIT_SetTextToFocused(ed_gui,ws); \ 00000030 0610A0E1 MOV R1,R6 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 810100EF SWI +385 174 FreeWS(ws); \ 0000003C 0600A0E1 MOV R0,R6 \ 00000040 290100EF SWI +297 175 } \ 00000044 2CD08DE2 ADD SP,SP,#+44 \ 00000048 7080BDE8 POP {R4-R6,PC} ;; return 176 177 178 char header[128]; \ In segment CODE, align 4, keep-with-next 179 int filelist_menu_onkey(void *data, GUI_MSG *msg) 180 { \ filelist_menu_onkey: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0170A0E1 MOV R7,R1 181 FVIEW *fview=MenuGetUserPointer(data); \ 0000000C E00100EF SWI +480 \ 00000010 0050A0E1 MOV R5,R0 182 FLIST *fl; 183 int i, n; 184 i=GetCurMenuItem(data); \ 00000014 0400A0E1 MOV R0,R4 \ 00000018 8F0100EF SWI +399 185 fl=FindFLISTtByN(i); \ 0000001C ........ BL FindFLISTtByN \ 00000020 0060A0E1 MOV R6,R0 186 187 if (msg->keys==0x3D) \ 00000024 F200D7E1 LDRSH R0,[R7, #+2] \ 00000028 3D0050E3 CMP R0,#+61 \ 0000002C 2400001A BNE ??filelist_menu_onkey_0 188 { 189 if (fl) \ 00000030 000056E3 CMP R6,#+0 \ 00000034 2000000A BEQ ??filelist_menu_onkey_1 190 { 191 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 192 { 193 int len; 194 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 195 { 196 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 197 len=strlen(fl->fullname); \ 00000070 080096E5 LDR R0,[R6, #+8] \ 00000074 1B0000EF SWI +27 198 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] 199 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 200 } 201 else 202 { 203 int CreateRootMenu(); 204 n=CreateRootMenu(); \ ??filelist_menu_onkey_4: \ 0000009C ........ BL CreateRootMenu \ ??filelist_menu_onkey_5: \ 000000A0 0010A0E1 MOV R1,R0 205 } 206 Menu_SetItemCountDyn(data,n); \ 000000A4 0400A0E1 MOV R0,R4 \ 000000A8 E60100EF SWI +486 207 SetCursorToMenuItem(data, 0); \ 000000AC 0010A0E3 MOV R1,#+0 \ 000000B0 0400A0E1 MOV R0,R4 \ 000000B4 C40100EF SWI +452 208 RefreshGUI(); \ 000000B8 960100EF SWI +406 209 } 210 else 211 { 212 SavePath(fview->gui,fl); 213 return (1); 214 } 215 } 216 // GeneralFunc_F1(1); 217 return(-1); \ ??filelist_menu_onkey_1: \ 000000BC 0000E0E3 MVN R0,#+0 \ 000000C0 F080BDE8 POP {R4-R7,PC} 218 } 219 if (msg->keys==0x18) \ ??filelist_menu_onkey_0: \ 000000C4 180050E3 CMP R0,#+24 \ 000000C8 0800001A BNE ??filelist_menu_onkey_6 220 { 221 if (fl) \ 000000CC 000056E3 CMP R6,#+0 222 { 223 if (fl->is_folder!=IS_BACK) \ 000000D0 04009615 LDRNE R0,[R6, #+4] \ 000000D4 00005013 CMPNE R0,#+0 \ 000000D8 F7FFFF0A BEQ ??filelist_menu_onkey_1 224 { 225 SavePath(fview->gui,fl); 226 return (1); 227 } 228 } 229 return (-1); 230 } \ ??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} 231 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 232 } 233 \ In segment CODE, align 4, keep-with-next 234 void filelist_menu_ghook(void *data, int cmd) 235 { \ filelist_menu_ghook: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0140A0E1 MOV R4,R1 236 FVIEW *fview=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0050A0E1 MOV R5,R0 237 if (cmd==3) \ 00000010 030054E3 CMP R4,#+3 \ 00000014 0300001A BNE ??filelist_menu_ghook_0 238 { 239 Free_FLIST(); \ 00000018 ........ BL Free_FLIST 240 mfree(fview); \ 0000001C 0500A0E1 MOV R0,R5 \ 00000020 150000EF SWI +21 \ 00000024 3080BDE8 POP {R4,R5,PC} 241 } 242 if (cmd==0x0A) \ ??filelist_menu_ghook_0: \ 00000028 0A0054E3 CMP R4,#+10 \ 0000002C 3080BD18 POPNE {R4,R5,PC} 243 { 244 DisableIDLETMR(); \ 00000030 7F0100EF SWI +383 245 } 246 } \ 00000034 3080BDE8 POP {R4,R5,PC} ;; return 247 \ In segment CODE, align 4, keep-with-next 248 void filelist_menu_iconhndl(void *data, int curitem, void *user_pointer) 249 { \ filelist_menu_iconhndl: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 250 FLIST *fl; 251 WSHDR *ws; 252 void *item=AllocMenuItem(data); \ 0000000C 970100EF SWI +407 \ 00000010 0060A0E1 MOV R6,R0 253 int len; 254 fl=FindFLISTtByN(curitem); \ 00000014 0500A0E1 MOV R0,R5 \ 00000018 ........ BL FindFLISTtByN \ 0000001C 0070B0E1 MOVS R7,R0 255 if (fl) \ 00000020 1D00000A BEQ ??filelist_menu_iconhndl_0 256 { 257 len=strlen(fl->name); \ 00000024 0C0097E5 LDR R0,[R7, #+12] \ 00000028 1B0000EF SWI +27 \ 0000002C 0080A0E1 MOV R8,R0 258 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 259 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 260 { 261 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 262 wsInsertChar(ws,0x0002,1); \ 00000060 0120A0E3 MOV R2,#+1 \ 00000064 0210A0E3 MOV R1,#+2 \ 00000068 0900A0E1 MOV R0,R9 \ 0000006C 1D0000EF SWI +29 263 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 0B0000EA B ??filelist_menu_iconhndl_2 264 } 265 else 266 { 267 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 060000EA B ??filelist_menu_iconhndl_2 268 } 269 } 270 else 271 { 272 ws=AllocMenuWS(data,10); \ ??filelist_menu_iconhndl_0: \ 0000009C 0A10A0E3 MOV R1,#+10 \ 000000A0 0400A0E1 MOV R0,R4 \ 000000A4 980100EF SWI +408 273 wsprintf(ws, _percent_t, ERR_STR); \ 000000A8 24209FE5 LDR R2,??filelist_menu_iconhndl_3+0x4 ;; `?` \ 000000AC 0090A0E1 MOV R9,R0 \ 000000B0 061F8FE2 ADR R1,??filelist_menu_iconhndl_3 ;; "%t" \ 000000B4 240100EF SWI +292 274 } 275 SetMenuItemText(data, item, ws, curitem); \ ??filelist_menu_iconhndl_2: \ 000000B8 0530A0E1 MOV R3,R5 \ 000000BC 0920A0E1 MOV R2,R9 \ 000000C0 0610A0E1 MOV R1,R6 \ 000000C4 0400A0E1 MOV R0,R4 \ 000000C8 9A0100EF SWI +410 276 } \ 000000CC F083BDE8 POP {R4-R9,PC} ;; return \ ??filelist_menu_iconhndl_3: \ 000000D0 25740000 DC8 "%t",+0 \ 000000D4 ........ DC32 `?` \ In segment DATA_I, align 4, align-sorted 277 278 int fmenusoftkeys[]={0,1,2}; 279 SOFTKEY_DESC fmenu_sk[]= 280 { 281 {0x0018,0x0000,(int)LGP_SELECT}, 282 {0x0001,0x0000,(int)LGP_EXIT}, 283 {0x003D,0x0000,(int)"+"} 284 }; 285 286 SOFTKEYSTAB fmenu_skt= 287 { 288 fmenu_sk,0 289 }; 290 291 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 `?` 292 293 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 `?` 294 { 295 8,filelist_menu_onkey,filelist_menu_ghook,NULL, 296 fmenusoftkeys, 297 &fmenu_skt, 298 0x10, 299 filelist_menu_iconhndl, 300 NULL, //Items 301 NULL, //Procs 302 0 //n 303 }; 304 \ In segment CODE, align 4, keep-with-next 305 int CreateRootMenu() 306 { \ CreateRootMenu: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 24D04DE2 SUB SP,SP,#+36 307 char path[32]; 308 unsigned int err; 309 int n=0; \ 00000008 0040A0E3 MOV R4,#+0 310 Free_FLIST(); 311 for (int i=0; i!=5; i++) \ 0000000C 0050A0E3 MOV R5,#+0 \ 00000010 ........ BL Free_FLIST 312 { 313 path[0]=i+'0'; \ ??CreateRootMenu_0: \ 00000014 301085E2 ADD R1,R5,#+48 \ 00000018 0410CDE5 STRB R1,[SP, #+4] 314 path[1]=':'; \ 0000001C 3A10A0E3 MOV R1,#+58 \ 00000020 0510CDE5 STRB R1,[SP, #+5] 315 path[2]='\\'; \ 00000024 5C10A0E3 MOV R1,#+92 \ 00000028 0610CDE5 STRB R1,[SP, #+6] 316 path[3]=0; \ 0000002C 0010A0E3 MOV R1,#+0 \ 00000030 0710CDE5 STRB R1,[SP, #+7] 317 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 318 { 319 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 320 n++; \ 00000058 014084E2 ADD R4,R4,#+1 321 } 322 } \ ??CreateRootMenu_1: \ 0000005C 015085E2 ADD R5,R5,#+1 \ 00000060 050055E3 CMP R5,#+5 \ 00000064 EAFFFF1A BNE ??CreateRootMenu_0 323 strcpy(header,"Root"); \ 00000068 10109FE5 LDR R1,??CreateRootMenu_2 ;; `?` \ 0000006C 10009FE5 LDR R0,??CreateRootMenu_2+0x4 ;; filelist_HDR + 20 \ 00000070 1A0000EF SWI +26 324 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 325 } 326 327 \ In segment CODE, align 4, keep-with-next 328 void open_select_file_gui(void *ed_gui, int type) 329 { \ 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 330 EDITCONTROL ec; 331 FVIEW *fview; 332 char path[128]; 333 char *s, *rev=0; \ 00000010 0040A0E3 MOV R4,#+0 \ 00000014 0070A0E3 MOV R7,#+0 334 int n, c, len; 335 336 fview=malloc(sizeof(FVIEW)); \ 00000018 0800A0E3 MOV R0,#+8 \ 0000001C 140000EF SWI +20 \ 00000020 0050A0E1 MOV R5,R0 337 fview->gui=ed_gui; \ 00000024 008085E5 STR R8,[R5, #+0] 338 fview->type=type; \ 00000028 046085E5 STR R6,[R5, #+4] 339 EDIT_ExtractFocusedControl(ed_gui,&ec); \ 0000002C 80108DE2 ADD R1,SP,#+128 \ 00000030 0800A0E1 MOV R0,R8 \ 00000034 C60100EF SWI +454 340 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 341 s=path; \ 00000048 0D00A0E1 MOV R0,SP \ 0000004C 040000EA B ??open_select_file_gui_0 342 while((c=*s++)) 343 { 344 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 345 } \ ??open_select_file_gui_0: \ 00000064 ........ LDRB R1,[R0], #+1 \ 00000068 000051E3 CMP R1,#+0 \ 0000006C F7FFFF1A BNE ??open_select_file_gui_1 346 if (!rev) \ 00000070 98809FE5 LDR R8,??open_select_file_gui_2 ;; filelist_HDR \ 00000074 000057E3 CMP R7,#+0 \ 00000078 0100001A BNE ??open_select_file_gui_3 347 n=CreateRootMenu(); \ 0000007C ........ BL CreateRootMenu \ 00000080 0D0000EA B ??open_select_file_gui_4 348 else 349 { 350 *rev=0; \ ??open_select_file_gui_3: \ 00000084 0040C7E5 STRB R4,[R7, #+0] 351 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 352 len=strlen(path); \ 00000098 0D00A0E1 MOV R0,SP \ 0000009C 1B0000EF SWI +27 353 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] 354 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 355 } 356 patch_header(&filelist_HDR); \ 000000C0 B040C8E1 STRH R4,[R8, #+0] \ 000000C4 1800A0E3 MOV R0,#+24 \ 000000C8 B200C8E1 STRH R0,[R8, #+2] \ 000000CC 888100EF SWI +33160 \ 000000D0 010040E2 SUB R0,R0,#+1 \ 000000D4 B400C8E1 STRH R0,[R8, #+4] \ 000000D8 8A8100EF SWI +33162 \ 000000DC 170080E2 ADD R0,R0,#+23 \ 000000E0 B600C8E1 STRH R0,[R8, #+6] 357 CreateMenu(0,0,&filelist_STRUCT,&filelist_HDR,0,n,fview,0); \ 000000E4 0000A0E3 MOV R0,#+0 \ 000000E8 01002DE9 PUSH {R0} \ 000000EC 20002DE9 PUSH {R5} \ 000000F0 40002DE9 PUSH {R6} \ 000000F4 01002DE9 PUSH {R0} \ 000000F8 0830A0E1 MOV R3,R8 \ 000000FC 942088E2 ADD R2,R8,#+148 \ 00000100 0010A0E1 MOV R1,R0 \ 00000104 520100EF SWI +338 358 } \ 00000108 BCD08DE2 ADD SP,SP,#+188 \ 0000010C F081BDE8 POP {R4-R8,PC} ;; return \ ??open_select_file_gui_2: \ 00000110 ........ DC32 filelist_HDR \ In segment CODE, align 4, keep-with-next \ ??DataTable2: \ 00000000 ........ DC32 fltop \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 00000000.... DC32 0H, header, 2147483647 \ ....FFFFFF7F \ `?`: \ 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 4578697400 DC8 "Exit" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 1, align-sorted \ `?`: \ 00000000 2B00 DC8 "+" \ In segment DATA_C, align 1, align-sorted \ 00000000 257400 DC8 "%t" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4552522100 DC8 "ERR!" \ 00000005 000000 DC8 0, 0, 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 FindFLISTtByN 8 FindFLISTtByNS 0 FindFiles 1252 Free_FLIST 8 SavePath 60 filelist_menu_ghook 12 filelist_menu_iconhndl 28 filelist_menu_onkey 20 open_select_file_gui 212 strcmp_nocase 0 Segment part sizes: Function/Label Bytes -------------- ----- fltop 4 Free_FLIST 60 back 12 ??strcmp_nocase_0 48 AddToFList 176 FindFiles 404 FindFLISTtByNS 68 FindFLISTtByN 84 SavePath 76 filelist_menu_onkey 256 filelist_menu_ghook 56 filelist_menu_iconhndl 216 filelist_HDR 192 fmenusoftkeys 12 fmenu_sk 24 fmenu_skt 8 CreateRootMenu 136 open_select_file_gui 276 ??DataTable2 4 ? 192 ? 12 ? 24 ? 8 ? 8 ? 8 ? 2 ? 3 ? 8 ? 8 Others 72 1 908 bytes in segment CODE 49 bytes in segment DATA_C 236 bytes in segment DATA_I 236 bytes in segment DATA_ID 4 bytes in segment DATA_Z 24 bytes in segment INITTAB 1 860 bytes of CODE memory (+ 72 bytes shared) 285 bytes of CONST memory 240 bytes of DATA memory Errors: none Warnings: none