############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 27/Mar/2009 23:25:43 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\check_smiles\smil # # es_loader.c # # Command line = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\check_smiles\smil # # es_loader.c -D NEWSGOLD -D ELKA -D GUI_INTERFACE # # -lC D:\pasha\elf\_MY_PROJECT_\_NATICQ2\check_smiles\ # # Release_ELKA\List\ -o D:\pasha\elf\_MY_PROJECT_\_NAT # # ICQ2\check_smiles\Release_ELKA\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\_MY_PROJECT_\_NATICQ2\check_smiles\Rele # # ase_ELKA\List\smiles_loader.lst # # Object file = D:\pasha\elf\_MY_PROJECT_\_NATICQ2\check_smiles\Rele # # ase_ELKA\Obj\smiles_loader.r79 # # # # # ############################################################################## D:\pasha\elf\_MY_PROJECT_\_NATICQ2\check_smiles\smiles_loader.c 1 #include "../inc/swilib.h" 2 #include "../inc/pnglist.h" 3 #include "../naticq_ipc.h" 4 #include "../smiles.h" 5 #include "../naticq.h" 6 #include "../strings.h" 7 #include "../readimg.h" 8 #include "smiles_loader.h" 9 //#include "check_ipc.h" 10 S_SMILES *s_top=0; 11 12 DYNPNGICONLIST *SmilesImgList; 13 14 volatile int total_smiles; 15 volatile int total_xstatuses; \ In segment DATA_Z, align 4, align-sorted 16 volatile int xstatuses_load; \ xstatuses_load: \ 00000000 DS8 4 17 volatile int pictures_max; 18 volatile int pictures_loaded; 19 20 extern const char SMILE_FILE[]; 21 extern const char SMILE_PATH[]; 22 extern const char XSTATUSES_PATH[]; 23 extern const char ipc_my_name[]; 24 extern int S_ICONS[]; 25 26 static IPC_REQ gipc; 27 static char *p_buf; 28 static char *s_buf; 29 static S_SMILES *s_bot; 30 static int n_pic; 31 32 \ In segment CODE, align 4, keep-with-next 33 void FreeSmiles(void) 34 { \ FreeSmiles: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 35 S_SMILES *s_smile; 36 STXT_SMILES *n; 37 STXT_SMILES *st; 38 DYNPNGICONLIST *d; 39 DYNPNGICONLIST *nd; 40 LockSched(); 41 total_smiles=0; \ 00000004 ........ LDR R4,??DataTable8 ;; icons_names \ 00000008 04D04DE2 SUB SP,SP,#+4 \ 0000000C 0050A0E3 MOV R5,#+0 \ 00000010 460100EF SWI +326 \ 00000014 F85184E5 STR R5,[R4, #+504] 42 s_smile=(S_SMILES *)s_top; \ 00000018 F06194E5 LDR R6,[R4, #+496] 43 s_top=0; \ 0000001C F05184E5 STR R5,[R4, #+496] 44 s_bot=0; \ 00000020 105284E5 STR R5,[R4, #+528] 45 UnlockSched(); \ 00000024 470100EF SWI +327 \ 00000028 000056E3 CMP R6,#+0 \ 0000002C 1300000A BEQ ??FreeSmiles_0 46 while(s_smile) 47 { 48 S_SMILES *s; 49 s=s_smile; \ ??FreeSmiles_1: \ 00000030 0670A0E1 MOV R7,R6 50 st=s->lines; \ 00000034 080097E5 LDR R0,[R7, #+8] \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 0A00000A BEQ ??FreeSmiles_2 51 while(st) 52 { 53 n=st->next; \ ??FreeSmiles_3: \ 00000040 0010A0E3 MOV R1,#+0 \ 00000044 0D20A0E1 MOV R2,SP \ ??FreeSmiles_4: \ 00000048 0030D1E7 LDRB R3,[R1, +R0] \ 0000004C 0230C1E7 STRB R3,[R1, +R2] \ 00000050 011081E2 ADD R1,R1,#+1 \ 00000054 040051E3 CMP R1,#+4 \ 00000058 FAFFFFBA BLT ??FreeSmiles_4 \ 0000005C 00809DE5 LDR R8,[SP, #+0] 54 mfree(st); \ 00000060 150000EF SWI +21 55 st=n; \ 00000064 0800B0E1 MOVS R0,R8 56 } \ 00000068 F4FFFF1A BNE ??FreeSmiles_3 57 s_smile=(S_SMILES *)(s_smile->next); \ ??FreeSmiles_2: \ 0000006C 006096E5 LDR R6,[R6, #+0] 58 mfree(s); \ 00000070 0700A0E1 MOV R0,R7 \ 00000074 150000EF SWI +21 59 } \ 00000078 000056E3 CMP R6,#+0 \ 0000007C EBFFFF1A BNE ??FreeSmiles_1 60 LockSched(); \ ??FreeSmiles_0: \ 00000080 460100EF SWI +326 61 d=SmilesImgList; \ 00000084 F46194E5 LDR R6,[R4, #+500] 62 SmilesImgList=0; \ 00000088 F45184E5 STR R5,[R4, #+500] 63 UnlockSched(); \ 0000008C 470100EF SWI +327 \ 00000090 000056E3 CMP R6,#+0 \ 00000094 0B00000A BEQ ??FreeSmiles_5 64 while(d) 65 { 66 if (d->img) \ ??FreeSmiles_6: \ 00000098 080096E5 LDR R0,[R6, #+8] \ 0000009C 000050E3 CMP R0,#+0 \ 000000A0 0300000A BEQ ??FreeSmiles_7 67 { 68 mfree(d->img->bitmap); \ 000000A4 080090E5 LDR R0,[R0, #+8] \ 000000A8 150000EF SWI +21 69 mfree(d->img); \ 000000AC 080096E5 LDR R0,[R6, #+8] \ 000000B0 150000EF SWI +21 70 } 71 nd=d->next; \ ??FreeSmiles_7: \ 000000B4 005096E5 LDR R5,[R6, #+0] 72 mfree(d); \ 000000B8 0600A0E1 MOV R0,R6 \ 000000BC 150000EF SWI +21 73 d=nd; \ 000000C0 0560B0E1 MOVS R6,R5 74 } \ 000000C4 F3FFFF1A BNE ??FreeSmiles_6 75 mfree(s_buf); \ ??FreeSmiles_5: \ 000000C8 0C0294E5 LDR R0,[R4, #+524] \ 000000CC 150000EF SWI +21 76 } \ 000000D0 F181BDE8 POP {R0,R4-R8,PC} ;; return 77 \ In segment CODE, align 4, keep-with-next 78 void InitSmiles(void) 79 { \ InitSmiles: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 80 int f; 81 unsigned int err; 82 int fsize; 83 char *buf; 84 FSTATS stat; 85 86 FreeSmiles(); 87 88 n_pic=FIRST_UCS2_BITMAP; \ 00000004 ........ LDR R4,??DataTable8 ;; icons_names 89 if (GetFileStats(SMILE_FILE,&stat,&err)==-1) \ 00000008 ........ LDR R6,??DataTable4 ;; SMILE_FILE \ 0000000C 2CD04DE2 SUB SP,SP,#+44 \ 00000010 ........ BL FreeSmiles \ 00000014 2A00A0E3 MOV R0,#+42 \ 00000018 E10C80E3 ORR R0,R0,#0xE100 \ 0000001C 140284E5 STR R0,[R4, #+532] \ 00000020 0050E0E3 MVN R5,#+0 \ 00000024 0D20A0E1 MOV R2,SP \ 00000028 04108DE2 ADD R1,SP,#+4 \ 0000002C 0600A0E1 MOV R0,R6 \ 00000030 840000EF SWI +132 \ 00000034 050050E1 CMP R0,R5 \ 00000038 2400000A BEQ ??InitSmiles_0 90 return; 91 92 if ((fsize=stat.size)<=0) \ 0000003C 08709DE5 LDR R7,[SP, #+8] \ 00000040 010057E3 CMP R7,#+1 \ 00000044 210000BA BLT ??InitSmiles_0 93 return; 94 95 if ((f=fopen(SMILE_FILE,A_ReadOnly+A_BIN,P_READ,&err))==-1) \ 00000048 0D30A0E1 MOV R3,SP \ 0000004C 8020A0E3 MOV R2,#+128 \ 00000050 801CA0E3 MOV R1,#+32768 \ 00000054 0600A0E1 MOV R0,R6 \ 00000058 0A0000EF SWI +10 \ 0000005C 0060A0E1 MOV R6,R0 \ 00000060 050056E1 CMP R6,R5 \ 00000064 1900000A BEQ ??InitSmiles_0 96 return; 97 98 buf=s_buf=p_buf=malloc(fsize+1); \ 00000068 010087E2 ADD R0,R7,#+1 \ 0000006C 140000EF SWI +20 \ 00000070 0050A0E1 MOV R5,R0 \ 00000074 085284E5 STR R5,[R4, #+520] \ 00000078 0C5284E5 STR R5,[R4, #+524] 99 buf[fread(f,buf,fsize,&err)]=0; \ 0000007C 0080A0E3 MOV R8,#+0 \ 00000080 0D30A0E1 MOV R3,SP \ 00000084 0720A0E1 MOV R2,R7 \ 00000088 0510A0E1 MOV R1,R5 \ 0000008C 0600A0E1 MOV R0,R6 \ 00000090 0B0000EF SWI +11 \ 00000094 0580C0E7 STRB R8,[R0, +R5] 100 fclose(f,&err); \ 00000098 0D10A0E1 MOV R1,SP \ 0000009C 0600A0E1 MOV R0,R6 \ 000000A0 0D0000EF SWI +13 101 //f=fopen("4:\\smiles.cfg",A_ReadWrite+A_BIN+A_Create+A_Append,P_READ+P_WRITE,&err); 102 gipc.name_to=ipc_my_name; \ 000000A4 ........ LDR R0,??DataTable7 ;; ipc_my_name 103 gipc.name_from=ipc_my_name; 104 gipc.data=0; \ 000000A8 848084E5 STR R8,[R4, #+132] \ 000000AC 7C0084E5 STR R0,[R4, #+124] \ 000000B0 800084E5 STR R0,[R4, #+128] 105 106 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_SMILE_PROCESSED,&gipc); \ 000000B4 7C3084E2 ADD R3,R4,#+124 \ 000000B8 0220A0E3 MOV R2,#+2 \ 000000BC B010A0E3 MOV R1,#+176 \ 000000C0 DE1C81E3 ORR R1,R1,#0xDE00 \ 000000C4 0900A0E3 MOV R0,#+9 \ 000000C8 420C80E3 ORR R0,R0,#0x4200 \ 000000CC 000100EF SWI +256 107 } \ ??InitSmiles_0: \ 000000D0 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000D4 F081BDE8 POP {R4-R8,PC} ;; return 108 \ In segment CODE, align 4, keep-with-next 109 void CheckSmiles(void) 110 { \ CheckSmiles: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 111 int f; 112 unsigned int err; 113 int fsize; 114 char *buf, *p_buf; 115 FSTATS stat; 116 117 if (GetFileStats(SMILE_FILE,&stat,&err)==-1) \ 00000004 ........ LDR R5,??DataTable4 ;; SMILE_FILE \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 0040E0E3 MVN R4,#+0 \ 00000010 0D20A0E1 MOV R2,SP \ 00000014 04108DE2 ADD R1,SP,#+4 \ 00000018 0500A0E1 MOV R0,R5 \ 0000001C 840000EF SWI +132 \ 00000020 040050E1 CMP R0,R4 \ 00000024 2C00000A BEQ ??CheckSmiles_0 118 return; 119 120 if ((fsize=stat.size)<=0) \ 00000028 08609DE5 LDR R6,[SP, #+8] \ 0000002C 010056E3 CMP R6,#+1 \ 00000030 290000BA BLT ??CheckSmiles_0 121 return; 122 123 if ((f=fopen(SMILE_FILE,A_ReadOnly+A_BIN,P_READ,&err))==-1) \ 00000034 0D30A0E1 MOV R3,SP \ 00000038 8020A0E3 MOV R2,#+128 \ 0000003C 801CA0E3 MOV R1,#+32768 \ 00000040 0500A0E1 MOV R0,R5 \ 00000044 0A0000EF SWI +10 \ 00000048 0070A0E1 MOV R7,R0 \ 0000004C 040057E1 CMP R7,R4 \ 00000050 2100000A BEQ ??CheckSmiles_0 124 return; 125 126 buf=p_buf=malloc(fsize+1); \ 00000054 010086E2 ADD R0,R6,#+1 \ 00000058 140000EF SWI +20 \ 0000005C 0040A0E1 MOV R4,R0 127 buf[fread(f,buf,fsize,&err)]=0; \ 00000060 0D30A0E1 MOV R3,SP \ 00000064 0620A0E1 MOV R2,R6 \ 00000068 0410A0E1 MOV R1,R4 \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 0B0000EF SWI +11 \ 00000074 0010A0E3 MOV R1,#+0 \ 00000078 0410C0E7 STRB R1,[R0, +R4] 128 fclose(f,&err); \ 0000007C 0D10A0E1 MOV R1,SP \ 00000080 0700A0E1 MOV R0,R7 \ 00000084 0D0000EF SWI +13 129 130 f = pictures_max; \ 00000088 ........ LDR R0,??DataTable8 ;; icons_names \ 0000008C 0450A0E1 MOV R5,R4 \ 00000090 001290E5 LDR R1,[R0, #+512] 131 for(buf=p_buf;*buf; buf++) \ 00000094 0010D5E5 LDRB R1,[R5, #+0] \ 00000098 000051E3 CMP R1,#+0 \ 0000009C 0C00000A BEQ ??CheckSmiles_1 132 if(*buf == ':') \ ??CheckSmiles_2: \ 000000A0 0010D5E5 LDRB R1,[R5, #+0] \ 000000A4 3A0051E3 CMP R1,#+58 \ 000000A8 0600001A BNE ??CheckSmiles_3 133 { 134 buf++; 135 while(*buf && *buf != 0x0D) buf++; \ ??CheckSmiles_4: \ 000000AC 0110F5E5 LDRB R1,[R5, #+1]! \ 000000B0 000051E3 CMP R1,#+0 \ 000000B4 0D005113 CMPNE R1,#+13 \ 000000B8 FBFFFF1A BNE ??CheckSmiles_4 136 pictures_max++; \ 000000BC 001290E5 LDR R1,[R0, #+512] \ 000000C0 011081E2 ADD R1,R1,#+1 \ 000000C4 001280E5 STR R1,[R0, #+512] 137 } \ ??CheckSmiles_3: \ 000000C8 0110F5E5 LDRB R1,[R5, #+1]! \ 000000CC 000051E3 CMP R1,#+0 \ 000000D0 F2FFFF1A BNE ??CheckSmiles_2 138 /* if(f == pictures_max) //А вдруг у нас кривые переводы строк? 139 { 140 for(buf=p_buf;*buf; buf++) 141 if(*buf == 0x0A) 142 { 143 buf++; 144 while(*buf && *buf != 0x0A && *buf!=':') buf++; 145 if(*buf!=':') pictures_max++; 146 } 147 }*/ 148 mfree(p_buf); \ ??CheckSmiles_1: \ 000000D4 0400A0E1 MOV R0,R4 \ 000000D8 150000EF SWI +21 149 } \ ??CheckSmiles_0: \ 000000DC 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000E0 F080BDE8 POP {R4-R7,PC} ;; return 150 \ In segment CODE, align 4, keep-with-next 151 void ProcessNextSmile(void) 152 { \ ProcessNextSmile: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 153 int c; 154 char fn[128]; 155 DYNPNGICONLIST *dp; 156 S_SMILES *si; 157 STXT_SMILES *st; 158 char *buf=p_buf; \ 00000004 ........ LDR R4,??DataTable8 ;; icons_names \ 00000008 84D04DE2 SUB SP,SP,#+132 \ 0000000C 086294E5 LDR R6,[R4, #+520] 159 if (!buf) return; \ 00000010 0050A0E3 MOV R5,#+0 \ 00000014 000056E3 CMP R6,#+0 \ 00000018 0600001A BNE ??ProcessNextSmile_0 \ 0000001C 180000EA B ??ProcessNextSmile_1 160 while ((c=*buf)) 161 { 162 char *p; 163 if ((c==10)||(c==13)) 164 { 165 buf++; 166 gipc.name_to=ipc_my_name; 167 gipc.name_from=ipc_my_name; 168 gipc.data=0; 169 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_SMILE_PROCESSED,&gipc); 170 p_buf=buf; 171 return; 172 } 173 p=strchr(buf,':'); 174 if (!p) break; 175 zeromem(fn,128); 176 strcpy(fn,SMILE_PATH); 177 if (fn[strlen(fn)-1]!='\\') strcat(fn,"\\"); 178 c=p-buf; 179 if (c>(127-strlen(fn))) break; 180 strncpy(fn+strlen(fn),buf,c); 181 // snprintf(logmsg,255,"Process file %s...",fn); 182 // REDRAW(); 183 buf=p; 184 dp=malloc(sizeof(DYNPNGICONLIST)); 185 zeromem(dp,sizeof(DYNPNGICONLIST)); 186 dp->icon=GetPicNByUnicodeSymbol(n_pic); 187 dp->img=CreateIMGHDRFromPngFile(fn,0); 188 LockSched(); 189 if (SmilesImgList) 190 { 191 dp->next=SmilesImgList; 192 } 193 SmilesImgList=dp; 194 UnlockSched(); 195 si=malloc(sizeof(S_SMILES)); 196 si->next=NULL; 197 si->lines=NULL; 198 si->botlines=NULL; 199 si->uni_smile=n_pic; 200 if (s_bot) 201 { 202 //Не первый 203 s_bot->next=si; 204 s_bot=si; 205 } 206 else 207 { 208 //Первый 209 s_top=si; 210 s_bot=si; 211 } 212 n_pic++; 213 while (*buf!=10 && *buf!=13 && *buf!=0) 214 { 215 buf++; 216 int i=0; 217 while (buf[i]!=0&&buf [i]!=','&&buf [i]!=10&&buf[i]!=13) i++; 218 st=malloc(sizeof(STXT_SMILES)+i); 219 strncpy(st->text,buf,i); 220 st->text[i]=0; 221 222 st->next=NULL; 223 st->key=*((unsigned long *)st->text); 224 st->mask=~(0xFFFFFFFFUL<<(8*i)); 225 st->key&=st->mask; 226 if (si->botlines) 227 { 228 si->botlines->next=st; 229 si->botlines=st; 230 } 231 else 232 { 233 si->lines=st; 234 si->botlines=st; 235 } 236 buf+=i; 237 } 238 pictures_loaded++; \ ??ProcessNextSmile_2: \ 00000020 040294E5 LDR R0,[R4, #+516] \ 00000024 010080E2 ADD R0,R0,#+1 \ 00000028 040284E5 STR R0,[R4, #+516] 239 total_smiles++; \ 0000002C F80194E5 LDR R0,[R4, #+504] \ 00000030 010080E2 ADD R0,R0,#+1 \ 00000034 F80184E5 STR R0,[R4, #+504] \ ??ProcessNextSmile_0: \ 00000038 0080D6E5 LDRB R8,[R6, #+0] \ 0000003C 000058E3 CMP R8,#+0 \ 00000040 B000000A BEQ ??ProcessNextSmile_3 \ 00000044 0A0058E3 CMP R8,#+10 \ 00000048 0D005813 CMPNE R8,#+13 \ 0000004C 0E00001A BNE ??ProcessNextSmile_4 \ 00000050 ........ LDR R0,??DataTable7 ;; ipc_my_name \ 00000054 845084E5 STR R5,[R4, #+132] \ 00000058 7C0084E5 STR R0,[R4, #+124] \ 0000005C 800084E5 STR R0,[R4, #+128] \ 00000060 7C3084E2 ADD R3,R4,#+124 \ 00000064 0220A0E3 MOV R2,#+2 \ 00000068 B010A0E3 MOV R1,#+176 \ 0000006C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000070 0900A0E3 MOV R0,#+9 \ 00000074 420C80E3 ORR R0,R0,#0x4200 \ 00000078 000100EF SWI +256 \ 0000007C 016086E2 ADD R6,R6,#+1 \ 00000080 086284E5 STR R6,[R4, #+520] \ ??ProcessNextSmile_1: \ 00000084 84D08DE2 ADD SP,SP,#+132 \ 00000088 F083BDE8 POP {R4-R9,PC} \ ??ProcessNextSmile_4: \ 0000008C 3A10A0E3 MOV R1,#+58 \ 00000090 0600A0E1 MOV R0,R6 \ 00000094 180000EF SWI +24 \ 00000098 0070B0E1 MOVS R7,R0 \ 0000009C 9900000A BEQ ??ProcessNextSmile_3 \ 000000A0 8010A0E3 MOV R1,#+128 \ 000000A4 04008DE2 ADD R0,SP,#+4 \ 000000A8 1D0100EF SWI +285 \ 000000AC 8C129FE5 LDR R1,??ProcessNextSmile_5+0x4 ;; SMILE_PATH \ 000000B0 04008DE2 ADD R0,SP,#+4 \ 000000B4 1A0000EF SWI +26 \ 000000B8 04008DE2 ADD R0,SP,#+4 \ 000000BC 1B0000EF SWI +27 \ 000000C0 04108DE2 ADD R1,SP,#+4 \ 000000C4 010080E0 ADD R0,R0,R1 \ 000000C8 010050E5 LDRB R0,[R0, #-1] \ 000000CC 5C0050E3 CMP R0,#+92 \ 000000D0 0200000A BEQ ??ProcessNextSmile_6 \ 000000D4 981F8FE2 ADR R1,??ProcessNextSmile_5 ;; "\\" \ 000000D8 04008DE2 ADD R0,SP,#+4 \ 000000DC 170000EF SWI +23 \ ??ProcessNextSmile_6: \ 000000E0 068047E0 SUB R8,R7,R6 \ 000000E4 04008DE2 ADD R0,SP,#+4 \ 000000E8 1B0000EF SWI +27 \ 000000EC 7F0060E2 RSB R0,R0,#+127 \ 000000F0 080050E1 CMP R0,R8 \ 000000F4 8300003A BCC ??ProcessNextSmile_3 \ 000000F8 04008DE2 ADD R0,SP,#+4 \ 000000FC 1B0000EF SWI +27 \ 00000100 0820A0E1 MOV R2,R8 \ 00000104 0610A0E1 MOV R1,R6 \ 00000108 04308DE2 ADD R3,SP,#+4 \ 0000010C 030080E0 ADD R0,R0,R3 \ 00000110 160100EF SWI +278 \ 00000114 0760A0E1 MOV R6,R7 \ 00000118 0C00A0E3 MOV R0,#+12 \ 0000011C 140000EF SWI +20 \ 00000120 0070A0E1 MOV R7,R0 \ 00000124 0C10A0E3 MOV R1,#+12 \ 00000128 1D0100EF SWI +285 \ 0000012C 140294E5 LDR R0,[R4, #+532] \ 00000130 E40100EF SWI +484 \ 00000134 040087E5 STR R0,[R7, #+4] \ 00000138 0010A0E3 MOV R1,#+0 \ 0000013C 04008DE2 ADD R0,SP,#+4 \ 00000140 E90100EF SWI +489 \ 00000144 080087E5 STR R0,[R7, #+8] \ 00000148 460100EF SWI +326 \ 0000014C F40194E5 LDR R0,[R4, #+500] \ 00000150 000050E3 CMP R0,#+0 \ 00000154 00008715 STRNE R0,[R7, #+0] \ 00000158 F47184E5 STR R7,[R4, #+500] \ 0000015C 470100EF SWI +327 \ 00000160 1000A0E3 MOV R0,#+16 \ 00000164 140000EF SWI +20 \ 00000168 0070A0E1 MOV R7,R0 \ 0000016C 005087E5 STR R5,[R7, #+0] \ 00000170 085087E5 STR R5,[R7, #+8] \ 00000174 0C5087E5 STR R5,[R7, #+12] \ 00000178 140294E5 LDR R0,[R4, #+532] \ 0000017C 040087E5 STR R0,[R7, #+4] \ 00000180 101294E5 LDR R1,[R4, #+528] \ 00000184 010080E2 ADD R0,R0,#+1 \ 00000188 000051E3 CMP R1,#+0 \ 0000018C 00708115 STRNE R7,[R1, #+0] \ 00000190 F0718405 STREQ R7,[R4, #+496] \ 00000194 0710A0E1 MOV R1,R7 \ 00000198 101284E5 STR R1,[R4, #+528] \ 0000019C 140284E5 STR R0,[R4, #+532] \ 000001A0 020000EA B ??ProcessNextSmile_7 \ ??ProcessNextSmile_8: \ 000001A4 089087E5 STR R9,[R7, #+8] \ ??ProcessNextSmile_9: \ 000001A8 0C9087E5 STR R9,[R7, #+12] \ 000001AC 066088E0 ADD R6,R8,R6 \ ??ProcessNextSmile_7: \ 000001B0 0000D6E5 LDRB R0,[R6, #+0] \ 000001B4 0A0050E3 CMP R0,#+10 \ 000001B8 0D005013 CMPNE R0,#+13 \ 000001BC 00005013 CMPNE R0,#+0 \ 000001C0 96FFFF0A BEQ ??ProcessNextSmile_2 \ 000001C4 016086E2 ADD R6,R6,#+1 \ 000001C8 0080A0E3 MOV R8,#+0 \ 000001CC 000000EA B ??ProcessNextSmile_10 \ ??ProcessNextSmile_11: \ 000001D0 018088E2 ADD R8,R8,#+1 \ ??ProcessNextSmile_10: \ 000001D4 0600D8E7 LDRB R0,[R8, +R6] \ 000001D8 000050E3 CMP R0,#+0 \ 000001DC 2C005013 CMPNE R0,#+44 \ 000001E0 0A005013 CMPNE R0,#+10 \ 000001E4 0D005013 CMPNE R0,#+13 \ 000001E8 F8FFFF1A BNE ??ProcessNextSmile_11 \ 000001EC 0D0088E2 ADD R0,R8,#+13 \ 000001F0 140000EF SWI +20 \ 000001F4 0090A0E1 MOV R9,R0 \ 000001F8 0820A0E1 MOV R2,R8 \ 000001FC 0610A0E1 MOV R1,R6 \ 00000200 0C0089E2 ADD R0,R9,#+12 \ 00000204 160100EF SWI +278 \ 00000208 090088E0 ADD R0,R8,R9 \ 0000020C 0C50C0E5 STRB R5,[R0, #+12] \ 00000210 00508DE5 STR R5,[SP, #+0] \ 00000214 0000A0E3 MOV R0,#+0 \ ??ProcessNextSmile_12: \ 00000218 0D10A0E1 MOV R1,SP \ 0000021C 0110D0E7 LDRB R1,[R0, +R1] \ 00000220 0910C0E7 STRB R1,[R0, +R9] \ 00000224 010080E2 ADD R0,R0,#+1 \ 00000228 040050E3 CMP R0,#+4 \ 0000022C F9FFFFBA BLT ??ProcessNextSmile_12 \ 00000230 0C0099E5 LDR R0,[R9, #+12] \ 00000234 0810A0E1 MOV R1,R8 \ 00000238 0400C9E5 STRB R0,[R9, #+4] \ 0000023C 2004A0E1 LSR R0,R0,#+8 \ 00000240 0500C9E5 STRB R0,[R9, #+5] \ 00000244 2004A0E1 LSR R0,R0,#+8 \ 00000248 0600C9E5 STRB R0,[R9, #+6] \ 0000024C 2004A0E1 LSR R0,R0,#+8 \ 00000250 0700C9E5 STRB R0,[R9, #+7] \ 00000254 0500E0E1 MVN R0,R5 \ 00000258 8111A0E1 LSL R1,R1,#+3 \ 0000025C 1001E0E1 MVN R0,R0, LSL R1 \ 00000260 0800C9E5 STRB R0,[R9, #+8] \ 00000264 2004A0E1 LSR R0,R0,#+8 \ 00000268 0900C9E5 STRB R0,[R9, #+9] \ 0000026C 2004A0E1 LSR R0,R0,#+8 \ 00000270 0A00C9E5 STRB R0,[R9, #+10] \ 00000274 2004A0E1 LSR R0,R0,#+8 \ 00000278 0B00C9E5 STRB R0,[R9, #+11] \ 0000027C 0700D9E5 LDRB R0,[R9, #+7] \ 00000280 0610D9E5 LDRB R1,[R9, #+6] \ 00000284 0A20D9E5 LDRB R2,[R9, #+10] \ 00000288 000481E1 ORR R0,R1,R0, LSL #+8 \ 0000028C 0510D9E5 LDRB R1,[R9, #+5] \ 00000290 000481E1 ORR R0,R1,R0, LSL #+8 \ 00000294 0410D9E5 LDRB R1,[R9, #+4] \ 00000298 000481E1 ORR R0,R1,R0, LSL #+8 \ 0000029C 0B10D9E5 LDRB R1,[R9, #+11] \ 000002A0 011482E1 ORR R1,R2,R1, LSL #+8 \ 000002A4 0920D9E5 LDRB R2,[R9, #+9] \ 000002A8 011482E1 ORR R1,R2,R1, LSL #+8 \ 000002AC 0820D9E5 LDRB R2,[R9, #+8] \ 000002B0 011482E1 ORR R1,R2,R1, LSL #+8 \ 000002B4 000001E0 AND R0,R1,R0 \ 000002B8 0400C9E5 STRB R0,[R9, #+4] \ 000002BC 2004A0E1 LSR R0,R0,#+8 \ 000002C0 0500C9E5 STRB R0,[R9, #+5] \ 000002C4 2004A0E1 LSR R0,R0,#+8 \ 000002C8 0600C9E5 STRB R0,[R9, #+6] \ 000002CC 2004A0E1 LSR R0,R0,#+8 \ 000002D0 0700C9E5 STRB R0,[R9, #+7] \ 000002D4 0C0097E5 LDR R0,[R7, #+12] \ 000002D8 000050E3 CMP R0,#+0 \ 000002DC B0FFFF0A BEQ ??ProcessNextSmile_8 \ 000002E0 00908DE5 STR R9,[SP, #+0] \ 000002E4 0000A0E3 MOV R0,#+0 \ ??ProcessNextSmile_13: \ 000002E8 0C1097E5 LDR R1,[R7, #+12] \ 000002EC 0D20A0E1 MOV R2,SP \ 000002F0 0220D0E7 LDRB R2,[R0, +R2] \ 000002F4 0120C0E7 STRB R2,[R0, +R1] \ 000002F8 010080E2 ADD R0,R0,#+1 \ 000002FC 040050E3 CMP R0,#+4 \ 00000300 F8FFFFBA BLT ??ProcessNextSmile_13 \ 00000304 A7FFFFEA B ??ProcessNextSmile_9 240 } 241 //fclose(f,&err); 242 total_smiles=0; \ ??ProcessNextSmile_3: \ 00000308 F85184E5 STR R5,[R4, #+504] 243 p_buf=NULL; 244 mfree(s_buf); \ 0000030C 0C0294E5 LDR R0,[R4, #+524] \ 00000310 085284E5 STR R5,[R4, #+520] \ 00000314 150000EF SWI +21 245 s_buf=NULL; \ 00000318 0C5284E5 STR R5,[R4, #+524] 246 REDRAW(); \ 0000031C 720100EF SWI +370 247 248 LockSched(); \ 00000320 460100EF SWI +326 249 ShowMSG(1,(int)"Smiles Loaded!"); \ 00000324 18109FE5 LDR R1,??ProcessNextSmile_5+0x8 ;; `?` \ 00000328 0100A0E3 MOV R0,#+1 \ 0000032C 480100EF SWI +328 250 UnlockSched(); \ 00000330 470100EF SWI +327 251 } \ 00000334 84D08DE2 ADD SP,SP,#+132 \ 00000338 F083BDE8 POP {R4-R9,PC} ;; return \ ??ProcessNextSmile_5: \ 0000033C 5C000000 DC8 "\\",+0,+0 \ 00000340 ........ DC32 SMILE_PATH \ 00000344 ........ DC32 `?` 252 \ In segment CODE, align 4, keep-with-next 253 void FreeXStatusesImg(void) 254 { 255 #ifdef GUI_INTERFACE 256 void FreeXIconList(); 257 FreeXIconList(); \ FreeXStatusesImg: \ 00000000 ........ B FreeXIconList ;; tailcall 258 #else 259 DYNPNGICONLIST *d; 260 DYNPNGICONLIST *nd; 261 LockSched(); 262 total_xstatuses=0; 263 // d=XStatusesImgList; 264 // XStatusesImgList=0; 265 // mfree(XStatusesIconArray); 266 // XStatusesIconArray=NULL; 267 UnlockSched(); 268 while(d) 269 { 270 if (d->img) 271 { 272 mfree(d->img->bitmap); 273 mfree(d->img); 274 } 275 nd=d->next; 276 mfree(d); 277 d=nd; 278 } 279 #endif 280 } 281 282 int xstatuses_max=0; 283 \ In segment CODE, align 4, keep-with-next 284 void InitXStatusesImg(void) 285 {/* 286 char fn[128]; 287 FSTATS stat; 288 unsigned err; 289 290 FreeXStatusesImg(); 291 total_xstatuses=0; 292 *(XStatusesIconArray=malloc(sizeof(int)))=S_ICONS[IS_NULLICON]; 293 xstatuses_load=1; 294 xstatuses_max=0; 295 n_pic = FIRST_UCS2_BITMAP; 296 gipc.name_to=ipc_my_name; 297 gipc.name_from=ipc_my_name; 298 gipc.data=0; 299 300 pictures_max = 0; 301 do 302 { 303 strcpy(fn,XSTATUSES_PATH); 304 sprintf(fn+strlen(fn),"\\%d.png",pictures_max++); 305 xstatuses_max++; 306 if (GetFileStats(fn,&stat,&err)==-1) break; 307 } 308 while (stat.size>0); 309 pictures_max--;*/ 310 311 n_pic = FIRST_UCS2_BITMAP; \ InitXStatusesImg: \ 00000000 ........ LDR R0,??DataTable8 ;; icons_names \ 00000004 2A10A0E3 MOV R1,#+42 \ 00000008 E11C81E3 ORR R1,R1,#0xE100 \ 0000000C 141280E5 STR R1,[R0, #+532] 312 pictures_max = 35; \ 00000010 2310A0E3 MOV R1,#+35 \ 00000014 001280E5 STR R1,[R0, #+512] 313 CheckSmiles(); \ 00000018 ........ B CheckSmiles ;; tailcall 314 315 #ifndef GUI_INTERFACE 316 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XSTATUSIMG_PROCESSED,&gipc); 317 #endif 318 } 319 320 321 #ifdef GUI_INTERFACE 322 /* 323 typedef struct 324 { 325 void *next; 326 int index; 327 IMGHDR *img; 328 }ICONS; 329 */ \ In segment DATA_Z, align 4, align-sorted 330 ICONS *xiconstop; \ xiconstop: \ 00000000 DS8 4 331 332 int drawimg2img(IMGHDR * onse, IMGHDR * timage2, int x, int y, int xRect, int yRect,int xxRect, int yyRect); 333 \ In segment CODE, align 4, keep-with-next 334 void AddXIcon(IMGHDR *img,int w,int h,int x,int x2,int ih) 335 { \ AddXIcon: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0050A0E1 MOV R5,R0 \ 00000008 20909DE5 LDR R9,[SP, #+32] \ 0000000C 24A09DE5 LDR R10,[SP, #+36] \ 00000010 0160A0E1 MOV R6,R1 \ 00000014 0270A0E1 MOV R7,R2 \ 00000018 0380A0E1 MOV R8,R3 336 ICONS *icon = malloc(sizeof(ICONS)); \ 0000001C 0C00A0E3 MOV R0,#+12 \ 00000020 140000EF SWI +20 \ 00000024 0040A0E1 MOV R4,R0 337 icon->next = 0; \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 000084E5 STR R0,[R4, #+0] 338 icon->img = CreateImgr(w,h);//malloc(strlen(img->bitmap)+4); \ 00000030 0710A0E1 MOV R1,R7 \ 00000034 0600A0E1 MOV R0,R6 \ 00000038 ........ _BLF CreateImgr,??CreateImgr??rA \ 0000003C 080084E5 STR R0,[R4, #+8] 339 //memcpy(icon->img,img,strlen(img->bitmap)+4); 340 drawimg2img(img,icon->img,0,0,x,0,x2,ih); \ 00000040 00042DE9 PUSH {R10} \ 00000044 00022DE9 PUSH {R9} \ 00000048 0000A0E3 MOV R0,#+0 \ 0000004C 01002DE9 PUSH {R0} \ 00000050 00012DE9 PUSH {R8} \ 00000054 081094E5 LDR R1,[R4, #+8] \ 00000058 0030A0E3 MOV R3,#+0 \ 0000005C 0020A0E1 MOV R2,R0 \ 00000060 0500A0E1 MOV R0,R5 \ 00000064 ........ BL drawimg2img 341 if(!xiconstop) \ 00000068 ........ LDR R0,??DataTable12 ;; xiconstop \ 0000006C 0020A0E3 MOV R2,#+0 \ 00000070 001090E5 LDR R1,[R0, #+0] \ 00000074 10D08DE2 ADD SP,SP,#+16 \ 00000078 000051E3 CMP R1,#+0 342 { 343 icon->index = 0; 344 xiconstop = icon; \ 0000007C 00408005 STREQ R4,[R0, #+0] \ 00000080 0800000A BEQ ??AddXIcon_0 345 } 346 else 347 { 348 // xiconstop->next = (ICONS*)icon; 349 ICONS *ico=(ICONS *)xiconstop; 350 int i=0; \ 00000084 000091E5 LDR R0,[R1, #+0] \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 0400000A BEQ ??AddXIcon_1 351 while(ico->next) 352 { 353 ico=ico->next; \ ??AddXIcon_2: \ 00000090 001091E5 LDR R1,[R1, #+0] 354 i++; \ 00000094 012082E2 ADD R2,R2,#+1 355 } \ 00000098 000091E5 LDR R0,[R1, #+0] \ 0000009C 000050E3 CMP R0,#+0 \ 000000A0 FAFFFF1A BNE ??AddXIcon_2 356 icon->index = i; 357 ico->next = icon; \ ??AddXIcon_1: \ 000000A4 004081E5 STR R4,[R1, #+0] \ ??AddXIcon_0: \ 000000A8 042084E5 STR R2,[R4, #+4] 358 } 359 } \ 000000AC F087BDE8 POP {R4-R10,PC} ;; return 360 361 \ In segment CODE, align 4, keep-with-next 362 void FreeXIconList() 363 { \ FreeXIconList: \ 00000000 30402DE9 PUSH {R4,R5,LR} 364 LockSched(); \ 00000004 460100EF SWI +326 365 ICONS *icon=(ICONS *)xiconstop; \ 00000008 ........ LDR R0,??DataTable12 ;; xiconstop 366 xiconstop=0; \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 004090E5 LDR R4,[R0, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 367 UnlockSched(); \ 00000018 470100EF SWI +327 \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 3080BD08 POPEQ {R4,R5,PC} 368 while(icon) 369 { 370 ICONS *icon_prev = icon; \ ??FreeXIconList_0: \ 00000024 0450A0E1 MOV R5,R4 371 icon = icon->next; 372 if(icon_prev->img) mfree(icon_prev->img->bitmap); \ 00000028 080095E5 LDR R0,[R5, #+8] \ 0000002C 004094E5 LDR R4,[R4, #+0] \ 00000030 000050E3 CMP R0,#+0 \ 00000034 0100000A BEQ ??FreeXIconList_1 \ 00000038 080090E5 LDR R0,[R0, #+8] \ 0000003C 150000EF SWI +21 373 if(icon_prev) mfree(icon_prev); \ ??FreeXIconList_1: \ 00000040 000055E3 CMP R5,#+0 \ 00000044 0100000A BEQ ??FreeXIconList_2 \ 00000048 0500A0E1 MOV R0,R5 \ 0000004C 150000EF SWI +21 374 } \ ??FreeXIconList_2: \ 00000050 000054E3 CMP R4,#+0 \ 00000054 F2FFFF1A BNE ??FreeXIconList_0 375 } \ 00000058 3080BDE8 POP {R4,R5,PC} ;; return 376 377 \ In segment CODE, align 4, keep-with-next 378 int CountXIcon() 379 { 380 int i=0; 381 ICONS *ico=(ICONS *)xiconstop; \ CountXIcon: \ 00000000 ........ LDR R1,??DataTable12 ;; xiconstop \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 001091E5 LDR R1,[R1, #+0] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 1EFF2F01 BXEQ LR 382 while(ico){ i++; ico=ico->next; } \ ??CountXIcon_0: \ 00000014 001091E5 LDR R1,[R1, #+0] \ 00000018 010080E2 ADD R0,R0,#+1 \ 0000001C 000051E3 CMP R1,#+0 \ 00000020 FBFFFF1A BNE ??CountXIcon_0 383 return i; \ 00000024 1EFF2FE1 BX LR ;; return 384 } 385 386 387 \ In segment CODE, align 4, keep-with-next 388 int get_file_size(char* fname) 389 { \ get_file_size: \ 00000000 00402DE9 PUSH {LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 390 unsigned int err; 391 FSTATS fs; 392 if ((GetFileStats(fname,&fs,&err))==-1) return 0; \ 00000008 0D20A0E1 MOV R2,SP \ 0000000C 04108DE2 ADD R1,SP,#+4 \ 00000010 840000EF SWI +132 \ 00000014 010070E3 CMN R0,#+1 393 return (fs.size); \ 00000018 08009D15 LDRNE R0,[SP, #+8] \ 0000001C 2CD08DE2 ADD SP,SP,#+44 \ 00000020 0000A003 MOVEQ R0,#+0 \ 00000024 0080BDE8 POP {PC} ;; return 394 } 395 396 397 \ In segment CODE, align 4, keep-with-next 398 IMGHDR *GetXIconByItem(int curitem) 399 { 400 // if(curitem > CountXIcon()) return 0; 401 402 ICONS *icon; 403 icon=(ICONS *)xiconstop; \ GetXIconByItem: \ 00000000 ........ LDR R1,??DataTable12 ;; xiconstop 404 int i=0; \ 00000004 0020A0E3 MOV R2,#+0 \ 00000008 001091E5 LDR R1,[R1, #+0] \ 0000000C 010000EA B ??GetXIconByItem_0 405 406 while(icon) 407 { 408 if(i==curitem) return (icon->img);// ? icon->img : 0; 409 i++; 410 icon=icon->next; \ ??GetXIconByItem_1: \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 012082E2 ADD R2,R2,#+1 \ ??GetXIconByItem_0: \ 00000018 000051E3 CMP R1,#+0 \ 0000001C 0300000A BEQ ??GetXIconByItem_2 \ 00000020 000052E1 CMP R2,R0 \ 00000024 F9FFFF1A BNE ??GetXIconByItem_1 \ 00000028 080091E5 LDR R0,[R1, #+8] \ 0000002C 1EFF2FE1 BX LR 411 } 412 return 0; \ ??GetXIconByItem_2: \ 00000030 0000A0E3 MOV R0,#+0 \ 00000034 1EFF2FE1 BX LR ;; return 413 } 414 #endif 415 \ In segment CODE, align 4, keep-with-next 416 void ProcessNextXStatImg(void) 417 { 418 #ifdef GUI_INTERFACE 419 #else 420 DYNPNGICONLIST *dp; 421 int i; 422 #endif 423 xstatuses_load=0; \ ProcessNextXStatImg: \ 00000000 ........ LDR R0,??DataTable19 ;; xstatuses_load \ 00000004 00402DE9 PUSH {LR} \ 00000008 0010A0E3 MOV R1,#+0 \ 0000000C 001080E5 STR R1,[R0, #+0] 424 SUBPROC((void *)InitSmiles); \ 00000010 ........ LDR R0,??DataTable20 ;; InitSmiles \ 00000014 710100EF SWI +369 425 } \ 00000018 0080BDE8 POP {PC} ;; return 426 427 428 #ifdef GUI_INTERFACE 429 430 431 extern const char *icons_names[]; 432 extern const char ICON_PATH[]; 433 434 \ In segment DATA_Z, align 4, align-sorted 435 ICONS *iconstop; \ iconstop: \ 00000000 DS8 4 436 \ In segment CODE, align 4, keep-with-next 437 void AddIcon(IMGHDR *img,int w,int h,int x,int x2,int ih) 438 { \ AddIcon: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0050A0E1 MOV R5,R0 \ 00000008 20909DE5 LDR R9,[SP, #+32] \ 0000000C 24A09DE5 LDR R10,[SP, #+36] \ 00000010 0160A0E1 MOV R6,R1 \ 00000014 0270A0E1 MOV R7,R2 \ 00000018 0380A0E1 MOV R8,R3 439 ICONS *icon = malloc(sizeof(ICONS)); \ 0000001C 0C00A0E3 MOV R0,#+12 \ 00000020 140000EF SWI +20 \ 00000024 0040A0E1 MOV R4,R0 440 zeromem(icon,sizeof(ICONS)); \ 00000028 0C10A0E3 MOV R1,#+12 \ 0000002C 1D0100EF SWI +285 441 icon->next = 0; \ 00000030 0000A0E3 MOV R0,#+0 \ 00000034 000084E5 STR R0,[R4, #+0] 442 icon->img = CreateImgr(w,h);//malloc(strlen(img->bitmap)+4); \ 00000038 0710A0E1 MOV R1,R7 \ 0000003C 0600A0E1 MOV R0,R6 \ 00000040 ........ _BLF CreateImgr,??CreateImgr??rA \ 00000044 080084E5 STR R0,[R4, #+8] 443 //memcpy(icon->img,img,strlen(img->bitmap)+4); 444 drawimg2img(img,icon->img,0,0,x,0,x2,ih); \ 00000048 00042DE9 PUSH {R10} \ 0000004C 00022DE9 PUSH {R9} \ 00000050 0000A0E3 MOV R0,#+0 \ 00000054 01002DE9 PUSH {R0} \ 00000058 00012DE9 PUSH {R8} \ 0000005C 081094E5 LDR R1,[R4, #+8] \ 00000060 0030A0E3 MOV R3,#+0 \ 00000064 0020A0E1 MOV R2,R0 \ 00000068 0500A0E1 MOV R0,R5 \ 0000006C ........ BL drawimg2img 445 446 if(!iconstop) \ 00000070 ........ LDR R0,??DataTable18 ;; iconstop \ 00000074 001090E5 LDR R1,[R0, #+0] \ 00000078 10D08DE2 ADD SP,SP,#+16 \ 0000007C 000051E3 CMP R1,#+0 447 { 448 iconstop=icon; \ 00000080 00408005 STREQ R4,[R0, #+0] \ 00000084 F087BD08 POPEQ {R4-R10,PC} 449 } 450 else 451 { 452 ICONS *ico=(ICONS *)iconstop; \ 00000088 000091E5 LDR R0,[R1, #+0] \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 0300000A BEQ ??AddIcon_0 453 while(ico->next) ico = ico->next; \ ??AddIcon_1: \ 00000094 001091E5 LDR R1,[R1, #+0] \ 00000098 000091E5 LDR R0,[R1, #+0] \ 0000009C 000050E3 CMP R0,#+0 \ 000000A0 FBFFFF1A BNE ??AddIcon_1 454 ico->next=icon; \ ??AddIcon_0: \ 000000A4 004081E5 STR R4,[R1, #+0] 455 } 456 } \ 000000A8 F087BDE8 POP {R4-R10,PC} ;; return 457 458 \ In segment CODE, align 4, keep-with-next 459 void FreeIconList() 460 { \ FreeIconList: \ 00000000 10402DE9 PUSH {R4,LR} 461 LockSched(); \ 00000004 460100EF SWI +326 462 ICONS *icon=(ICONS *)iconstop; \ 00000008 ........ LDR R0,??DataTable18 ;; iconstop 463 iconstop=0; \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 004090E5 LDR R4,[R0, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 464 UnlockSched(); \ 00000018 470100EF SWI +327 \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} 465 while(icon) 466 { 467 ICONS *icon_prev = icon; \ ??FreeIconList_0: \ 00000024 0400B0E1 MOVS R0,R4 468 icon = icon->next; \ 00000028 004094E5 LDR R4,[R4, #+0] 469 if(icon_prev) mfree(icon_prev); \ 0000002C 0000000A BEQ ??FreeIconList_1 \ 00000030 150000EF SWI +21 470 } \ ??FreeIconList_1: \ 00000034 000054E3 CMP R4,#+0 \ 00000038 F9FFFF1A BNE ??FreeIconList_0 471 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return 472 \ In segment CODE, align 4, keep-with-next 473 int CountIcon() 474 { 475 int i=0; 476 ICONS *ico=(ICONS *)iconstop; \ CountIcon: \ 00000000 ........ LDR R1,??DataTable18 ;; iconstop \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 001091E5 LDR R1,[R1, #+0] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 1EFF2F01 BXEQ LR 477 while(ico) { i++; ico=ico->next; } \ ??CountIcon_0: \ 00000014 001091E5 LDR R1,[R1, #+0] \ 00000018 010080E2 ADD R0,R0,#+1 \ 0000001C 000051E3 CMP R1,#+0 \ 00000020 FBFFFF1A BNE ??CountIcon_0 478 return i; \ 00000024 1EFF2FE1 BX LR ;; return 479 } 480 481 \ In segment CODE, align 4, keep-with-next 482 IMGHDR *GetIconByItem(int curitem) 483 { 484 // if(curitem > CountIcon()) return 0; 485 ICONS *icon; 486 icon=(ICONS *)iconstop; \ GetIconByItem: \ 00000000 ........ LDR R1,??DataTable18 ;; iconstop 487 int i=0; \ 00000004 0020A0E3 MOV R2,#+0 \ 00000008 001091E5 LDR R1,[R1, #+0] \ 0000000C 010000EA B ??GetIconByItem_0 488 489 while(icon) 490 { 491 if(i==curitem) return (icon->img); 492 i++; 493 icon=icon->next; \ ??GetIconByItem_1: \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 012082E2 ADD R2,R2,#+1 \ ??GetIconByItem_0: \ 00000018 000051E3 CMP R1,#+0 \ 0000001C 0300000A BEQ ??GetIconByItem_2 \ 00000020 000052E1 CMP R2,R0 \ 00000024 F9FFFF1A BNE ??GetIconByItem_1 \ 00000028 080091E5 LDR R0,[R1, #+8] \ 0000002C 1EFF2FE1 BX LR 494 } 495 return 0; \ ??GetIconByItem_2: \ 00000030 0000A0E3 MOV R0,#+0 \ 00000034 1EFF2FE1 BX LR ;; return 496 } 497 498 499 //?????? ??????? ?? 1 ??????? ? ????? (?,y) ??????? ???????. \ In segment CODE, align 4, keep-with-next 500 int drawimg2img(IMGHDR * onse, IMGHDR * timage2, int x, int y, int xRect, int yRect,int xxRect, int yyRect) 501 { \ drawimg2img: \ 00000000 FC4F2DE9 PUSH {R2-R11,LR} \ 00000004 2C209DE5 LDR R2,[SP, #+44] \ 00000008 30309DE5 LDR R3,[SP, #+48] \ 0000000C 34609DE5 LDR R6,[SP, #+52] \ 00000010 38709DE5 LDR R7,[SP, #+56] 502 //????????? ????????? - ???????? ??????? ?? ???????? 503 if (!onse) return 1; \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0100A003 MOVEQ R0,#+1 \ 0000001C F68FBD08 POPEQ {R1,R2,R4-R11,PC} \ 00000020 B240D0E1 LDRH R4,[R0, #+2] \ 00000024 000053E3 CMP R3,#+0 \ 00000028 0100004A BMI ??drawimg2img_0 \ 0000002C 040053E1 CMP R3,R4 \ 00000030 000000BA BLT ??drawimg2img_1 504 if (yRect<0 || yRect>=onse->h) yRect = 0; \ ??drawimg2img_0: \ 00000034 0030A0E3 MOV R3,#+0 505 if (xRect<0 || xRect>=onse->w) xRect = 0; // ??????? ? ???????? ?? ?????? ?????????? ?? ???:) \ ??drawimg2img_1: \ 00000038 B050D0E1 LDRH R5,[R0, #+0] \ 0000003C 000052E3 CMP R2,#+0 \ 00000040 0100004A BMI ??drawimg2img_2 \ 00000044 050052E1 CMP R2,R5 \ 00000048 000000BA BLT ??drawimg2img_3 \ ??drawimg2img_2: \ 0000004C 0020A0E3 MOV R2,#+0 506 if (yyRect==0 || (yRect+yyRect >= onse->h)) yyRect = onse->h-yRect; //e??? ?????? ??????? ??????? ??? ??????? ?? ????????, ?? ????? ?? ????? ???????? \ ??drawimg2img_3: \ 00000050 000057E3 CMP R7,#+0 \ 00000054 0200000A BEQ ??drawimg2img_4 \ 00000058 038087E0 ADD R8,R7,R3 \ 0000005C 040058E1 CMP R8,R4 \ 00000060 000000BA BLT ??drawimg2img_5 \ ??drawimg2img_4: \ 00000064 037044E0 SUB R7,R4,R3 507 if (xxRect==0 || (xRect+xxRect >= onse->w)) xxRect = onse->w-xRect; //e??? ?????? ??????? ??????? ??? ??????? ?? ????????, ?? ????? ?? ????? ???????? \ ??drawimg2img_5: \ 00000068 000056E3 CMP R6,#+0 \ 0000006C 0200000A BEQ ??drawimg2img_6 \ 00000070 024086E0 ADD R4,R6,R2 \ 00000074 050054E1 CMP R4,R5 \ 00000078 000000BA BLT ??drawimg2img_7 \ ??drawimg2img_6: \ 0000007C 026045E0 SUB R6,R5,R2 508 int *scr = (int*)((char*)timage2->bitmap); \ ??drawimg2img_7: \ 00000080 08C091E5 LDR R12,[R1, #+8] 509 int *pic = (int*)((char*)onse->bitmap); \ 00000084 084090E5 LDR R4,[R0, #+8] 510 int i,j; 511 512 for (i = xRect; i < xRect+xxRect; i++) \ 00000088 0250A0E1 MOV R5,R2 \ 0000008C 026086E0 ADD R6,R6,R2 \ 00000090 060055E1 CMP R5,R6 \ 00000094 240000AA BGE ??drawimg2img_8 \ 00000098 037087E0 ADD R7,R7,R3 513 { 514 for(j = yRect; j < yRect+yyRect; j++) \ ??drawimg2img_9: \ 0000009C 0380A0E1 MOV R8,R3 \ 000000A0 070058E1 CMP R8,R7 \ 000000A4 1D0000AA BGE ??drawimg2img_10 515 { 516 //i ? ????????? ??????? ??? ??????? (?? xRect ?? xRect+xxRect) //j ? ????????? ??????? ??? ??????? (?? yRect ?? yRect+yyRect) 517 if (((y+j-yRect)h) && ((x+i-xRect)w) && ((y+j-yRect)>=0) && ((x+i-xRect)>=0) 518 &&(i>=xRect)&&(j>=yRect)&&(iw+i+x-xRect] = pic[(j)*onse->w+i]; \ 000000FC 9AB929E0 MLA R9,R10,R9,R11 \ 00000100 B0A0D0E1 LDRH R10,[R0, #+0] \ 00000104 029049E0 SUB R9,R9,R2 \ 00000108 9A582BE0 MLA R11,R10,R8,R5 \ 0000010C 0BA194E7 LDR R10,[R4, +R11, LSL #+2] \ 00000110 09A18CE7 STR R10,[R12, +R9, LSL #+2] 521 } 522 } \ ??drawimg2img_12: \ 00000114 018088E2 ADD R8,R8,#+1 \ 00000118 070058E1 CMP R8,R7 \ 0000011C E1FFFFBA BLT ??drawimg2img_11 523 } \ ??drawimg2img_10: \ 00000120 015085E2 ADD R5,R5,#+1 \ 00000124 060055E1 CMP R5,R6 \ 00000128 DBFFFFBA BLT ??drawimg2img_9 524 return 0; \ ??drawimg2img_8: \ 0000012C 0000A0E3 MOV R0,#+0 \ 00000130 F68FBDE8 POP {R1,R2,R4-R11,PC} ;; return 525 } \ In segment DATA_I, align 4, align-sorted 526 527 528 POS status[]= 529 { 530 {IS_OFFLINE, 15,14}, 531 {IS_INVISIBLE, 14,14}, 532 {IS_AWAY, 15,14}, 533 {IS_NA, 15,14}, 534 {IS_OCCUPIED, 14,14}, 535 {IS_DND, 14,14}, 536 {IS_DEPRESSION, 15,14}, 537 {IS_EVIL, 15,14}, 538 {IS_HOME, 15,14}, 539 {IS_LUNCH, 16,14}, 540 {IS_WORK, 15,14}, 541 {IS_ONLINE, 14,14}, 542 {IS_FFC, 15,14}, 543 {IS_MSG, 14,14}, 544 {IS_UNKNOWN, 15,14}, 545 {IS_GROUP, 14,14}, 546 {IS_GROUPOFF, 14,14}, 547 {IS_NULLICON, 13,14}, 548 {ICON_ADDCONTACT, 14,14}, 549 {ICON_HEAD, 15,14}, 550 {ICON_LOGO, 0, 0}, 551 {ICON_PING, 15,14}, 552 {ICON_SETTINGS, 15,14}, 553 {ICON_ALL_CAN_SEE, 16,16}, 554 {ICON_VISLIST_CAN_SEE, 16,16}, 555 {ICON_INVISLIST_CANNOT_SEE, 16,16}, 556 {ICON_CONTACTLIST_CAN_SEE, 16,16}, 557 {ICON_NOBODY_CAN_SEE, 16,16}, 558 {ICON_CHECK, 14,14}, 559 {ICON_UNCHECK, 14,14} 560 // TOTAL_ICONS 561 }; 562 563 564 //static const char * const icons_names[TOTAL_ICONS]= 565 const char *icons_names[TOTAL_ICONS]= \ icons_names: \ 00000000 DS8 124 \ 0000007C REQUIRE `?` \ 0000007C DS8 12 \ 00000088 REQUIRE `?` \ status: \ 00000088 DS8 360 \ 000001F0 REQUIRE `?` \ s_top: \ 000001F0 DS8 4 \ 000001F4 REQUIRE `?` \ SmilesImgList: \ 000001F4 DS8 4 \ 000001F8 REQUIRE `?` \ total_smiles: \ 000001F8 DS8 4 \ 000001FC REQUIRE `?` \ total_xstatuses: \ 000001FC DS8 4 \ 00000200 REQUIRE `?` \ pictures_max: \ 00000200 DS8 4 \ 00000204 REQUIRE `?` \ pictures_loaded: \ 00000204 DS8 4 \ 00000208 REQUIRE `?` \ 00000208 DS8 4 \ 0000020C REQUIRE `?` \ 0000020C DS8 4 \ 00000210 REQUIRE `?` \ 00000210 DS8 4 \ 00000214 REQUIRE `?` \ 00000214 DS8 4 \ 00000218 REQUIRE `?` \ xstatuses_max: \ 00000218 DS8 4 \ 0000021C REQUIRE `?` 566 { 567 "offline.png", 568 "invisible.png", 569 "away.png", 570 "na.png", 571 "occupied.png", 572 "dnd.png", 573 "depression.png", 574 "evil.png", 575 "home.png", 576 "lunch.png", 577 "work.png", 578 "online.png", 579 "ffc.png", 580 "message.png", 581 "unknown.png", 582 "groupon.png", 583 "groupoff.png", 584 "null.png", 585 "addcont.png", 586 "head.png", 587 "logo.png", 588 "ping.png", 589 "settings.png", 590 "vis1.png", 591 "vis2.png", 592 "vis3.png", 593 "vis4.png", 594 "vis5.png", 595 "check.png", 596 "uncheck.png", 597 "bg.png" 598 }; 599 \ In segment CODE, align 4, keep-with-next 600 void LoadImages() 601 { \ LoadImages: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 602 // char s[32]; 603 // char s2[32]; 604 605 // int i=0; 606 IMGHDR *icon; 607 { 608 IMGHDR *img = CreateIMGHDRFromPngFile(MakeGlobalString(ICON_PATH,'\\',"status.png"),0);//("4:\\status.png",0); \ 00000004 94529FE5 LDR R5,??LoadImages_0 ;; ICON_PATH \ 00000008 94429FE5 LDR R4,??LoadImages_0+0x4 ;; `?` \ 0000000C 5C10A0E3 MOV R1,#+92 \ 00000010 0420A0E1 MOV R2,R4 \ 00000014 0500A0E1 MOV R0,R5 \ 00000018 ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 E90100EF SWI +489 \ 00000024 0070A0E1 MOV R7,R0 609 // int size = 0; 610 int start = 0; \ 00000028 0090A0E3 MOV R9,#+0 611 int i2 = 0; \ 0000002C 00A0A0E3 MOV R10,#+0 612 // while(iimg,0,0,start,0,start + status[i].w,status[i].h); 622 //AddIcon(icon); 623 if(icon) mfree(icon);*/ 624 start += status[i].w; \ 00000068 8C0096E5 LDR R0,[R6, #+140] \ 0000006C 08D08DE2 ADD SP,SP,#+8 \ 00000070 099080E0 ADD R9,R0,R9 625 } \ ??LoadImages_3: \ 00000074 018088E2 ADD R8,R8,#+1 \ ??LoadImages_1: \ 00000078 28629FE5 LDR R6,??LoadImages_0+0x8 ;; icons_names \ 0000007C 1F0058E3 CMP R8,#+31 \ 00000080 4100002A BCS ??LoadImages_4 \ 00000084 0D0058E3 CMP R8,#+13 \ 00000088 EAFFFF3A BCC ??LoadImages_2 626 else 627 { 628 if(!i2) \ 0000008C 00005AE3 CMP R10,#+0 \ 00000090 0C00001A BNE ??LoadImages_5 629 { 630 if(img) mfree(img); \ 00000094 000057E3 CMP R7,#+0 \ 00000098 0100000A BEQ ??LoadImages_6 \ 0000009C 0700A0E1 MOV R0,R7 \ 000000A0 150000EF SWI +21 631 img = CreateIMGHDRFromPngFile(MakeGlobalString(ICON_PATH,'\\',"image.png"),0); \ ??LoadImages_6: \ 000000A4 0C2084E2 ADD R2,R4,#+12 \ 000000A8 5C10A0E3 MOV R1,#+92 \ 000000AC 0500A0E1 MOV R0,R5 \ 000000B0 ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 E90100EF SWI +489 \ 000000BC 0070A0E1 MOV R7,R0 632 i2 = 1; \ 000000C0 01A0A0E3 MOV R10,#+1 633 start = 0; \ 000000C4 0090A0E3 MOV R9,#+0 634 } 635 if(i == ICON_LOGO) \ ??LoadImages_5: \ 000000C8 140058E3 CMP R8,#+20 \ 000000CC 1500001A BNE ??LoadImages_7 636 { 637 // if(icon) mfree(icon); 638 icon = CreateIMGHDRFromPngFile( MakeGlobalString(ICON_PATH,'\\',icons_names[ICON_LOGO]),0); \ 000000D0 502096E5 LDR R2,[R6, #+80] \ 000000D4 5C10A0E3 MOV R1,#+92 \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 000000E0 0010A0E3 MOV R1,#+0 \ 000000E4 E90100EF SWI +489 \ 000000E8 00B0A0E1 MOV R11,R0 \ 000000EC B220DBE1 LDRH R2,[R11, #+2] \ 000000F0 B010DBE1 LDRH R1,[R11, #+0] \ 000000F4 0030A0E3 MOV R3,#+0 \ 000000F8 0200A0E1 MOV R0,R2 \ 000000FC 01002DE9 PUSH {R0} \ 00000100 0100A0E1 MOV R0,R1 \ 00000104 01002DE9 PUSH {R0} \ 00000108 0B00A0E1 MOV R0,R11 639 AddIcon(icon,icon->w,icon->h,0,icon->w,icon->h); \ 0000010C ........ BL AddIcon 640 if(icon) mfree(icon); \ 00000110 00005BE3 CMP R11,#+0 \ 00000114 08D08DE2 ADD SP,SP,#+8 \ 00000118 0100000A BEQ ??LoadImages_8 \ 0000011C 0B00A0E1 MOV R0,R11 \ 00000120 150000EF SWI +21 641 i++; \ ??LoadImages_8: \ 00000124 018088E2 ADD R8,R8,#+1 642 } 643 /* 644 icon = CreateImgr(status[i].w, status[i].h); 645 drawimg2img(img,icon,0,0,start,0,start + status[i].w,status[i].h); 646 AddIcon(icon); 647 if(icon) mfree(icon);*/ 648 AddIcon(img,status[i].w,status[i].h,start,start + status[i].w,status[i].h); \ ??LoadImages_7: \ 00000128 0C00A0E3 MOV R0,#+12 \ 0000012C 90682BE0 MLA R11,R0,R8,R6 \ 00000130 0930A0E1 MOV R3,R9 \ 00000134 90009BE5 LDR R0,[R11, #+144] \ 00000138 01002DE9 PUSH {R0} \ 0000013C 8C009BE5 LDR R0,[R11, #+140] \ 00000140 090080E0 ADD R0,R0,R9 \ 00000144 01002DE9 PUSH {R0} \ 00000148 90209BE5 LDR R2,[R11, #+144] \ 0000014C 8C109BE5 LDR R1,[R11, #+140] \ 00000150 0700A0E1 MOV R0,R7 \ 00000154 ........ BL AddIcon 649 start += status[i].w + (i >= ICON_ALL_CAN_SEE && i <= ICON_NOBODY_CAN_SEE?1:0); \ 00000158 170058E3 CMP R8,#+23 \ 0000015C 08D08DE2 ADD SP,SP,#+8 \ 00000160 0200003A BCC ??LoadImages_9 \ 00000164 1C0058E3 CMP R8,#+28 \ 00000168 0100A033 MOVCC R0,#+1 \ 0000016C 0000003A BCC ??LoadImages_10 \ ??LoadImages_9: \ 00000170 0000A0E3 MOV R0,#+0 \ ??LoadImages_10: \ 00000174 8C109BE5 LDR R1,[R11, #+140] \ 00000178 010080E0 ADD R0,R0,R1 \ 0000017C 099080E0 ADD R9,R0,R9 650 if(start > img->w) break; \ 00000180 B000D7E1 LDRH R0,[R7, #+0] \ 00000184 090050E1 CMP R0,R9 \ 00000188 B9FFFFAA BGE ??LoadImages_3 651 } 652 } 653 654 icon = CreateIMGHDRFromPngFile( MakeGlobalString(ICON_PATH,'\\',icons_names[ICON_BG]),0); \ ??LoadImages_4: \ 0000018C 782096E5 LDR R2,[R6, #+120] \ 00000190 5C10A0E3 MOV R1,#+92 \ 00000194 0500A0E1 MOV R0,R5 \ 00000198 ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 0000019C 0010A0E3 MOV R1,#+0 \ 000001A0 E90100EF SWI +489 \ 000001A4 0080A0E1 MOV R8,R0 \ 000001A8 B220D8E1 LDRH R2,[R8, #+2] \ 000001AC B010D8E1 LDRH R1,[R8, #+0] \ 000001B0 0030A0E3 MOV R3,#+0 \ 000001B4 0200A0E1 MOV R0,R2 \ 000001B8 01002DE9 PUSH {R0} \ 000001BC 0100A0E1 MOV R0,R1 \ 000001C0 01002DE9 PUSH {R0} \ 000001C4 0800A0E1 MOV R0,R8 655 AddIcon(icon,icon->w,icon->h,0,icon->w,icon->h); \ 000001C8 ........ BL AddIcon 656 if(icon) mfree(icon); \ 000001CC 000058E3 CMP R8,#+0 \ 000001D0 08D08DE2 ADD SP,SP,#+8 \ 000001D4 0100000A BEQ ??LoadImages_11 \ 000001D8 0800A0E1 MOV R0,R8 \ 000001DC 150000EF SWI +21 657 658 mfree(img); \ ??LoadImages_11: \ 000001E0 0700A0E1 MOV R0,R7 \ 000001E4 150000EF SWI +21 659 img = CreateIMGHDRFromPngFile(MakeGlobalString(ICON_PATH,'\\',"xst.png"),0); \ 000001E8 182084E2 ADD R2,R4,#+24 \ 000001EC 5C10A0E3 MOV R1,#+92 \ 000001F0 0500A0E1 MOV R0,R5 \ 000001F4 ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 000001F8 0010A0E3 MOV R1,#+0 \ 000001FC E90100EF SWI +489 \ 00000200 0050A0E1 MOV R5,R0 660 start = 0; \ 00000204 0070A0E3 MOV R7,#+0 661 total_xstatuses = 0; \ 00000208 0000A0E3 MOV R0,#+0 \ 0000020C FC0186E5 STR R0,[R6, #+508] 662 for(int i=0;i<35;i++) \ 00000210 0080A0E1 MOV R8,R0 663 { 664 AddXIcon(img,16,16,start,start + 16,16); \ ??LoadImages_12: \ 00000214 1000A0E3 MOV R0,#+16 \ 00000218 01002DE9 PUSH {R0} \ 0000021C 0730A0E1 MOV R3,R7 \ 00000220 1020A0E3 MOV R2,#+16 \ 00000224 1010A0E3 MOV R1,#+16 \ 00000228 100087E2 ADD R0,R7,#+16 \ 0000022C 01002DE9 PUSH {R0} 665 start += 17; \ 00000230 117087E2 ADD R7,R7,#+17 \ 00000234 0500A0E1 MOV R0,R5 \ 00000238 ........ BL AddXIcon 666 xstatuses_max = total_xstatuses++; \ 0000023C FC0196E5 LDR R0,[R6, #+508] \ 00000240 011080E2 ADD R1,R0,#+1 \ 00000244 FC1186E5 STR R1,[R6, #+508] \ 00000248 180286E5 STR R0,[R6, #+536] 667 pictures_max++; \ 0000024C 000296E5 LDR R0,[R6, #+512] \ 00000250 010080E2 ADD R0,R0,#+1 \ 00000254 000286E5 STR R0,[R6, #+512] 668 pictures_loaded++; \ 00000258 040296E5 LDR R0,[R6, #+516] \ 0000025C 010080E2 ADD R0,R0,#+1 \ 00000260 040286E5 STR R0,[R6, #+516] 669 if(start > img->w) break; \ 00000264 B000D5E1 LDRH R0,[R5, #+0] \ 00000268 08D08DE2 ADD SP,SP,#+8 \ 0000026C 070050E1 CMP R0,R7 \ 00000270 020000BA BLT ??LoadImages_13 670 } \ 00000274 018088E2 ADD R8,R8,#+1 \ 00000278 230058E3 CMP R8,#+35 \ 0000027C E4FFFFBA BLT ??LoadImages_12 671 mfree(img); \ ??LoadImages_13: \ 00000280 0500A0E1 MOV R0,R5 \ 00000284 150000EF SWI +21 672 } 673 674 LockSched(); \ 00000288 460100EF SWI +326 675 ShowMSG(1,(int)"Pictures Loaded!"); \ 0000028C 201084E2 ADD R1,R4,#+32 \ 00000290 0100A0E3 MOV R0,#+1 \ 00000294 480100EF SWI +328 676 UnlockSched(); \ 00000298 470100EF SWI +327 677 /* 678 char s[3]; 679 extern int CountIcon(); 680 sprintf(s,"count = %d",CountIcon()); 681 ShowMSG(1,(int)s);*/ 682 /* else 683 { 684 strcpy(s2,icons_names[i]); 685 s2[strlen(s2)-4]=0;//отрезаем '.png' 686 snprintf(s,32,"%s_small.png",s2); 687 688 if( get_file_size(MakeGlobalString(ICON_PATH,'\\',s)) ) 689 icon = CreateIMGHDRFromPngFile( MakeGlobalString(ICON_PATH,'\\',s), 0 ); 690 else 691 icon = CreateIMGHDRFromPngFile( MakeGlobalString(ICON_PATH,'\\',icons_names[i]), 0 ); 692 693 AddIcon(icon); 694 i++; 695 }*/ 696 } \ 0000029C F08FBDE8 POP {R4-R11,PC} ;; return \ ??LoadImages_0: \ 000002A0 ........ DC32 ICON_PATH \ 000002A4 ........ DC32 `?` \ 000002A8 ........ DC32 icons_names 697 698 699 \ In segment CODE, align 4, keep-with-next 700 void ProcessNextImg(void) 701 { 702 xstatuses_load=0; \ ProcessNextImg: \ 00000000 ........ LDR R0,??DataTable19 ;; xstatuses_load \ 00000004 00402DE9 PUSH {LR} \ 00000008 0010A0E3 MOV R1,#+0 \ 0000000C 001080E5 STR R1,[R0, #+0] 703 SUBPROC((void *)InitSmiles); \ 00000010 ........ LDR R0,??DataTable20 ;; InitSmiles \ 00000014 710100EF SWI +369 704 // SUBPROC((void *)ProcessNextXStatImg); 705 // GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XSTATUSIMG_PROCESSED,&gipc); 706 } \ 00000018 0080BDE8 POP {PC} ;; return \ In segment CODE, align 4, keep-with-next \ ??DataTable4: \ 00000000 ........ DC32 SMILE_FILE \ In segment CODE, align 4, keep-with-next \ ??DataTable7: \ 00000000 ........ DC32 ipc_my_name \ In segment CODE, align 4, keep-with-next \ ??DataTable8: \ 00000000 ........ DC32 icons_names \ In segment CODE, align 4, keep-with-next \ ??DataTable12: \ 00000000 ........ DC32 xiconstop \ In segment CODE, align 4, keep-with-next \ ??DataTable18: \ 00000000 ........ DC32 iconstop \ In segment CODE, align 4, keep-with-next \ ??DataTable19: \ 00000000 ........ DC32 xstatuses_load \ In segment CODE, align 4, keep-with-next \ ??DataTable20: \ 00000000 ........ DC32 InitSmiles \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 ............ DC32 `?`, `?` \ .... \ 00000008 ............ DC32 `?`, `?` \ .... \ 00000010 ............ DC32 `?`, `?` \ .... \ 00000018 ............ DC32 `?`, `?` \ .... \ 00000020 ............ DC32 `?`, `?` \ .... \ 00000028 ............ DC32 `?`, `?` \ .... \ 00000030 ............ DC32 `?`, `?` \ .... \ 00000038 ............ DC32 `?`, `?` \ .... \ 00000040 ............ DC32 `?`, `?` \ .... \ 00000048 ............ DC32 `?`, `?` \ .... \ 00000050 ............ DC32 `?`, `?` \ .... \ 00000058 ............ DC32 `?`, `?` \ .... \ 00000060 ............ DC32 `?`, `?` \ .... \ 00000068 ............ DC32 `?`, `?` \ .... \ 00000070 ............ DC32 `?`, `?` \ .... \ 00000078 ........ DC32 `?` \ `?`: \ 0000007C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000088 000000000F00 DC32 0, 15, 14, 1, 14, 14, 2, 15, 14, 3, 15, 14, 4, 14, 14, 5, 14, 14 \ 00000E000000 \ 010000000E00 \ 00000E000000 \ 020000000F00 \ 00000E000000 \ 030000000F00 \ 00000E000000 \ 040000000E00 \ 00000E000000 \ 050000000E00 \ 00000E000000 \ 000000D0 060000000F00 DC32 6, 15, 14, 7, 15, 14, 8, 15, 14, 9, 16, 14, 10, 15, 14, 11, 14, 14 \ 00000E000000 \ 070000000F00 \ 00000E000000 \ 080000000F00 \ 00000E000000 \ 090000001000 \ 00000E000000 \ 0A0000000F00 \ 00000E000000 \ 0B0000000E00 \ 00000E000000 \ 00000118 0C0000000F00 DC32 12, 15, 14, 13, 14, 14, 14, 15, 14, 15, 14, 14, 16, 14, 14, 17, 13 \ 00000E000000 \ 0D0000000E00 \ 00000E000000 \ 0E0000000F00 \ 00000E000000 \ 0F0000000E00 \ 00000E000000 \ 100000000E00 \ 00000E000000 \ 110000000D00 \ 0000 \ 0000015C 0E0000001200 DC32 14, 18, 14, 14, 19, 15, 14, 20, 0, 0, 21, 15, 14, 22, 15, 14, 23 \ 00000E000000 \ 0E0000001300 \ 00000F000000 \ 0E0000001400 \ 000000000000 \ 000000001500 \ 00000F000000 \ 0E0000001600 \ 00000F000000 \ 0E0000001700 \ 0000 \ 000001A0 100000001000 DC32 16, 16, 24, 16, 16, 25, 16, 16, 26, 16, 16, 27, 16, 16, 28, 14, 14 \ 000018000000 \ 100000001000 \ 000019000000 \ 100000001000 \ 00001A000000 \ 100000001000 \ 00001B000000 \ 100000001000 \ 00001C000000 \ 0E0000000E00 \ 0000 \ 000001E4 1D0000000E00 DC32 29, 14, 14 \ 00000E000000 \ `?`: \ 000001F0 00000000 DC32 0H \ `?`: \ 000001F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000200 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000204 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000208 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000020C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000210 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000214 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000218 00000000 DC32 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6C6F676F2E70 DC8 "logo.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E672E70 DC8 "ping.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73657474696E DC8 "settings.png" \ 67732E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973312E70 DC8 "vis1.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973322E70 DC8 "vis2.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973332E70 DC8 "vis3.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 776F726B2E70 DC8 "work.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973342E70 DC8 "vis4.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973352E70 DC8 "vis5.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 636865636B2E DC8 "check.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 756E63686563 DC8 "uncheck.png" \ 6B2E706E6700 \ In segment DATA_C, align 1, align-sorted \ 00000000 5C00 DC8 "\\" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 536D696C6573 DC8 "Smiles Loaded!" \ 204C6F616465 \ 642100 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 737461747573 DC8 "status.png" \ 2E706E6700 \ 0000000B 00 DC8 0 \ 0000000C 696D6167652E DC8 "image.png" \ 706E6700 \ 00000016 0000 DC8 0, 0 \ 00000018 7873742E706E DC8 "xst.png" \ 6700 \ 00000020 506963747572 DC8 "Pictures Loaded!" \ 6573204C6F61 \ 6465642100 \ 00000031 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F66666C696E DC8 "offline.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 696E76697369 DC8 "invisible.png" \ 626C652E706E \ 6700 \ 0000000E 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 617761792E70 DC8 "away.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E612E706E67 DC8 "na.png" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6363757069 DC8 "occupied.png" \ 65642E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 646E642E706E DC8 "dnd.png" \ 6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 646570726573 DC8 "depression.png" \ 73696F6E2E70 \ 6E6700 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6576696C2E70 DC8 "evil.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 686F6D652E70 DC8 "home.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6C756E63682E DC8 "lunch.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 62672E706E67 DC8 "bg.png" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6E6C696E65 DC8 "online.png" \ 2E706E6700 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6666632E706E DC8 "ffc.png" \ 6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6D6573736167 DC8 "message.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 756E6B6E6F77 DC8 "unknown.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupon.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupoff.png" \ 66662E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E756C6C2E70 DC8 "null.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616464636F6E DC8 "addcont.png" \ 742E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 686561642E70 DC8 "head.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 707 #endif Maximum stack usage in bytes: Function CSTACK -------- ------ AddIcon 48 AddXIcon 48 CheckSmiles 64 CountIcon 0 CountXIcon 0 FreeIconList 8 FreeSmiles 28 FreeXIconList 12 FreeXStatusesImg 4 GetIconByItem 0 GetXIconByItem 0 InitSmiles 68 InitXStatusesImg 4 LoadImages 44 ProcessNextImg 4 ProcessNextSmile 160 ProcessNextXStatImg 4 drawimg2img 44 get_file_size 48 Segment part sizes: Function/Label Bytes -------------- ----- xstatuses_load 4 FreeSmiles 212 InitSmiles 216 CheckSmiles 228 ProcessNextSmile 840 FreeXStatusesImg 4 InitXStatusesImg 28 xiconstop 4 AddXIcon 176 FreeXIconList 92 CountXIcon 40 get_file_size 40 GetXIconByItem 56 ProcessNextXStatImg 28 iconstop 4 AddIcon 172 FreeIconList 64 CountIcon 40 GetIconByItem 56 drawimg2img 308 icons_names 540 LoadImages 684 ProcessNextImg 28 ??DataTable4 4 ??DataTable7 4 ??DataTable8 4 ??DataTable12 4 ??DataTable18 4 ??DataTable19 4 ??DataTable20 4 ? 540 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 12 ? 12 ? 12 ? 2 ? 16 ? 52 ? 12 ? 16 ? 12 ? 8 ? 16 ? 8 ? 16 ? 12 ? 12 ? 12 ? 8 ? 12 ? 8 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 Others 124 3 440 bytes in segment CODE 446 bytes in segment DATA_C 540 bytes in segment DATA_I 540 bytes in segment DATA_ID 12 bytes in segment DATA_Z 24 bytes in segment INITTAB 3 340 bytes of CODE memory (+ 124 bytes shared) 986 bytes of CONST memory 552 bytes of DATA memory Errors: none Warnings: none