############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 26/Jan/2009 21:19:42 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = G:\Pasha\elf\_MY_PROJECT_\runfunc\main.c # # Command line = G:\Pasha\elf\_MY_PROJECT_\runfunc\main.c -D # # NEWSGOLD -D ELKA -D BCFG --preprocess # # G:\Pasha\elf\_MY_PROJECT_\runfunc\ELKA2\List\ -lC # # G:\Pasha\elf\_MY_PROJECT_\runfunc\ELKA2\List\ -o # # G:\Pasha\elf\_MY_PROJECT_\runfunc\ELKA2\Obj\ -s9 # # --no_unroll --cpu_mode arm --endian little --cpu # # ARM926EJ-S --stack_align 4 --interwork -e --fpu # # None --dlib_config "G:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\LIB\dl5tpainl8n.h" -I # # "G:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\INC\" --inline_threshold=2 # # List file = G:\Pasha\elf\_MY_PROJECT_\runfunc\ELKA2\List\main.ls # # t # # Object file = G:\Pasha\elf\_MY_PROJECT_\runfunc\ELKA2\Obj\main.r79 # # # # # ############################################################################## G:\Pasha\elf\_MY_PROJECT_\runfunc\main.c 1 #include "../inc/swilib.h" 2 \ In segment CODE, align 4, keep-with-next 3 void run(void *func) 4 { \ run: \ 00000000 00402DE9 PUSH {LR} 5 void (*runaddr)(void); 6 runaddr=(void (*)())func; 7 if (runaddr) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0080BD08 POPEQ {PC} 8 { 9 runaddr(); \ 0000000C 30FF2FE1 BLX R0 10 } 11 } \ 00000010 0080BDE8 POP {PC} ;; return 12 \ In segment CODE, align 4, keep-with-next 13 void ff() 14 { 15 ShowMSG(1,(int)"test"); \ ff: \ 00000000 0C109FE5 LDR R1,??ff_0 ;; `?` \ 00000004 00402DE9 PUSH {LR} \ 00000008 0100A0E3 MOV R0,#+1 \ 0000000C 480100EF SWI +328 16 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??ff_0: \ 00000014 ........ DC32 `?` 17 18 19 20 typedef int (*func)(); 21 22 typedef struct 23 { 24 char name[32]; 25 func run; 26 IMGHDR *img;//картинка меню 27 int h; //высота картинки 28 int checkbox; 29 int flag; 30 void *next; 31 }MAINMENU; 32 \ In segment DATA_Z, align 4, align-sorted 33 static MAINMENU *mmtop; \ mmtop: \ 00000000 DS8 4 34 \ In segment CODE, align 4, keep-with-next 35 void AddMenuItem(char *name,func myfunc,IMGHDR *img,int checkbox,int flag) 36 { \ AddMenuItem: \ 00000000 10402DE9 PUSH {R4,LR} 37 MAINMENU *m = malloc(sizeof(MAINMENU)); \ 00000004 3800A0E3 MOV R0,#+56 \ 00000008 0140A0E1 MOV R4,R1 \ 0000000C 140000EF SWI +20 38 //strncpy(m->name,name, 32); 39 // m->img = img; 40 // m->h = img->h; 41 m->run = myfunc; 42 // m->checkbox = checkbox; 43 // m->flag = flag; 44 45 if(!mmtop) \ 00000010 ........ LDR R1,??DataTable2 ;; mmtop \ 00000014 204080E5 STR R4,[R0, #+32] \ 00000018 002091E5 LDR R2,[R1, #+0] \ 0000001C 000052E3 CMP R2,#+0 46 { 47 mmtop = m; \ 00000020 00008105 STREQ R0,[R1, #+0] \ 00000024 1080BD08 POPEQ {R4,PC} 48 } 49 else 50 { 51 MAINMENU *mm = mmtop; \ 00000028 341092E5 LDR R1,[R2, #+52] \ 0000002C 000051E3 CMP R1,#+0 \ 00000030 0300000A BEQ ??AddMenuItem_0 52 while(mm->next) mm = mm->next; \ ??AddMenuItem_1: \ 00000034 342092E5 LDR R2,[R2, #+52] \ 00000038 341092E5 LDR R1,[R2, #+52] \ 0000003C 000051E3 CMP R1,#+0 \ 00000040 FBFFFF1A BNE ??AddMenuItem_1 53 mm->next = m; \ ??AddMenuItem_0: \ 00000044 340082E5 STR R0,[R2, #+52] 54 } 55 } \ 00000048 1080BDE8 POP {R4,PC} ;; return 56 57 static MAINMENU *GetItem(int curitem) 58 { 59 MAINMENU *mm = mmtop; 60 int i=0; 61 62 while(mm/*->next && ((i++) <= curitem)*/) 63 { 64 if(i==curitem) return mm; 65 i++; 66 if(mm->next) mm = mm->next; 67 else return 0; 68 } 69 return 0;// ((i==j) ? (mm) : (0)); 70 } 71 \ In segment CODE, align 4, keep-with-next 72 void FreeList() 73 { \ FreeList: \ 00000000 10402DE9 PUSH {R4,LR} 74 LockSched(); \ 00000004 460100EF SWI +326 75 MAINMENU *bmk=(MAINMENU *)mmtop; \ 00000008 ........ LDR R0,??DataTable2 ;; mmtop 76 mmtop=0; \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 004090E5 LDR R4,[R0, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 77 UnlockSched(); \ 00000018 470100EF SWI +327 \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} 78 while(bmk) 79 { 80 MAINMENU *bmk_prev = bmk; \ ??FreeList_0: \ 00000024 0400B0E1 MOVS R0,R4 81 bmk = bmk->next; \ 00000028 344094E5 LDR R4,[R4, #+52] 82 if(bmk_prev) mfree(bmk_prev); \ 0000002C 0000000A BEQ ??FreeList_1 \ 00000030 150000EF SWI +21 83 } \ ??FreeList_1: \ 00000034 000054E3 CMP R4,#+0 \ 00000038 F9FFFF1A BNE ??FreeList_0 84 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return 85 86 \ In segment CODE, align 4, keep-with-next 87 int CreateSCMenu() 88 { \ CreateSCMenu: \ 00000000 00402DE9 PUSH {LR} 89 ShowMSG(1,(int)"123"); \ 00000004 021F8FE2 ADR R1,??CreateSCMenu_0 ;; "123" \ 00000008 0100A0E3 MOV R0,#+1 \ 0000000C 480100EF SWI +328 90 } ^ Warning[Pe940]: missing return statement at end of non-void function "CreateSCMenu" \ 00000010 0080BDE8 POP {PC} ;; return \ ??CreateSCMenu_0: \ 00000014 31323300 DC8 "123" 91 \ In segment CODE, align 4, keep-with-next 92 int CreateSCMenu2() 93 { 94 ShowMSG(1,(int)"67890"); \ CreateSCMenu2: \ 00000000 0C109FE5 LDR R1,??CreateSCMenu2_0 ;; `?` \ 00000004 00402DE9 PUSH {LR} \ 00000008 0100A0E3 MOV R0,#+1 \ 0000000C 480100EF SWI +328 95 } ^ Warning[Pe940]: missing return statement at end of non-void function "CreateSCMenu2" \ 00000010 0080BDE8 POP {PC} ;; return \ ??CreateSCMenu2_0: \ 00000014 ........ DC32 `?` 96 97 static void Init() 98 { 99 // int i=0; 100 AddMenuItem("menutexts[i++]", CreateSCMenu, 0, 0,0); 101 AddMenuItem("menutexts2", CreateSCMenu2, 0, 0,0); 102 // AddMenuItem(menutexts[i++], CreateXSMenu, GetXIconByItem(CurrentXStatus), 0,0); 103 /* AddMenuItem(menutexts[i++], (func)CreateManageCLMenu, GetIconByItem(ICON_ADDCONTACT), 0,0); 104 105 //checkbox 106 AddMenuItem(menutexts[i++], AutoAwayMSG, 0, 1, away_m); 107 AddMenuItem(menutexts[i++], ChangeVibraMode, 0, 1, Is_Vibra_Enabled); 108 AddMenuItem(menutexts[i++], ChangeSoundMode, 0, 1, Is_Sounds_Enabled); 109 #ifdef ELKA 110 AddMenuItem(menutexts[i++], ChangeSLIMode, 0, 1, Is_SLI_On); 111 #endif 112 AddMenuItem(menutexts[i++], ChangeDoubleVibra, 0, 1, Is_Double_Vibra_On); 113 AddMenuItem(menutexts[i++], ChangePOPUPMode, 0, 1, Is_POPUP_On); 114 AddMenuItem(menutexts[i++], ChangeShowOfflineMode, 0, 1, Is_Show_Offline); 115 AddMenuItem(menutexts[i++], ChangeShowGroupsMode, 0, 1, Is_Show_Groups); 116 AddMenuItem(menutexts[i++], ChangeActiveUp, 0, 1, IsActiveUp); 117 // 118 119 AddMenuItem(menutexts[i++], EditConfig, GetIconByItem(ICON_SETTINGS), 0, 0); 120 AddMenuItem(menutexts[i++], Disconnect, GetIconByItem(IS_OFFLINE), 0, 0); 121 AddMenuItem(menutexts[i++], PingToServer, GetIconByItem(ICON_PING), 0, 0); 122 AddMenuItem(menutexts[i++], AboutDlg, GetIconByItem(IS_UNKNOWN), 0, 0); 123 */ 124 125 } 126 127 128 \ In segment DATA_Z, align 4, align-sorted 129 unsigned int MAINCSM_ID = 0; \ MAINCSM_ID: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 130 unsigned int MAINGUI_ID = 0; \ MAINGUI_ID: \ 00000000 DS8 4 131 132 typedef struct 133 { 134 CSM_RAM csm; 135 int gui_id; 136 }MAIN_CSM; 137 138 typedef struct 139 { 140 GUI gui; 141 WSHDR *ws1; 142 WSHDR *ws2; 143 int i1; 144 }MAIN_GUI; 145 \ In segment DATA_C, align 4, align-sorted 146 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 \ In segment DATA_Z, align 4, align-sorted 147 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 148 \ In segment DATA_Z, align 4, align-sorted 149 int my_csm_id=0; \ my_csm_id: \ 00000000 DS8 4 150 151 \ In segment CODE, align 4, keep-with-next 152 void MM_OnRedraw(MAIN_GUI *data) 153 { \ MM_OnRedraw: \ 00000000 10402DE9 PUSH {R4,LR} 154 // LockSched(); 155 // if(MMScreen.bitmap) DrwImage(&MMScreen,0,HeaderY+2,RET_Y); 156 DrawRoundedFrame(0,0,ScreenW()-1,ScreenH()-1,0,0,0,"\x00\x00\x00\x64","\x00\x00\x00\x64"); \ 00000004 898100EF SWI +33161 \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 888100EF SWI +33160 \ 00000010 30109FE5 LDR R1,??MM_OnRedraw_0 ;; `?` \ 00000014 013044E2 SUB R3,R4,#+1 \ 00000018 0120A0E1 MOV R2,R1 \ 0000001C 04002DE9 PUSH {R2} \ 00000020 02002DE9 PUSH {R1} \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 02002DE9 PUSH {R1} \ 0000002C 02002DE9 PUSH {R1} \ 00000030 02002DE9 PUSH {R1} \ 00000034 012040E2 SUB R2,R0,#+1 \ 00000038 0000A0E3 MOV R0,#+0 \ 0000003C 500100EF SWI +336 157 // UnlockSched(); 158 //DrawSoftKeys(LG_SELECT,LG_CLOSE); 159 // MM_DrawList(); 160 //if(isAbout) DrawAbout(); 161 } \ 00000040 14D08DE2 ADD SP,SP,#+20 \ 00000044 1080BDE8 POP {R4,PC} ;; return \ ??MM_OnRedraw_0: \ 00000048 ........ DC32 `?` 162 163 164 //------------------------------------------ 165 166 \ In segment CODE, align 4, keep-with-next 167 void MM_onCreate(MAIN_GUI *data, void *(*malloc_adr)(int)) 168 { 169 Init(); \ MM_onCreate: \ 00000000 50109FE5 LDR R1,??MM_onCreate_0 ;; CreateSCMenu \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 4C509FE5 LDR R5,??MM_onCreate_0+0x4 ;; `?` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 01002DE9 PUSH {R0} \ 00000018 0030A0E3 MOV R3,#+0 \ 0000001C 0020A0E1 MOV R2,R0 \ 00000020 0500A0E1 MOV R0,R5 \ 00000024 ........ BL AddMenuItem \ 00000028 30109FE5 LDR R1,??MM_onCreate_0+0x8 ;; CreateSCMenu2 \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 01002DE9 PUSH {R0} \ 00000034 0030A0E1 MOV R3,R0 \ 00000038 0020A0E1 MOV R2,R0 \ 0000003C 100085E2 ADD R0,R5,#+16 \ 00000040 ........ BL AddMenuItem 170 #ifdef ELKA 171 DisableIconBar(1); \ 00000044 0100A0E3 MOV R0,#+1 \ 00000048 3B0200EF SWI +571 172 #endif 173 data->gui.state=1; \ 0000004C 0100A0E3 MOV R0,#+1 \ 00000050 0C00C4E5 STRB R0,[R4, #+12] 174 } \ 00000054 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??MM_onCreate_0: \ 00000058 ........ DC32 CreateSCMenu \ 0000005C ........ DC32 `?` \ 00000060 ........ DC32 CreateSCMenu2 175 \ In segment CODE, align 4, keep-with-next 176 void MM_onClose(MAIN_GUI *data, void (*mfree_adr)(void *)) 177 { \ MM_onClose: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 178 FreeList(); \ 00000008 ........ BL FreeList 179 data->gui.state=0; \ 0000000C 0000A0E3 MOV R0,#+0 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 180 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 181 \ In segment CODE, align 4, keep-with-next 182 void MM_onFocus(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) 183 { \ MM_onFocus: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 184 #ifdef ELKA 185 DisableIconBar(1); \ 00000008 0100A0E3 MOV R0,#+1 \ 0000000C 3B0200EF SWI +571 186 #endif 187 188 data->gui.state=2; \ 00000010 0200A0E3 MOV R0,#+2 \ 00000014 0C00C4E5 STRB R0,[R4, #+12] 189 DisableIDLETMR(); \ 00000018 7F0100EF SWI +383 190 } \ 0000001C 1080BDE8 POP {R4,PC} ;; return 191 \ In segment CODE, align 4, keep-with-next 192 void MM_onUnfocus(MAIN_GUI *data, void (*mfree_adr)(void *)) 193 { 194 if (data->gui.state!=2) return; \ MM_onUnfocus: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 195 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 196 } \ 00000010 1EFF2FE1 BX LR ;; return 197 \ In segment CODE, align 4, keep-with-next 198 int MM_OnKey(MAIN_GUI *data, GUI_MSG *msg) 199 { \ MM_OnKey: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0140A0E1 MOV R4,R1 200 DirectRedrawGUI(); \ 0000000C 3F0100EF SWI +319 201 int k=msg->gbsmsg->submess; \ 00000010 040094E5 LDR R0,[R4, #+4] 202 203 if (msg->gbsmsg->msg==KEY_DOWN || msg->gbsmsg->msg==LONG_PRESS) \ 00000014 9330A0E3 MOV R3,#+147 \ 00000018 041090E5 LDR R1,[R0, #+4] \ 0000001C 082090E5 LDR R2,[R0, #+8] \ 00000020 403F83E3 ORR R3,R3,#0x100 \ 00000024 030051E1 CMP R1,R3 \ 00000028 0300000A BEQ ??MM_OnKey_0 \ 0000002C 0100A0E1 MOV R0,R1 \ 00000030 021083E2 ADD R1,R3,#+2 \ 00000034 010050E1 CMP R0,R1 \ 00000038 2400001A BNE ??MM_OnKey_1 204 { 205 switch(k) \ ??MM_OnKey_0: \ 0000003C ........ LDR R0,??DataTable2 ;; mmtop \ 00000040 90109FE5 LDR R1,??MM_OnKey_2 ;; `?` \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 0C2052E2 SUBS R2,R2,#+12 \ 0000004C 0400000A BEQ ??MM_OnKey_3 \ 00000050 252052E2 SUBS R2,R2,#+37 \ 00000054 0400000A BEQ ??MM_OnKey_4 \ 00000058 012052E2 SUBS R2,R2,#+1 \ 0000005C 1000000A BEQ ??MM_OnKey_5 \ 00000060 080000EA B ??MM_OnKey_6 206 { 207 case RED_BUTTON : return 1; \ ??MM_OnKey_3: \ 00000064 0100A0E3 MOV R0,#+1 \ 00000068 1280BDE8 POP {R1,R4,PC} 208 case '1' : 209 { 210 MAINMENU *m = GetItem(0); \ ??MM_OnKey_4: \ 0000006C 0020A0E3 MOV R2,#+0 \ ??MM_OnKey_7: \ 00000070 000050E3 CMP R0,#+0 \ 00000074 1300000A BEQ ??MM_OnKey_8 \ 00000078 000052E3 CMP R2,#+0 \ 0000007C 0300001A BNE ??MM_OnKey_9 211 if(m) (m->run)(); \ ??MM_OnKey_10: \ 00000080 200090E5 LDR R0,[R0, #+32] \ 00000084 30FF2FE1 BLX R0 \ ??MM_OnKey_6: \ 00000088 0000A0E3 MOV R0,#+0 \ 0000008C 1280BDE8 POP {R1,R4,PC} \ ??MM_OnKey_9: \ 00000090 340090E5 LDR R0,[R0, #+52] \ 00000094 012082E2 ADD R2,R2,#+1 \ 00000098 000050E3 CMP R0,#+0 \ 0000009C F3FFFF1A BNE ??MM_OnKey_7 212 else ShowMSG(1,(int)"Not found"); \ 000000A0 080000EA B ??MM_OnKey_8 213 }break; 214 case '2' : 215 { 216 MAINMENU *m = GetItem(1); \ ??MM_OnKey_5: \ 000000A4 0020A0E3 MOV R2,#+0 \ ??MM_OnKey_11: \ 000000A8 000050E3 CMP R0,#+0 \ 000000AC 0500000A BEQ ??MM_OnKey_8 \ 000000B0 010052E3 CMP R2,#+1 \ 000000B4 F1FFFF0A BEQ ??MM_OnKey_10 \ 000000B8 340090E5 LDR R0,[R0, #+52] \ 000000BC 012082E2 ADD R2,R2,#+1 \ 000000C0 000050E3 CMP R0,#+0 \ 000000C4 F7FFFF1A BNE ??MM_OnKey_11 217 if(m) (m->run)(); 218 else ShowMSG(1,(int)"Not found"); \ ??MM_OnKey_8: \ 000000C8 0100A0E3 MOV R0,#+1 \ 000000CC 480100EF SWI +328 219 }break; 220 } 221 } 222 223 if (msg->gbsmsg->msg==KEY_DOWN) 224 { 225 } 226 return(0); \ ??MM_OnKey_1: \ 000000D0 0000A0E3 MOV R0,#+0 \ 000000D4 1280BDE8 POP {R1,R4,PC} ;; return \ ??MM_OnKey_2: \ 000000D8 ........ DC32 `?` 227 } 228 229 extern void kill_data(void *p, void (*func_p)(void *)); 230 \ In segment CODE, align 4, keep-with-next 231 int MM_method8(void){return(0);} \ MM_method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return \ In segment CODE, align 4, keep-with-next 232 int MM_method9(void){return(0);} \ MM_method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 233 \ In segment DATA_C, align 4, align-sorted 234 static const void * const gui_methods[11]={ \ gui_methods: \ 00000000 ............ DC32 MM_OnRedraw, MM_onCreate, MM_onClose, MM_onFocus, MM_onUnfocus \ ............ \ ............ \ .... \ 00000014 ........0000 DC32 MM_OnKey, 0H, kill_data, MM_method8, MM_method9, 0H \ 0000........ \ ............ \ ....00000000 235 (void *)MM_OnRedraw, 236 (void *)MM_onCreate, 237 (void *)MM_onClose, 238 (void *)MM_onFocus, 239 (void *)MM_onUnfocus, 240 (void *)MM_OnKey, 241 0, 242 (void *)kill_data, 243 (void *)MM_method8, 244 (void *)MM_method9, 245 0 246 }; 247 248 249 const RECT Canvas={0,0,0,0}; \ Canvas: \ 0000002C 000000000000 DC16 0, 0, 0, 0 \ 0000 \ In segment CODE, align 4, keep-with-next 250 static void maincsm_oncreate(CSM_RAM *data) 251 { \ maincsm_oncreate: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 252 253 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000008 4000A0E3 MOV R0,#+64 \ 0000000C 140000EF SWI +20 \ 00000010 0050A0E1 MOV R5,R0 254 MAIN_CSM*csm=(MAIN_CSM*)data; 255 zeromem(main_gui,sizeof(MAIN_GUI)); \ 00000014 4010A0E3 MOV R1,#+64 \ 00000018 1D0100EF SWI +285 256 //patch_rect((RECT*)&Canvas,0,0,ScreenW()-1,ScreenH()-1); 257 main_gui->gui.canvas=(void *)(&Canvas); \ 0000001C 2C009FE5 LDR R0,??maincsm_oncreate_0 ;; gui_methods \ 00000020 2C1080E2 ADD R1,R0,#+44 \ 00000024 001085E5 STR R1,[R5, #+0] 258 // main_gui->gui.flag30=2; 259 main_gui->gui.methods=(void *)gui_methods; \ 00000028 040085E5 STR R0,[R5, #+4] 260 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 0000002C 158000EF SWI +32789 \ 00000030 200085E5 STR R0,[R5, #+32] 261 csm->csm.state=0; \ 00000034 0000A0E3 MOV R0,#+0 \ 00000038 100084E5 STR R0,[R4, #+16] 262 csm->csm.unk1=0; \ 0000003C 140084E5 STR R0,[R4, #+20] 263 csm->gui_id=CreateGUI(main_gui); \ 00000040 0500A0E1 MOV R0,R5 \ 00000044 370100EF SWI +311 \ 00000048 280084E5 STR R0,[R4, #+40] 264 265 } \ 0000004C 3080BDE8 POP {R4,R5,PC} ;; return \ ??maincsm_oncreate_0: \ 00000050 ........ DC32 gui_methods 266 267 268 //---------------------------------------------------------------------------// 269 270 271 #pragma inline=forced 272 int toupper(int c) 273 { 274 if((c>='a')&&(c<='z')) c+='A'-'a'; 275 return(c); 276 } 277 \ In segment CODE, align 4, keep-with-next 278 int strcmp_nocase(const char *s1,const char *s2) 279 { 280 int i; 281 int c; 282 while(!(i=(c=toupper(*s1++))-toupper(*s2++))) if (!c) break; \ strcmp_nocase: \ ??strcmp_nocase_0: \ 00000000 0020D0E5 LDRB R2,[R0, #+0] \ 00000004 610052E3 CMP R2,#+97 \ 00000008 010000BA BLT ??strcmp_nocase_1 \ 0000000C 7B0052E3 CMP R2,#+123 \ 00000010 202042B2 SUBLT R2,R2,#+32 \ ??strcmp_nocase_1: \ 00000014 00C0D1E5 LDRB R12,[R1, #+0] \ 00000018 010080E2 ADD R0,R0,#+1 \ 0000001C 0230A0E1 MOV R3,R2 \ 00000020 61005CE3 CMP R12,#+97 \ 00000024 010000BA BLT ??strcmp_nocase_2 \ 00000028 7B005CE3 CMP R12,#+123 \ 0000002C 20C04CB2 SUBLT R12,R12,#+32 \ ??strcmp_nocase_2: \ 00000030 011081E2 ADD R1,R1,#+1 \ 00000034 0C2052E0 SUBS R2,R2,R12 \ 00000038 0100001A BNE ??strcmp_nocase_3 \ 0000003C 000053E3 CMP R3,#+0 \ 00000040 EEFFFF1A BNE ??strcmp_nocase_0 283 return(i); \ ??strcmp_nocase_3: \ 00000044 0200A0E1 MOV R0,R2 \ 00000048 1EFF2FE1 BX LR ;; return 284 } 285 286 \ In segment CODE, align 4, keep-with-next 287 void ElfKiller(void) 288 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 289 extern void *ELF_BEGIN; 290 kill_data(&ELF_BEGIN,(void (*)(void *))mfree_adr()); \ 00000004 158000EF SWI +32789 \ 00000008 0010A0E1 MOV R1,R0 \ 0000000C 04009FE5 LDR R0,??ElfKiller_0 ;; ELF_BEGIN \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ _BF kill_data,??kill_data??rA ;; tailcall \ ??ElfKiller_0: \ 00000018 ........ DC32 ELF_BEGIN 291 } 292 293 \ In segment CODE, align 4, keep-with-next 294 static void maincsm_onclose(CSM_RAM *csm) 295 { 296 // FreeLog(); 297 SUBPROC((void *)ElfKiller); \ maincsm_onclose: \ 00000000 08009FE5 LDR R0,??maincsm_onclose_0 ;; ElfKiller \ 00000004 00402DE9 PUSH {LR} \ 00000008 710100EF SWI +369 298 } \ 0000000C 0080BDE8 POP {PC} ;; return \ ??maincsm_onclose_0: \ 00000010 ........ DC32 ElfKiller 299 300 \ In segment CODE, align 4, keep-with-next 301 static int maincsm_onmessage(CSM_RAM *data, GBS_MSG *msg) 302 { 303 MAIN_CSM *csm=(MAIN_CSM*)data; 304 if ((msg->msg==MSG_GUI_DESTROYED)&&((int)msg->data0==csm->gui_id)) \ maincsm_onmessage: \ 00000000 042091E5 LDR R2,[R1, #+4] \ 00000004 0E30A0E3 MOV R3,#+14 \ 00000008 643C83E3 ORR R3,R3,#0x6400 \ 0000000C 030052E1 CMP R2,R3 \ 00000010 0400001A BNE ??maincsm_onmessage_0 \ 00000014 0C1091E5 LDR R1,[R1, #+12] \ 00000018 282090E5 LDR R2,[R0, #+40] \ 0000001C 020051E1 CMP R1,R2 305 { 306 csm->csm.state=-3; \ 00000020 0210E003 MVNEQ R1,#+2 \ 00000024 10108005 STREQ R1,[R0, #+16] 307 } 308 309 return(1); \ ??maincsm_onmessage_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 1EFF2FE1 BX LR ;; return 310 } 311 312 313 static const struct 314 { 315 CSM_DESC maincsm; 316 WSHDR maincsm_name; \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 466973684755 DC8 "FishGUI" \ 4900 \ 00000008 ............ DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 00000024 2C0000000100 DC32 44, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 00000000 \ 00000040 8B00 DC16 139 \ 00000042 0000 DC8 0, 0 317 }MAINCSM = 318 { 319 { 320 maincsm_onmessage, 321 maincsm_oncreate, 322 #ifdef NEWSGOLD 323 0, 324 0, 325 0, 326 0, 327 #endif 328 maincsm_onclose, 329 sizeof(MAIN_CSM), 330 1, 331 &minus11 332 }, 333 { 334 maincsm_name_body, 335 NAMECSM_MAGIC1, 336 NAMECSM_MAGIC2, 337 0x0, 338 139 339 } 340 }; 341 \ In segment CODE, align 4, keep-with-next 342 void UpdateCSMname(void) 343 { 344 wsprintf((WSHDR *)(&MAINCSM.maincsm_name),"FishGUI"); \ UpdateCSMname: \ 00000000 10009FE5 LDR R0,??UpdateCSMname_0 ;; `?` \ 00000004 00402DE9 PUSH {LR} \ 00000008 0010A0E1 MOV R1,R0 \ 0000000C 300080E2 ADD R0,R0,#+48 \ 00000010 240100EF SWI +292 345 } \ 00000014 0080BDE8 POP {PC} ;; return \ ??UpdateCSMname_0: \ 00000018 ........ DC32 `?` 346 347 \ In segment CODE, align 4, keep-with-next 348 int main(char *filename) 349 { \ main: \ 00000000 00402DE9 PUSH {LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 350 351 MAIN_CSM main_csm; 352 // InitConfig(); 353 LockSched(); \ 00000008 460100EF SWI +326 354 UpdateCSMname(); \ 0000000C ........ BL UpdateCSMname 355 CreateCSM(&MAINCSM.maincsm,&main_csm,0); \ 00000010 18009FE5 LDR R0,??main_0 ;; `?` + 8 \ 00000014 0020A0E3 MOV R2,#+0 \ 00000018 0D10A0E1 MOV R1,SP \ 0000001C 070100EF SWI +263 356 UnlockSched(); \ 00000020 470100EF SWI +327 357 358 // Init(); 359 // run((void*)ff); 360 return 0; \ 00000024 0000A0E3 MOV R0,#+0 \ 00000028 2CD08DE2 ADD SP,SP,#+44 \ 0000002C 0080BDE8 POP {PC} ;; return \ ??main_0: \ 00000030 ........ DC32 `?` + 8 361 } \ In segment CODE, align 4, keep-with-next \ ??DataTable2: \ 00000000 ........ DC32 mmtop \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 7465737400 DC8 "test" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ 00000000 31323300 DC8 "123" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 363738393000 DC8 "67890" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6D656E757465 DC8 "menutexts[i++]" \ 7874735B692B \ 2B5D00 \ 0000000F 00 DC8 0 \ 00000010 6D656E757465 DC8 "menutexts2" \ 7874733200 \ 0000001B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 0000006400 DC8 0, 0, 0, 64H, 0 \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4E6F7420666F DC8 "Not found" \ 756E6400 \ 0000000A 0000 DC8 0, 0 Maximum stack usage in bytes: Function CSTACK -------- ------ AddMenuItem 8 CreateSCMenu 4 CreateSCMenu2 4 ElfKiller 4 FreeList 8 MM_OnKey 12 MM_OnRedraw 28 MM_method8 0 MM_method9 0 MM_onClose 8 MM_onCreate 20 MM_onFocus 8 MM_onUnfocus 0 UpdateCSMname 4 ff 4 main 48 maincsm_onclose 4 maincsm_oncreate 12 maincsm_onmessage 0 run 4 strcmp_nocase 0 Segment part sizes: Function/Label Bytes -------------- ----- run 20 ff 24 mmtop 4 AddMenuItem 76 FreeList 64 CreateSCMenu 24 CreateSCMenu2 24 MAINCSM_ID 4 MAINGUI_ID 4 minus11 4 maincsm_name_body 280 my_csm_id 4 MM_OnRedraw 76 MM_onCreate 100 MM_onClose 24 MM_onFocus 32 MM_onUnfocus 20 MM_OnKey 220 MM_method8 8 MM_method9 8 gui_methods 52 maincsm_oncreate 84 ??strcmp_nocase_0 76 ElfKiller 28 maincsm_onclose 20 maincsm_onmessage 48 ? 68 UpdateCSMname 28 main 52 ??DataTable2 4 ? 8 ? 4 ? 8 ? 28 ? 8 ? 12 Others 108 1 156 bytes in segment CODE 192 bytes in segment DATA_C 296 bytes in segment DATA_Z 12 bytes in segment INITTAB 1 060 bytes of CODE memory (+ 108 bytes shared) 192 bytes of CONST memory 296 bytes of DATA memory Errors: none Warnings: 2