############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 14/May/2008 13:01:56 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\googlecode\ViewTheLastSMS\main.c # # Command line = D:\Pasha\elf\googlecode\ViewTheLastSMS\main.c -D # # NEWSGOLD -D ELKA -D VKP -lC # # D:\Pasha\elf\googlecode\ViewTheLastSMS\E71Csw41\List # # \ -lA D:\Pasha\elf\googlecode\ViewTheLastSMS\E71Csw4 # # 1\List\ -o D:\Pasha\elf\googlecode\ViewTheLastSMS\E7 # # 1Csw41\Obj\ -s9 --no_unroll --cpu_mode arm --endian # # little --cpu ARM926EJ-S --stack_align 4 --interwork # # -e --fpu None -I "D:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\INC\" --inline_threshold=2 # # List file = D:\Pasha\elf\googlecode\ViewTheLastSMS\E71Csw41\List # # \main.lst # # Object file = D:\Pasha\elf\googlecode\ViewTheLastSMS\E71Csw41\Obj\ # # main.r79 # # # # # ############################################################################## D:\Pasha\elf\googlecode\ViewTheLastSMS\main.c 1 #include "..\inc\swilib.h" 2 3 #define COPYRIGHT "ViewTheLastSMS\n(c)BingK(binghelingxi)" 4 #define ELFNAME "ViewTheLastSMS" 5 #ifdef ELKA 6 #define SCREENW 239 7 #define SCREENH 319 8 #else 9 #define SCREENW 131 10 #define SCREENH 175 11 #endif 12 13 14 extern void kill_data(void *p, void (*func_p)(void *)); 15 void GetSMSData(WSHDR *the_ws); 16 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CDCBB3F600 DC8 "\315\313\263\366" \ 00000005 000000 DC8 0, 0, 0 17 const char color_black[4]={0, 0, 0, 100}; \ color_black: \ 00000008 00000064 DC8 0, 0, 0, 100 18 const char color_white[4]={255, 255, 255, 100}; \ color_white: \ 0000000C FFFFFF64 DC8 255, 255, 255, 100 19 20 #define POS_X 0 21 #define POS_Y 1 22 #define _t "%t" 23 24 typedef struct 25 { 26 CSM_RAM csm; 27 int gui_id; 28 }MAIN_CSM; 29 30 typedef struct 31 { 32 GUI gui; 33 }MAIN_GUI; 34 \ In segment CODE, align 4, keep-with-next 35 void soft_key(void) 36 { \ soft_key: \ 00000000 30402DE9 PUSH {R4,R5,LR} 37 WSHDR *wsl=AllocWS(32); 38 wsprintf(wsl, _t, "Í˳ö"); \ 00000004 ........ LDR R5,??DataTable1 ;; `?` \ 00000008 2000A0E3 MOV R0,#+32 \ 0000000C 250100EF SWI +293 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0520A0E1 MOV R2,R5 \ 00000018 171F8FE2 ADR R1,??soft_key_0 ;; "%t" \ 0000001C 240100EF SWI +292 39 DrawString(wsl, 0, SCREENH-GetFontYSIZE(FONT_SMALL)-2, SCREENW, SCREENH, FONT_SMALL, TEXT_OUTLINE+TEXT_ALIGNRIGHT, color_white, color_black); \ 00000020 0800A0E3 MOV R0,#+8 \ 00000024 C50100EF SWI +453 \ 00000028 081085E2 ADD R1,R5,#+8 \ 0000002C 02002DE9 PUSH {R1} \ 00000030 EF30A0E3 MOV R3,#+239 \ 00000034 0C1085E2 ADD R1,R5,#+12 \ 00000038 02002DE9 PUSH {R1} \ 0000003C 2410A0E3 MOV R1,#+36 \ 00000040 02002DE9 PUSH {R1} \ 00000044 0810A0E3 MOV R1,#+8 \ 00000048 02002DE9 PUSH {R1} \ 0000004C 3F10A0E3 MOV R1,#+63 \ 00000050 401F81E3 ORR R1,R1,#0x100 \ 00000054 02002DE9 PUSH {R1} \ 00000058 0210C1E3 BIC R1,R1,#0x2 \ 0000005C 002041E0 SUB R2,R1,R0 \ 00000060 0400A0E1 MOV R0,R4 \ 00000064 0010A0E3 MOV R1,#+0 \ 00000068 4C0100EF SWI +332 40 FreeWS(wsl); \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 290100EF SWI +297 41 } \ 00000074 14D08DE2 ADD SP,SP,#+20 \ 00000078 3080BDE8 POP {R4,R5,PC} ;; return \ ??soft_key_0: \ 0000007C 25740000 DC8 "%t",+0 42 \ In segment CODE, align 4, keep-with-next 43 void onRedraw(MAIN_GUI *data) 44 { \ onRedraw: \ 00000000 70402DE9 PUSH {R4-R6,LR} 45 #ifdef ELKA 46 DisableIconBar(1); 47 #endif 48 DrawRectangle(0, 0, SCREENW, SCREENH, 0, color_black, color_black); \ 00000004 ........ LDR R5,??DataTable1 ;; `?` \ 00000008 0100A0E3 MOV R0,#+1 \ 0000000C 3F40A0E3 MOV R4,#+63 \ 00000010 3B0200EF SWI +571 \ 00000014 080085E2 ADD R0,R5,#+8 \ 00000018 01002DE9 PUSH {R0} \ 0000001C 01002DE9 PUSH {R0} \ 00000020 404F84E3 ORR R4,R4,#0x100 \ 00000024 0430A0E1 MOV R3,R4 \ 00000028 EF20A0E3 MOV R2,#+239 \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 01002DE9 PUSH {R0} \ 00000034 0010A0E3 MOV R1,#+0 \ 00000038 B40100EF SWI +436 49 soft_key(); \ 0000003C ........ BL soft_key 50 WSHDR *ws=AllocWS(512); \ 00000040 800FA0E3 MOV R0,#+512 \ 00000044 250100EF SWI +293 \ 00000048 0060A0E1 MOV R6,R0 51 GetSMSData(ws); \ 0000004C ........ _BLF GetSMSData,??GetSMSData??rA 52 DrawString(ws, POS_X, POS_Y, SCREENW, SCREENH, FONT_SMALL, TEXT_ALIGNLEFT, color_white, color_black); \ 00000050 080085E2 ADD R0,R5,#+8 \ 00000054 01002DE9 PUSH {R0} \ 00000058 EF30A0E3 MOV R3,#+239 \ 0000005C 0120A0E3 MOV R2,#+1 \ 00000060 0010A0E3 MOV R1,#+0 \ 00000064 0C0085E2 ADD R0,R5,#+12 \ 00000068 01002DE9 PUSH {R0} \ 0000006C 0100A0E3 MOV R0,#+1 \ 00000070 01002DE9 PUSH {R0} \ 00000074 0800A0E3 MOV R0,#+8 \ 00000078 01002DE9 PUSH {R0} \ 0000007C 10002DE9 PUSH {R4} \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 4C0100EF SWI +332 53 FreeWS(ws); \ 00000088 0600A0E1 MOV R0,R6 \ 0000008C 290100EF SWI +297 54 } \ 00000090 20D08DE2 ADD SP,SP,#+32 \ 00000094 7080BDE8 POP {R4-R6,PC} ;; return 55 \ In segment CODE, align 4, keep-with-next 56 int OnKey(MAIN_GUI *data, GUI_MSG *msg) 57 { \ OnKey: \ 00000000 00402DE9 PUSH {LR} 58 if(msg->gbsmsg->msg==KEY_DOWN) \ 00000004 040091E5 LDR R0,[R1, #+4] \ 00000008 9320A0E3 MOV R2,#+147 \ 0000000C 041090E5 LDR R1,[R0, #+4] \ 00000010 402F82E3 ORR R2,R2,#0x100 \ 00000014 020051E1 CMP R1,R2 59 { 60 if(msg->gbsmsg->submess==RIGHT_SOFT) \ 00000018 08009005 LDREQ R0,[R0, #+8] \ 0000001C 04005003 CMPEQ R0,#+4 61 return 1; \ 00000020 0100A003 MOVEQ R0,#+1 \ 00000024 0080BD08 POPEQ {PC} 62 } 63 DirectRedrawGUI(); \ 00000028 3F0100EF SWI +319 64 return 0; \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 0080BDE8 POP {PC} ;; return 65 } 66 \ In segment CODE, align 4, keep-with-next 67 void onCreate(MAIN_GUI *data, void *(*malloc_adr)(int)) 68 { 69 data->gui.state=1; \ onCreate: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 0C10C0E5 STRB R1,[R0, #+12] 70 } \ 00000008 1EFF2FE1 BX LR ;; return 71 \ In segment CODE, align 4, keep-with-next 72 void onClose(MAIN_GUI *data, void (*mfree_adr)(void *)) 73 { 74 data->gui.state=0; \ onClose: \ 00000000 0010A0E3 MOV R1,#+0 \ 00000004 0C10C0E5 STRB R1,[R0, #+12] 75 } \ 00000008 1EFF2FE1 BX LR ;; return 76 \ In segment CODE, align 4, keep-with-next 77 void onFocus(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) 78 { \ onFocus: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 79 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 80 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 81 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 82 \ In segment CODE, align 4, keep-with-next 83 void onUnfocus(MAIN_GUI *data, void (*mfree_adr)(void *)) 84 { 85 if(data->gui.state!=2) \ onUnfocus: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 86 return; 87 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 88 } \ 00000010 1EFF2FE1 BX LR ;; return 89 \ In segment CODE, align 4, keep-with-next 90 int method8(void) 91 { 92 return(0); \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 93 } 94 \ In segment CODE, align 4, keep-with-next 95 int method9(void) 96 { 97 return(0); \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 98 } 99 \ In segment DATA_C, align 4, align-sorted 100 const RECT Canvas={0, 0, SCREENW, SCREENH}; \ Canvas: \ 00000000 00000000EF00 DC16 0, 0, 239, 319 \ 3F01 101 102 const void * const gui_methods[11]= \ gui_methods: \ 00000008 ............ DC32 onRedraw, onCreate, onClose, onFocus, onUnfocus, OnKey, 0H \ ............ \ ............ \ ............ \ 00000000 \ 00000024 ............ DC32 kill_data, method8, method9, 0H \ ............ \ 00000000 103 { 104 (void *)onRedraw, //Redraw 105 (void *)onCreate, //Create 106 (void *)onClose, //Close 107 (void *)onFocus, //Focus 108 (void *)onUnfocus, //Unfocus 109 (void *)OnKey, //OnKey 110 0, 111 (void *)kill_data, //Destroy 112 (void *)method8, 113 (void *)method9, 114 0 115 }; \ In segment CODE, align 4, keep-with-next 116 void maincsm_oncreate(CSM_RAM *data) 117 { \ maincsm_oncreate: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 118 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000008 3400A0E3 MOV R0,#+52 \ 0000000C 140000EF SWI +20 \ 00000010 0050A0E1 MOV R5,R0 119 MAIN_CSM *csm=(MAIN_CSM *)data; 120 zeromem(main_gui,sizeof(MAIN_GUI)); \ 00000014 3410A0E3 MOV R1,#+52 \ 00000018 1D0100EF SWI +285 121 main_gui->gui.canvas=(void *)(&Canvas); \ 0000001C 34009FE5 LDR R0,??maincsm_oncreate_0 ;; Canvas 122 main_gui->gui.flag30=2; \ 00000020 0210A0E3 MOV R1,#+2 \ 00000024 000085E5 STR R0,[R5, #+0] \ 00000028 301085E5 STR R1,[R5, #+48] 123 main_gui->gui.methods=(void *)gui_methods; \ 0000002C 080080E2 ADD R0,R0,#+8 \ 00000030 040085E5 STR R0,[R5, #+4] 124 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000034 158000EF SWI +32789 \ 00000038 200085E5 STR R0,[R5, #+32] 125 csm->csm.state=0; \ 0000003C 0000A0E3 MOV R0,#+0 \ 00000040 100084E5 STR R0,[R4, #+16] 126 csm->csm.unk1=0; \ 00000044 140084E5 STR R0,[R4, #+20] 127 csm->gui_id=CreateGUI(main_gui); \ 00000048 0500A0E1 MOV R0,R5 \ 0000004C 370100EF SWI +311 \ 00000050 280084E5 STR R0,[R4, #+40] 128 } \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return \ ??maincsm_oncreate_0: \ 00000058 ........ DC32 Canvas 129 130 \ In segment CODE, align 4, keep-with-next 131 int maincsm_onmessage(CSM_RAM *data, GBS_MSG *msg) 132 { 133 MAIN_CSM *csm=(MAIN_CSM*)data; 134 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 135 { 136 csm->csm.state=-3; \ 00000020 0210E003 MVNEQ R1,#+2 \ 00000024 10108005 STREQ R1,[R0, #+16] 137 } 138 return(1); \ ??maincsm_onmessage_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 1EFF2FE1 BX LR ;; return 139 } 140 \ In segment CODE, align 4, keep-with-next 141 void Killer(void) 142 { 143 #ifndef VKP 144 extern void *ELF_BEGIN; 145 extern void kill_data(void *p, void (*func_p)(void *)); 146 kill_data(&ELF_BEGIN,(void (*)(void *))mfree_adr()); 147 #endif 148 } \ Killer: \ 00000000 1EFF2FE1 BX LR ;; return 149 \ In segment CODE, align 4, keep-with-next 150 void maincsm_onclose(CSM_RAM *csm) 151 { 152 SUBPROC((void *)Killer); \ maincsm_onclose: \ 00000000 08009FE5 LDR R0,??maincsm_onclose_0 ;; Killer \ 00000004 00402DE9 PUSH {LR} \ 00000008 710100EF SWI +369 153 } \ 0000000C 0080BDE8 POP {PC} ;; return \ ??maincsm_onclose_0: \ 00000010 ........ DC32 Killer 154 \ In segment DATA_C, align 4, align-sorted 155 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 \ In segment DATA_C, align 4, align-sorted 156 const unsigned short maincsm_name_body[16]={14,'V', 'i', 'e', 'w', 'T', 'h', 'e', 'L', 'a', 's', 't', 'S', 'M', 'S'}; \ maincsm_name_body: \ 00000000 0E0056006900 DC16 14, 86, 105, 101, 119, 84, 104, 101, 76, 97, 115, 116, 83, 77, 83 \ 650077005400 \ 680065004C00 \ 610073007400 \ 53004D005300 \ 0000001E 0000 DC8 0, 0 157 158 const struct 159 { 160 CSM_DESC maincsm; 161 WSHDR maincsm_name; \ In segment DATA_C, align 4, align-sorted 162 }MAINCSM = \ MAINCSM: \ 00000000 ............ DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 0000001C 2C0000000100 DC32 44, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 00000000 \ 00000038 8B00 DC16 139 \ 0000003A 0000 DC8 0, 0 163 { 164 { 165 maincsm_onmessage, 166 maincsm_oncreate, 167 #ifdef NEWSGOLD 168 0, 169 0, 170 0, 171 0, 172 #endif 173 maincsm_onclose, 174 sizeof(MAIN_CSM), 175 1, 176 &minus11 177 }, 178 { 179 (unsigned short *)maincsm_name_body, 180 NAMECSM_MAGIC1, 181 NAMECSM_MAGIC2, 182 0x0, 183 139 184 } 185 }; 186 187 #ifndef VKP 188 void UpdateCSMname(void) 189 { 190 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), ELFNAME); 191 } 192 #endif 193 \ In segment CODE, align 4, keep-with-next 194 int main(void) 195 { \ main: \ 00000000 00402DE9 PUSH {LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 196 char dummy[sizeof(MAIN_CSM)]; 197 #ifndef VKP 198 UpdateCSMname(); 199 #endif 200 LockSched(); \ 00000008 460100EF SWI +326 201 CreateCSM(&MAINCSM.maincsm,dummy,0); \ 0000000C 18009FE5 LDR R0,??main_0 ;; MAINCSM \ 00000010 0020A0E3 MOV R2,#+0 \ 00000014 0D10A0E1 MOV R1,SP \ 00000018 070100EF SWI +263 202 UnlockSched(); \ 0000001C 470100EF SWI +327 203 return 0; \ 00000020 0000A0E3 MOV R0,#+0 \ 00000024 2CD08DE2 ADD SP,SP,#+44 \ 00000028 0080BDE8 POP {PC} ;; return \ ??main_0: \ 0000002C ........ DC32 MAINCSM 204 } \ In segment CODE, align 4, keep-with-next \ ??DataTable1: \ 00000000 ........ DC32 `?` \ In segment DATA_C, align 1, align-sorted \ 00000000 257400 DC8 "%t" 205 Maximum stack usage in bytes: Function CSTACK -------- ------ Killer 0 OnKey 4 main 48 maincsm_onclose 4 maincsm_oncreate 12 maincsm_onmessage 0 method8 0 method9 0 onClose 0 onCreate 0 onFocus 8 onRedraw 48 onUnfocus 0 soft_key 32 Segment part sizes: Function/Label Bytes -------------- ----- ? 16 soft_key 128 onRedraw 152 OnKey 52 onCreate 12 onClose 12 onFocus 24 onUnfocus 20 method8 8 method9 8 Canvas 52 maincsm_oncreate 92 maincsm_onmessage 48 Killer 4 maincsm_onclose 20 minus11 4 maincsm_name_body 32 MAINCSM 60 main 48 ??DataTable1 4 ? 3 Others 68 700 bytes in segment CODE 167 bytes in segment DATA_C 632 bytes of CODE memory (+ 68 bytes shared) 167 bytes of CONST memory Errors: none Warnings: none