############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.40A/W32 EVALUATION 23/Dec/2006 02:58:31 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # Time limited license: 19 days left # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = E:\ARM\IWatch\main.c # # Command line = E:\ARM\IWatch\main.c -lC E:\ARM\IWatch\Release\List\ # # -o E:\ARM\IWatch\Release\Obj\ -s9 --no_unroll # # --no_clustering --cpu_mode arm --endian little # # --cpu ARM926EJ-S --stack_align 4 --interwork -e # # --fpu None -I "F:\Program Files (x86)\IAR # # Systems\Embedded Workbench 4.0 Evaluation\ARM\INC\" # # List file = E:\ARM\IWatch\Release\List\main.lst # # Object file = E:\ARM\IWatch\Release\Obj\main.r79 # # # # # ############################################################################## E:\ARM\IWatch\main.c 1 #include "..\inc\swilib.h" 2 3 #pragma inline 4 void patch_input(INPUTDIA_DESC* inp,int x,int y,int x2,int y2) 5 { 6 inp->rc.x=x; 7 inp->rc.y=y; 8 inp->rc.x2=x2; 9 inp->rc.y2=y2; 10 } 11 12 #pragma inline 13 void patch_header(HEADER_DESC* head,int x,int y,int x2,int y2) 14 { 15 head->rc.x=x; 16 head->rc.y=y; 17 head->rc.x2=x2; 18 head->rc.y2=y2; 19 } 20 \ In segment DATA_Z, align 4, align-sorted 21 int edit=0; \ edit: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 22 WSHDR *ws; \ ws: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 23 unsigned int mell=0; \ mell: \ 00000000 DS8 4 24 \ In segment DATA_C, align 1, align-sorted 25 const char _percent_u[]="%u"; \ _percent_u: \ 00000000 257500 DC8 "%u" 26 27 typedef struct 28 { 29 CSM_RAM csm; 30 int gui_id; 31 }MAIN_CSM; 32 33 typedef struct 34 { 35 GUI gui; 36 WSHDR *ws1; 37 WSHDR *ws2; 38 int i1; 39 }MAIN_GUI; 40 41 extern void kill_data(void *p, void (*func_p)(void *)); 42 \ In segment CODE, align 4, keep-with-next 43 void ElfKiller(void) 44 { 45 extern void *ELF_BEGIN; 46 FreeWS(ws); \ ElfKiller: \ 00000000 ........ LDR R0,??DataTable8 ;; ws \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 290100EF SWI +297 47 kill_data(&ELF_BEGIN,(void (*)(void *))mfree_adr()); \ 00000010 158000EF SWI +32789 \ 00000014 0010A0E1 MOV R1,R0 \ 00000018 04009FE5 LDR R0,??ElfKiller_0 ;; ELF_BEGIN \ 0000001C 0040BDE8 POP {LR} ;; Pop \ 00000020 ........ _BF kill_data,??kill_data??rA ;; tailcall \ ??ElfKiller_0: \ 00000024 ........ DC32 ELF_BEGIN 48 } \ In segment CODE, align 4, keep-with-next 49 void method0(MAIN_GUI *data) 50 { \ method0: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 51 DrawRoundedFrame(0,0,131,175,0,0,0, 52 GetPaletteAdrByColorIndex(0), 53 GetPaletteAdrByColorIndex(20)); \ 00000008 1400A0E3 MOV R0,#+20 \ 0000000C 2E0100EF SWI +302 \ 00000010 0050A0E1 MOV R5,R0 \ 00000014 0000A0E3 MOV R0,#+0 \ 00000018 2E0100EF SWI +302 \ 0000001C 20002DE9 PUSH {R5} \ 00000020 01002DE9 PUSH {R0} \ 00000024 AF30A0E3 MOV R3,#+175 \ 00000028 8320A0E3 MOV R2,#+131 \ 0000002C 0010A0E3 MOV R1,#+0 \ 00000030 0000A0E3 MOV R0,#+0 \ 00000034 01002DE9 PUSH {R0} \ 00000038 01002DE9 PUSH {R0} \ 0000003C 01002DE9 PUSH {R0} \ 00000040 500100EF SWI +336 54 wsprintf(data->ws1,"Item:"); \ 00000044 300094E5 LDR R0,[R4, #+48] \ 00000048 C4109FE5 LDR R1,??method0_0+0x4 ;; `?` \ 0000004C 240100EF SWI +292 55 DrawString(data->ws1,3,3,128,172,SMALL_FONT,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 00000050 1700A0E3 MOV R0,#+23 \ 00000054 2E0100EF SWI +302 \ 00000058 0050A0E1 MOV R5,R0 \ 0000005C 0000A0E3 MOV R0,#+0 \ 00000060 2E0100EF SWI +302 \ 00000064 20002DE9 PUSH {R5} \ 00000068 ........ LDR R5,??DataTable9 ;; mell \ 0000006C 01002DE9 PUSH {R0} \ 00000070 8030A0E3 MOV R3,#+128 \ 00000074 0320A0E3 MOV R2,#+3 \ 00000078 0210A0E1 MOV R1,R2 \ 0000007C 0000A0E3 MOV R0,#+0 \ 00000080 01002DE9 PUSH {R0} \ 00000084 0700A0E3 MOV R0,#+7 \ 00000088 01002DE9 PUSH {R0} \ 0000008C AC00A0E3 MOV R0,#+172 \ 00000090 01002DE9 PUSH {R0} \ 00000094 300094E5 LDR R0,[R4, #+48] \ 00000098 4C0100EF SWI +332 \ 0000009C 28D08DE2 ADD SP,SP,#+40 56 wsprintf(data->ws1,"%u",mell); \ 000000A0 300094E5 LDR R0,[R4, #+48] \ 000000A4 002095E5 LDR R2,[R5, #+0] \ 000000A8 181F8FE2 ADR R1,??method0_0 ;; "%u" \ 000000AC 240100EF SWI +292 57 DrawString(data->ws1,33,3,128,172,SMALL_FONT,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 000000B0 1700A0E3 MOV R0,#+23 \ 000000B4 2E0100EF SWI +302 \ 000000B8 0060A0E1 MOV R6,R0 \ 000000BC 0000A0E3 MOV R0,#+0 \ 000000C0 2E0100EF SWI +302 \ 000000C4 40002DE9 PUSH {R6} \ 000000C8 01002DE9 PUSH {R0} \ 000000CC 8030A0E3 MOV R3,#+128 \ 000000D0 0320A0E3 MOV R2,#+3 \ 000000D4 2110A0E3 MOV R1,#+33 \ 000000D8 0000A0E3 MOV R0,#+0 \ 000000DC 01002DE9 PUSH {R0} \ 000000E0 0700A0E3 MOV R0,#+7 \ 000000E4 01002DE9 PUSH {R0} \ 000000E8 AC00A0E3 MOV R0,#+172 \ 000000EC 01002DE9 PUSH {R0} \ 000000F0 300094E5 LDR R0,[R4, #+48] \ 000000F4 4C0100EF SWI +332 58 DrawImg(1, 15, mell); \ 000000F8 002095E5 LDR R2,[R5, #+0] \ 000000FC 0F10A0E3 MOV R1,#+15 \ 00000100 0100A0E3 MOV R0,#+1 \ 00000104 230000EF SWI +35 59 } \ 00000108 14D08DE2 ADD SP,SP,#+20 \ 0000010C 7080BDE8 POP {R4-R6,PC} ;; return \ ??method0_0: \ 00000110 25750000 DC8 "%u",+0 \ 00000114 ........ DC32 `?` 60 \ In segment CODE, align 4, keep-with-next 61 void method1(MAIN_GUI *data, void *(*malloc_adr)(int)) 62 { \ method1: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 63 data->ws1=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 300084E5 STR R0,[R4, #+48] 64 data->ws2=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 340084E5 STR R0,[R4, #+52] 65 data->gui.state=1; \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 0C00C4E5 STRB R0,[R4, #+12] \ 00000028 1080BDE8 POP {R4,PC} ;; return 66 } 67 \ In segment CODE, align 4, keep-with-next 68 void method2(MAIN_GUI *data, void (*mfree_adr)(void *)) 69 { \ method2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 70 FreeWS(data->ws1); \ 00000008 300094E5 LDR R0,[R4, #+48] \ 0000000C 290100EF SWI +297 71 FreeWS(data->ws2); \ 00000010 340094E5 LDR R0,[R4, #+52] \ 00000014 290100EF SWI +297 72 data->gui.state=0; \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 0C00C4E5 STRB R0,[R4, #+12] \ 00000020 1080BDE8 POP {R4,PC} ;; return 73 } 74 \ In segment CODE, align 4, keep-with-next 75 void method3(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) 76 { 77 data->gui.state=2; \ method3: \ 00000000 0210A0E3 MOV R1,#+2 \ 00000004 0C10C0E5 STRB R1,[R0, #+12] \ 00000008 1EFF2FE1 BX LR ;; return 78 } 79 \ In segment CODE, align 4, keep-with-next 80 void method4(MAIN_GUI *data, void (*mfree_adr)(void *)) 81 { 82 if (data->gui.state!=2) return; \ method4: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 83 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] \ 00000010 1EFF2FE1 BX LR ;; return 84 } 85 86 void create_ed(); 87 \ In segment CODE, align 4, keep-with-next 88 int method5(MAIN_GUI *data, GUI_MSG *msg) 89 { \ method5: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0140A0E1 MOV R4,R1 90 DirectRedrawGUI(); \ 00000008 3F0100EF SWI +319 91 if ((msg->gbsmsg->msg==KEY_DOWN)||(msg->gbsmsg->msg==LONG_PRESS)) \ 0000000C 040094E5 LDR R0,[R4, #+4] \ 00000010 9320A0E3 MOV R2,#+147 \ 00000014 F210D0E1 LDRSH R1,[R0, #+2] \ 00000018 402F82E3 ORR R2,R2,#0x100 \ 0000001C 020051E1 CMP R1,R2 \ 00000020 02208212 ADDNE R2,R2,#+2 \ 00000024 02005111 CMPNE R1,R2 \ 00000028 1700001A BNE ??method5_0 92 { 93 switch(msg->gbsmsg->submess) \ 0000002C ........ LDR R1,??DataTable9 ;; mell \ 00000030 040090E5 LDR R0,[R0, #+4] \ 00000034 002091E5 LDR R2,[R1, #+0] \ 00000038 010050E2 SUBS R0,R0,#+1 \ 0000003C 1800000A BEQ ??method5_1 \ 00000040 030050E2 SUBS R0,R0,#+3 \ 00000044 1D00000A BEQ ??method5_2 \ 00000048 370050E2 SUBS R0,R0,#+55 \ 0000004C 0200000A BEQ ??method5_3 \ 00000050 010050E2 SUBS R0,R0,#+1 \ 00000054 0E00000A BEQ ??method5_4 \ 00000058 0B0000EA B ??method5_0 94 { 95 case UP_BUTTON: 96 if (++mell==0) mell--; \ ??method5_3: \ 0000005C 010092E2 ADDS R0,R2,#+1 \ 00000060 000081E5 STR R0,[R1, #+0] \ 00000064 0100001A BNE ??method5_5 \ 00000068 0000E0E3 MVN R0,#+0 \ ??method5_6: \ 0000006C 000081E5 STR R0,[R1, #+0] 97 PlaySound(0, 0, 0, mell, 0); \ ??method5_5: \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 01002DE9 PUSH {R0} \ 00000078 003091E5 LDR R3,[R1, #+0] \ 0000007C 0020A0E3 MOV R2,#+0 \ 00000080 0010A0E1 MOV R1,R0 \ 00000084 320000EF SWI +50 \ 00000088 04D08DE2 ADD SP,SP,#+4 98 break; 99 case DOWN_BUTTON: 100 if (mell>0) mell--; 101 PlaySound(0, 0, 0, mell, 0); 102 break; 103 case LEFT_SOFT: 104 if (!edit) create_ed(); 105 break; 106 case RIGHT_SOFT: 107 return(1); 108 } 109 } 110 // method0(data); 111 return(0); \ ??method5_0: \ 0000008C 0000A0E3 MOV R0,#+0 \ 00000090 1080BDE8 POP {R4,PC} ;; return \ ??method5_4: \ 00000094 000052E3 CMP R2,#+0 \ 00000098 F4FFFF0A BEQ ??method5_5 \ 0000009C 010042E2 SUB R0,R2,#+1 \ 000000A0 F1FFFFEA B ??method5_6 \ ??method5_1: \ 000000A4 ........ LDR R0,??DataTable10 ;; edit \ 000000A8 000090E5 LDR R0,[R0, #+0] \ 000000AC 000050E3 CMP R0,#+0 \ 000000B0 F5FFFF1A BNE ??method5_0 \ 000000B4 ........ BL create_ed \ 000000B8 0000A0E3 MOV R0,#+0 \ 000000BC 1080BDE8 POP {R4,PC} \ ??method5_2: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 1080BDE8 POP {R4,PC} 112 } \ In segment CODE, align 4, keep-with-next 113 void method7(MAIN_GUI *data, void (*mfree_adr)(void *)) 114 { 115 kill_data(data,mfree_adr); \ method7: \ 00000000 ........ _BF kill_data,??kill_data??rA ;; tailcall 116 } 117 \ In segment CODE, align 4, keep-with-next 118 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 119 \ In segment CODE, align 4, keep-with-next 120 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 121 \ In segment DATA_C, align 4, align-sorted 122 const void * const gui_methods[11]={ \ gui_methods: \ 00000000 ............ DC32 method0, method1, method2, method3, method4, method5, 0H, method7 \ ............ \ ............ \ ............ \ 00000000.... \ .... \ 00000020 ............ DC32 method8, method9, 0H \ ....00000000 123 (void *)method0, //Redraw 124 (void *)method1, //Create 125 (void *)method2, //Close 126 (void *)method3, //Focus 127 (void *)method4, //Unfocus 128 (void *)method5, //OnKey 129 0, 130 (void *)method7, //Destroy 131 (void *)method8, 132 (void *)method9, 133 0 134 }; 135 \ In segment DATA_C, align 4, align-sorted 136 const RECT Canvas={0,0,131,175}; \ Canvas: \ 00000000 000000008300 DC16 0, 0, 131, 175 \ AF00 137 \ In segment CODE, align 4, keep-with-next 138 void maincsm_oncreate(CSM_RAM *data) 139 { \ maincsm_oncreate: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 140 ws=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 ........ LDR R1,??DataTable8 ;; ws \ 00000014 000081E5 STR R0,[R1, #+0] 141 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000018 3C00A0E3 MOV R0,#+60 \ 0000001C 140000EF SWI +20 \ 00000020 0050A0E1 MOV R5,R0 142 MAIN_CSM*csm=(MAIN_CSM*)data; 143 zeromem(main_gui,sizeof(MAIN_GUI)); \ 00000024 3C10A0E3 MOV R1,#+60 \ 00000028 1D0100EF SWI +285 144 main_gui->gui.canvas=(void *)(&Canvas); \ 0000002C 34009FE5 LDR R0,??maincsm_oncreate_0 ;; Canvas \ 00000030 000085E5 STR R0,[R5, #+0] 145 main_gui->gui.flag30=2; \ 00000034 0200A0E3 MOV R0,#+2 \ 00000038 2C0085E5 STR R0,[R5, #+44] 146 main_gui->gui.methods=(void *)gui_methods; \ 0000003C 28009FE5 LDR R0,??maincsm_oncreate_0+0x4 ;; gui_methods \ 00000040 040085E5 STR R0,[R5, #+4] 147 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000044 158000EF SWI +32789 \ 00000048 1C0085E5 STR R0,[R5, #+28] 148 csm->csm.state=0; \ 0000004C 0000A0E3 MOV R0,#+0 \ 00000050 100084E5 STR R0,[R4, #+16] 149 csm->csm.unk1=0; \ 00000054 140084E5 STR R0,[R4, #+20] 150 csm->gui_id=CreateGUI(main_gui); \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 370100EF SWI +311 \ 00000060 280084E5 STR R0,[R4, #+40] \ 00000064 3080BDE8 POP {R4,R5,PC} ;; return \ ??maincsm_oncreate_0: \ 00000068 ........ DC32 Canvas \ 0000006C ........ DC32 gui_methods 151 } 152 \ In segment CODE, align 4, keep-with-next 153 void maincsm_onclose(CSM_RAM *csm) 154 { 155 SUBPROC((void *)ElfKiller); \ maincsm_onclose: \ 00000000 08009FE5 LDR R0,??maincsm_onclose_0 ;; ElfKiller \ 00000004 00402DE9 PUSH {LR} \ 00000008 710100EF SWI +369 \ 0000000C 0080BDE8 POP {PC} ;; return \ ??maincsm_onclose_0: \ 00000010 ........ DC32 ElfKiller 156 } 157 \ In segment CODE, align 4, keep-with-next 158 int maincsm_onmessage(CSM_RAM *data, GBS_MSG *msg) 159 { 160 MAIN_CSM *csm=(MAIN_CSM*)data; 161 if ((msg->msg==MSG_GUI_DESTROYED)&&((int)msg->data0==csm->gui_id)) \ maincsm_onmessage: \ 00000000 F220D1E1 LDRSH R2,[R1, #+2] \ 00000004 980052E3 CMP R2,#+152 \ 00000008 0400001A BNE ??maincsm_onmessage_0 \ 0000000C 081091E5 LDR R1,[R1, #+8] \ 00000010 282090E5 LDR R2,[R0, #+40] \ 00000014 020051E1 CMP R1,R2 162 { 163 csm->csm.state=-3; \ 00000018 0210E003 MVNEQ R1,#+2 \ 0000001C 10108005 STREQ R1,[R0, #+16] 164 } 165 return(1); \ ??maincsm_onmessage_0: \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 1EFF2FE1 BX LR ;; return 166 } 167 \ In segment DATA_C, align 4, align-sorted 168 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 169 \ In segment DATA_C, align 4, align-sorted 170 const CSM_DESC maincsm= \ maincsm: \ 00000000 ............ DC32 maincsm_onmessage, maincsm_oncreate, maincsm_onclose, 44, 1 \ ............ \ 2C0000000100 \ 0000 \ 00000014 ........ DC32 minus11 171 { 172 maincsm_onmessage, 173 maincsm_oncreate, 174 #ifdef NEWSGOLD 175 0, 176 0, 177 0, 178 0, 179 #endif 180 maincsm_onclose, 181 sizeof(MAIN_CSM), 182 1, 183 &minus11 184 }; 185 \ In segment CODE, align 4, keep-with-next 186 int main() 187 { \ main: \ 00000000 00402DE9 PUSH {LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 188 char dummy[sizeof(MAIN_CSM)]; 189 LockSched(); \ 00000008 460100EF SWI +326 190 CreateCSM(&maincsm,dummy,0); \ 0000000C 18009FE5 LDR R0,??main_0 ;; maincsm \ 00000010 0020A0E3 MOV R2,#+0 \ 00000014 0D10A0E1 MOV R1,SP \ 00000018 070100EF SWI +263 191 UnlockSched(); \ 0000001C 470100EF SWI +327 192 return 0; \ 00000020 0000A0E3 MOV R0,#+0 \ 00000024 2CD08DE2 ADD SP,SP,#+44 \ 00000028 0080BDE8 POP {PC} ;; return \ ??main_0: \ 0000002C ........ DC32 maincsm 193 } 194 \ In segment CODE, align 4, keep-with-next 195 void ed1_locret(void){} \ ed1_locret: \ 00000000 1EFF2FE1 BX LR ;; return 196 \ In segment CODE, align 4, keep-with-next 197 int ed1_onkey(GUI *data, GUI_MSG *msg) 198 { \ ed1_onkey: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 199 EDITCONTROL ec; 200 int i,j; 201 char ss[16]; 202 edit=0; \ 00000008 0020A0E3 MOV R2,#+0 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ LDR R0,??DataTable10 ;; edit 203 int k=msg->gbsmsg->submess; 204 /* if (msg->keys==0xFFF) 205 { 206 207 return(1); //Закрываем лавочку 208 }*/ 209 if ((msg->gbsmsg->msg==KEY_DOWN)||(msg->gbsmsg->msg==LONG_PRESS)) \ 00000014 9330A0E3 MOV R3,#+147 \ 00000018 002080E5 STR R2,[R0, #+0] \ 0000001C 040091E5 LDR R0,[R1, #+4] \ 00000020 403F83E3 ORR R3,R3,#0x100 \ 00000024 F220D0E1 LDRSH R2,[R0, #+2] \ 00000028 041090E5 LDR R1,[R0, #+4] \ 0000002C 030052E1 CMP R2,R3 \ 00000030 0300000A BEQ ??ed1_onkey_0 \ 00000034 0200A0E1 MOV R0,R2 \ 00000038 022083E2 ADD R2,R3,#+2 \ 0000003C 020050E1 CMP R0,R2 \ 00000040 2900001A BNE ??ed1_onkey_1 210 { 211 if(k==RIGHT_SOFT) \ ??ed1_onkey_0: \ 00000044 040051E3 CMP R1,#+4 \ 00000048 2700001A BNE ??ed1_onkey_1 212 { 213 i=EDIT_GetFocus(data); \ 0000004C 0400A0E1 MOV R0,R4 \ 00000050 820100EF SWI +386 214 ExtractEditControl(data,i,&ec); \ 00000054 0010A0E1 MOV R1,R0 \ 00000058 0400A0E1 MOV R0,R4 \ 0000005C ........ LDR R4,??DataTable8 ;; ws \ 00000060 10208DE2 ADD R2,SP,#+16 \ 00000064 690100EF SWI +361 215 wstrcpy(ws,ec.pWS); \ 00000068 38109DE5 LDR R1,[SP, #+56] \ 0000006C 000094E5 LDR R0,[R4, #+0] \ 00000070 1F0100EF SWI +287 216 ws_2str(ws,ss,15); \ 00000074 000094E5 LDR R0,[R4, #+0] \ 00000078 0F20A0E3 MOV R2,#+15 \ 0000007C 0D10A0E1 MOV R1,SP \ 00000080 A30000EF SWI +163 217 i=0; \ 00000084 0000A0E3 MOV R0,#+0 218 j=0; \ 00000088 0010A0E3 MOV R1,#+0 \ 0000008C 0D20A0E1 MOV R2,SP \ 00000090 0A40A0E3 MOV R4,#+10 \ 00000094 030000EA B ??ed1_onkey_2 219 while ((ss[i]!=0)&&(i<15)) j=j*10+ss[i++]-0x30; \ ??ed1_onkey_3: \ 00000098 ........ LDRB R3,[R2], #+1 \ 0000009C 010080E2 ADD R0,R0,#+1 \ 000000A0 943121E0 MLA R1,R4,R1,R3 \ 000000A4 301041E2 SUB R1,R1,#+48 \ ??ed1_onkey_2: \ 000000A8 0030D2E5 LDRB R3,[R2, #+0] \ 000000AC 000053E3 CMP R3,#+0 \ 000000B0 0100000A BEQ ??ed1_onkey_4 \ 000000B4 0F0050E3 CMP R0,#+15 \ 000000B8 F6FFFFBA BLT ??ed1_onkey_3 220 mell=j; \ ??ed1_onkey_4: \ 000000BC ........ LDR R0,??DataTable9 ;; mell 221 PlaySound(0, 0, 0, mell, 0); \ 000000C0 0020A0E3 MOV R2,#+0 \ 000000C4 001080E5 STR R1,[R0, #+0] \ 000000C8 0010A0E3 MOV R1,#+0 \ 000000CC 02002DE9 PUSH {R1} \ 000000D0 003090E5 LDR R3,[R0, #+0] \ 000000D4 0100A0E1 MOV R0,R1 \ 000000D8 320000EF SWI +50 222 // edit=0; 223 return(1); \ 000000DC 0100A0E3 MOV R0,#+1 \ 000000E0 04D08DE2 ADD SP,SP,#+4 \ 000000E4 3CD08DE2 ADD SP,SP,#+60 \ 000000E8 1080BDE8 POP {R4,PC} 224 } 225 } 226 return(0); //Do standart keys \ ??ed1_onkey_1: \ 000000EC 0000A0E3 MOV R0,#+0 \ 000000F0 3CD08DE2 ADD SP,SP,#+60 \ 000000F4 1080BDE8 POP {R4,PC} ;; return 227 //1: close 228 } 229 \ In segment CODE, align 4, keep-with-next 230 void ed1_ghook(GUI *data, int cmd){} \ ed1_ghook: \ 00000000 1EFF2FE1 BX LR ;; return 231 \ In segment DATA_I, align 4, align-sorted 232 SOFTKEY_DESC menu_sk[]= \ menu_sk: \ 00000000 DS8 24 \ 00000018 REQUIRE `?` 233 { 234 {0x0018,0x0000,(int)"Select"}, 235 {0x0001,0x0000,(int)"Back"}, 236 {0x003D,0x0000,(int)"+"} 237 }; 238 \ In segment DATA_I, align 4, align-sorted 239 SOFTKEYSTAB menu_skt= \ menu_skt: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` 240 { 241 menu_sk,0 242 }; 243 \ In segment DATA_I, align 4, align-sorted 244 HEADER_DESC ed1_hdr={0,0,0,0,NULL,(int)"Item number:",LGP_NULL}; \ ed1_hdr: \ 00000000 DS8 20 \ 00000014 REQUIRE `?` 245 \ In segment DATA_I, align 4, align-sorted 246 INPUTDIA_DESC ed1_desc= \ ed1_desc: \ 00000000 DS8 56 \ 00000038 REQUIRE `?` 247 { 248 1, 249 ed1_onkey, 250 ed1_ghook, 251 (void *)ed1_locret, 252 0, 253 &menu_skt, 254 {0,0,0,0}, 255 4, 256 100, 257 101, 258 0, 259 0, 260 0, 261 }; 262 \ In segment CODE, align 4, keep-with-next 263 void create_ed() 264 { \ create_ed: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 ........ LDR R6,??DataTable8 ;; ws \ 00000008 DC709FE5 LDR R7,??create_ed_0 ;; ed1_hdr \ 0000000C 2CD04DE2 SUB SP,SP,#+44 265 void *ma=malloc_adr(); \ 00000010 148000EF SWI +32788 \ 00000014 0050A0E1 MOV R5,R0 266 void *eq; 267 EDITCONTROL ec; 268 int scr_w,head_h; 269 PrepareEditControl(&ec); \ 00000018 0D00A0E1 MOV R0,SP \ 0000001C 640100EF SWI +356 270 eq=AllocEQueue(ma,mfree_adr()); \ 00000020 158000EF SWI +32789 \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0500A0E1 MOV R0,R5 \ 0000002C 630100EF SWI +355 271 272 wsprintf(ws,_percent_u,mell); \ 00000030 B8109FE5 LDR R1,??create_ed_0+0x4 ;; _percent_u \ 00000034 0040A0E1 MOV R4,R0 \ 00000038 ........ LDR R0,??DataTable9 ;; mell \ 0000003C 002090E5 LDR R2,[R0, #+0] \ 00000040 000096E5 LDR R0,[R6, #+0] \ 00000044 240100EF SWI +292 273 ConstructEditControl(&ec,6,0x40,ws,10); \ 00000048 0A00A0E3 MOV R0,#+10 \ 0000004C 01002DE9 PUSH {R0} \ 00000050 003096E5 LDR R3,[R6, #+0] \ 00000054 4020A0E3 MOV R2,#+64 \ 00000058 0610A0E3 MOV R1,#+6 \ 0000005C 04008DE2 ADD R0,SP,#+4 \ 00000060 650100EF SWI +357 274 AddEditControlToEditQend(eq,&ec,ma); \ 00000064 0520A0E1 MOV R2,R5 \ 00000068 04108DE2 ADD R1,SP,#+4 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 660100EF SWI +358 275 276 scr_w=ScreenW(); \ 00000074 888100EF SWI +33160 \ 00000078 0080A0E1 MOV R8,R0 277 head_h=HeaderH(); \ 0000007C 8A8100EF SWI +33162 \ 00000080 0050A0E1 MOV R5,R0 278 patch_header(&ed1_hdr,0,0,scr_w-1,head_h); \ 00000084 0060A0E3 MOV R6,#+0 \ 00000088 006087E5 STR R6,[R7, #+0] \ 0000008C 018048E2 SUB R8,R8,#+1 \ 00000090 B480C7E1 STRH R8,[R7, #+4] \ 00000094 B650C7E1 STRH R5,[R7, #+6] 279 patch_input(&ed1_desc,0,head_h+1,scr_w-1,ScreenH()-SoftkeyH()-1); \ 00000098 898100EF SWI +33161 \ 0000009C 0090A0E1 MOV R9,R0 \ 000000A0 8B8100EF SWI +33163 \ 000000A4 000049E0 SUB R0,R9,R0 \ 000000A8 011040E2 SUB R1,R0,#+1 \ 000000AC 40009FE5 LDR R0,??create_ed_0+0x8 ;; ed1_desc \ 000000B0 012085E2 ADD R2,R5,#+1 \ 000000B4 B861C0E1 STRH R6,[R0, #+24] \ 000000B8 BA21C0E1 STRH R2,[R0, #+26] \ 000000BC BC81C0E1 STRH R8,[R0, #+28] \ 000000C0 BE11C0E1 STRH R1,[R0, #+30] 280 edit=CreateInputTextDialog(&ed1_desc,&ed1_hdr,eq,1,0); \ 000000C4 0010A0E3 MOV R1,#+0 \ 000000C8 02002DE9 PUSH {R1} \ 000000CC 0130A0E3 MOV R3,#+1 \ 000000D0 0420A0E1 MOV R2,R4 \ 000000D4 0710A0E1 MOV R1,R7 \ 000000D8 670100EF SWI +359 \ 000000DC ........ LDR R1,??DataTable10 ;; edit \ 000000E0 000081E5 STR R0,[R1, #+0] 281 } \ 000000E4 34D08DE2 ADD SP,SP,#+52 \ 000000E8 F083BDE8 POP {R4-R9,PC} ;; return \ ??create_ed_0: \ 000000EC ........ DC32 ed1_hdr \ 000000F0 ........ DC32 _percent_u \ 000000F4 ........ DC32 ed1_desc \ In segment CODE, align 4, keep-with-next \ ??DataTable8: \ 00000000 ........ DC32 ws \ In segment CODE, align 4, keep-with-next \ ??DataTable9: \ 00000000 ........ DC32 mell \ In segment CODE, align 4, keep-with-next \ ??DataTable10: \ 00000000 ........ DC32 edit \ 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 menu_sk, 0 \ 0000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 00000000.... DC32 0H, `?`, 32767 \ ....FF7F0000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 01000000.... DC32 1, ed1_onkey, ed1_ghook, ed1_locret, 0, menu_skt \ ............ \ ........0000 \ 0000........ \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 040000006400 DC32 4, 100, 101, 0, 0, 0 \ 000065000000 \ 000000000000 \ 000000000000 \ 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 4261636B00 DC8 "Back" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 1, align-sorted \ `?`: \ 00000000 2B00 DC8 "+" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4974656D206E DC8 "Item number:" \ 756D6265723A \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4974656D3A00 DC8 "Item:" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257500 DC8 "%u" 282 Maximum stack usage in bytes: Function CSTACK -------- ------ ElfKiller 4 create_ed 80 ed1_ghook 0 ed1_locret 0 ed1_onkey 72 main 48 maincsm_onclose 4 maincsm_oncreate 12 maincsm_onmessage 0 method0 56 method1 8 method2 8 method3 0 method4 0 method5 12 method7 4 method8 0 method9 0 Segment part sizes: Function/Label Bytes -------------- ----- edit 4 ws 4 mell 4 _percent_u 3 ElfKiller 40 method0 280 method1 44 method2 36 method3 12 method4 20 method5 200 method7 4 method8 8 method9 8 gui_methods 44 Canvas 8 maincsm_oncreate 112 maincsm_onclose 20 maincsm_onmessage 40 minus11 4 maincsm 24 main 48 ed1_locret 4 ed1_onkey 248 ed1_ghook 4 menu_sk 24 menu_skt 8 ed1_hdr 20 ed1_desc 56 create_ed 248 ??DataTable8 4 ??DataTable9 4 ??DataTable10 4 ? 24 ? 8 ? 20 ? 56 ? 8 ? 8 ? 2 ? 16 ? 8 ? 3 Others 108 1 472 bytes in segment CODE 128 bytes in segment DATA_C 108 bytes in segment DATA_I 108 bytes in segment DATA_ID 12 bytes in segment DATA_Z 24 bytes in segment INITTAB 1 388 bytes of CODE memory (+ 108 bytes shared) 236 bytes of CONST memory 120 bytes of DATA memory Errors: none Warnings: none