############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 04/Apr/2008 21:11:54 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\cl_work.c # # Command line = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\cl_work.c # # --preprocess D:\Pasha\elf\_MY_PROJECT_\naticq_mod\Re # # lease_SGOLD\List\ -lC D:\Pasha\elf\_MY_PROJECT_\nati # # cq_mod\Release_SGOLD\List\ -o # # D:\Pasha\elf\_MY_PROJECT_\naticq_mod\Release_SGOLD\O # # bj\ -s9 --no_unroll --cpu_mode arm --endian little # # --cpu ARM926EJ-S --stack_align 4 --interwork -e # # --fpu None --dlib_config "D:\Pasha\Embedded # # Workbench 4.0 Evaluation2\ARM\LIB\dl5tpainl8n.h" -I # # "D:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\INC\" --inline_threshold=2 # # List file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\Release_SGOLD\L # # ist\cl_work.lst # # Object file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\Release_SGOLD\O # # bj\cl_work.r79 # # # # # ############################################################################## D:\Pasha\elf\_MY_PROJECT_\naticq_mod\cl_work.c 1 #include "../inc/swilib.h" 2 #include "NatICQ.h" 3 #include "strings.h" 4 #include "main.h" 5 #include "cl_work.h" 6 7 extern volatile unsigned int GROUP_CACHE; //Текущая группа для добавления 8 extern volatile CLIST *cltop; 9 extern int Is_Show_Groups; 10 extern char ContactT9Key[32]; 11 extern int Is_Show_Offline; 12 extern int IsActiveUp; 13 #ifdef BCFGGEN 14 extern const unsigned int UIN; 15 extern const char TEMPLATES_PATH[]; 16 #else 17 extern unsigned int UIN; 18 extern char TEMPLATES_PATH[]; 19 #endif \ In segment CODE, align 4, keep-with-next 20 void FreeXText(CLIST *t) 21 { \ FreeXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 22 if (t->xtext) {mfree(t->xtext);t->xtext=NULL;} \ 00000008 940094E5 LDR R0,[R4, #+148] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} \ 00000014 150000EF SWI +21 \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 940084E5 STR R0,[R4, #+148] 23 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 24 25 //Уничтожить список \ In segment CODE, align 4, keep-with-next 26 void FreeCLIST(void) 27 { 28 CLIST *cl=(CLIST*)cltop; \ FreeCLIST: \ 00000000 ........ LDR R0,??DataTable13 ;; cltop \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 004090E5 LDR R4,[R0, #+0] 29 cltop=0; \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] \ 00000014 000054E3 CMP R4,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 30 while(cl) 31 { 32 CLIST *p; 33 if (cl->log) FreeLOGQ(&cl->log); \ ??FreeCLIST_0: \ 0000001C 800094E5 LDR R0,[R4, #+128] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 0100000A BEQ ??FreeCLIST_1 \ 00000028 800084E2 ADD R0,R4,#+128 \ 0000002C ........ _BLF FreeLOGQ,??FreeLOGQ??rA 34 if (cl->answer) mfree(cl->answer); \ ??FreeCLIST_1: \ 00000030 840094E5 LDR R0,[R4, #+132] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 0000000A BEQ ??FreeCLIST_2 \ 0000003C 150000EF SWI +21 35 if (cl->xtext) mfree(cl->xtext); \ ??FreeCLIST_2: \ 00000040 940094E5 LDR R0,[R4, #+148] \ 00000044 000050E3 CMP R0,#+0 \ 00000048 0000000A BEQ ??FreeCLIST_3 \ 0000004C 150000EF SWI +21 36 p=cl; \ ??FreeCLIST_3: \ 00000050 0400A0E1 MOV R0,R4 37 cl=(CLIST*)(cl->next); \ 00000054 004094E5 LDR R4,[R4, #+0] 38 mfree(p); \ 00000058 150000EF SWI +21 39 } \ 0000005C 000054E3 CMP R4,#+0 \ 00000060 EDFFFF1A BNE ??FreeCLIST_0 40 } \ 00000064 1080BDE8 POP {R4,PC} ;; return 41 42 //Прописать всех в offline \ In segment CODE, align 4, keep-with-next 43 void FillAllOffline(void) 44 { 45 CLIST *cl=(CLIST*)cltop; \ FillAllOffline: \ 00000000 ........ LDR R0,??DataTable13 ;; cltop \ 00000004 70402DE9 PUSH {R4-R6,LR} \ 00000008 004090E5 LDR R4,[R0, #+0] \ 0000000C 000054E3 CMP R4,#+0 \ 00000010 7080BD08 POPEQ {R4-R6,PC} \ 00000014 FF50A0E3 MOV R5,#+255 \ 00000018 FF5C85E3 ORR R5,R5,#0xFF00 46 while(cl) 47 { 48 if (!cl->isgroup) \ ??FillAllOffline_0: \ 0000001C 080094E5 LDR R0,[R4, #+8] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 0800001A BNE ??FillAllOffline_1 49 { 50 LOGQ *lp=cl->log; \ 00000028 801094E5 LDR R1,[R4, #+128] \ 0000002C 000051E3 CMP R1,#+0 \ 00000030 0500000A BEQ ??FillAllOffline_1 51 while(lp) 52 { 53 lp->ID|=0x18000; \ ??FillAllOffline_2: \ 00000034 082091E5 LDR R2,[R1, #+8] \ 00000038 602B82E3 ORR R2,R2,#0x18000 \ 0000003C 082081E5 STR R2,[R1, #+8] 54 lp=lp->next; \ 00000040 001091E5 LDR R1,[R1, #+0] 55 } \ 00000044 000051E3 CMP R1,#+0 \ 00000048 F9FFFF1A BNE ??FillAllOffline_2 56 } 57 if ((cl->state!=0xFFFF)&& 58 (!cl->isgroup)) //by BoBa 2.05.2007 \ ??FillAllOffline_1: \ 0000004C B415D4E1 LDRH R1,[R4, #+84] \ 00000050 050051E1 CMP R1,R5 \ 00000054 0900000A BEQ ??FillAllOffline_3 \ 00000058 000050E3 CMP R0,#+0 \ 0000005C 0700001A BNE ??FillAllOffline_3 59 { 60 CLIST *p=cl; \ 00000060 0460A0E1 MOV R6,R4 61 p->state=0xFFFF; \ 00000064 B455C6E1 STRH R5,[R6, #+84] 62 FreeXText(p); \ 00000068 0600A0E1 MOV R0,R6 \ 0000006C ........ BL FreeXText 63 cl=cl->next; \ 00000070 004094E5 LDR R4,[R4, #+0] 64 ChangeContactPos(p); \ 00000074 0600A0E1 MOV R0,R6 \ 00000078 ........ BL ChangeContactPos 65 continue; \ 0000007C 000000EA B ??FillAllOffline_4 66 } 67 cl=(CLIST*)(cl->next); \ ??FillAllOffline_3: \ 00000080 004094E5 LDR R4,[R4, #+0] 68 } \ ??FillAllOffline_4: \ 00000084 000054E3 CMP R4,#+0 \ 00000088 E3FFFF1A BNE ??FillAllOffline_0 69 } \ 0000008C 7080BDE8 POP {R4-R6,PC} ;; return 70 71 \ In segment CODE, align 4, keep-with-next 72 CLIST *FindContactByUin(unsigned int uin) 73 { 74 CLIST *t; 75 t=(CLIST *)cltop; \ FindContactByUin: \ 00000000 ........ LDR R1,??DataTable13 ;; cltop 76 while(t) 77 { 78 if ((t->uin==uin)&&(!t->isgroup)) break; 79 t=t->next; \ ??FindContactByUin_0: \ 00000004 001091E5 LDR R1,[R1, #+0] \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0400000A BEQ ??FindContactByUin_1 \ 00000010 0C2091E5 LDR R2,[R1, #+12] \ 00000014 000052E1 CMP R2,R0 \ 00000018 08209105 LDREQ R2,[R1, #+8] \ 0000001C 00005203 CMPEQ R2,#+0 \ 00000020 F7FFFF1A BNE ??FindContactByUin_0 80 } 81 return(t); \ ??FindContactByUin_1: \ 00000024 0100A0E1 MOV R0,R1 \ 00000028 1EFF2FE1 BX LR ;; return 82 } 83 \ In segment CODE, align 4, keep-with-next 84 CLIST *FindGroupByID(unsigned int grp) 85 { 86 CLIST *t; 87 t=(CLIST *)cltop; \ FindGroupByID: \ 00000000 ........ LDR R1,??DataTable13 ;; cltop 88 while(t) 89 { 90 if ((t->group==grp)&&(t->isgroup)) break; 91 t=t->next; \ ??FindGroupByID_0: \ 00000004 001091E5 LDR R1,[R1, #+0] \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0500000A BEQ ??FindGroupByID_1 \ 00000010 102091E5 LDR R2,[R1, #+16] \ 00000014 000052E1 CMP R2,R0 \ 00000018 F9FFFF1A BNE ??FindGroupByID_0 \ 0000001C 082091E5 LDR R2,[R1, #+8] \ 00000020 000052E3 CMP R2,#+0 \ 00000024 F6FFFF0A BEQ ??FindGroupByID_0 92 } 93 return(t); \ ??FindGroupByID_1: \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 1EFF2FE1 BX LR ;; return 94 } 95 96 //Ключи для поиска по T9 \ In segment DATA_C, align 4, align-sorted 97 static const char table_T9Key[256]= \ table_T9Key: \ 00000000 313131313131 DC8 31H, 31H, 31H, 31H, 31H, 31H, 31H, 31H \ 3131 \ 00000008 313131313131 DC8 31H, 31H, 31H, 31H, 31H, 31H, 31H, 31H \ 3131 \ 00000010 313131313131 DC8 31H, 31H, 31H, 31H, 31H, 31H, 31H, 31H \ 3131 \ 00000018 313131313131 DC8 31H, 31H, 31H, 31H, 31H, 31H, 31H, 31H \ 3131 \ 00000020 31303030312A DC8 31H, 30H, 30H, 30H, 31H, 2AH, 2AH, 30H \ 2A30 \ 00000028 2A2A2A303030 DC8 2AH, 2AH, 2AH, 30H, 30H, 30H, 30H, 2AH \ 302A \ 00000030 303132333435 DC8 30H, 31H, 32H, 33H, 34H, 35H, 36H, 37H \ 3637 \ 00000038 383930302A2A DC8 38H, 39H, 30H, 30H, 2AH, 2AH, 2AH, 30H \ 2A30 \ 00000040 303232323333 DC8 30H, 32H, 32H, 32H, 33H, 33H, 33H, 34H \ 3334 \ 00000048 343435353536 DC8 34H, 34H, 35H, 35H, 35H, 36H, 36H, 36H \ 3636 \ 00000050 373737373838 DC8 37H, 37H, 37H, 37H, 38H, 38H, 38H, 39H \ 3839 \ 00000058 393939312A31 DC8 39H, 39H, 39H, 31H, 2AH, 31H, 31H, 30H \ 3130 \ 00000060 313232323333 DC8 31H, 32H, 32H, 32H, 33H, 33H, 33H, 34H \ 3334 \ 00000068 343435353536 DC8 34H, 34H, 35H, 35H, 35H, 36H, 36H, 36H \ 3636 \ 00000070 373737373838 DC8 37H, 37H, 37H, 37H, 38H, 38H, 38H, 39H \ 3839 \ 00000078 393939313131 DC8 39H, 39H, 39H, 31H, 31H, 31H, 2AH, 31H \ 2A31 \ 00000080 313131313131 DC8 31H, 31H, 31H, 31H, 31H, 31H, 31H, 31H \ 3131 \ 00000088 313131313131 DC8 31H, 31H, 31H, 31H, 31H, 31H, 31H, 31H \ 3131 \ 00000090 313131313131 DC8 31H, 31H, 31H, 31H, 31H, 31H, 31H, 31H \ 3131 \ 00000098 313131313131 DC8 31H, 31H, 31H, 31H, 31H, 31H, 31H, 31H \ 3131 \ 000000A0 313131313131 DC8 31H, 31H, 31H, 31H, 31H, 31H, 31H, 31H \ 3131 \ 000000A8 333131313131 DC8 33H, 31H, 31H, 31H, 31H, 31H, 31H, 31H \ 3131 \ 000000B0 313131313131 DC8 31H, 31H, 31H, 31H, 31H, 31H, 31H, 31H \ 3131 \ 000000B8 333131313131 DC8 33H, 31H, 31H, 31H, 31H, 31H, 31H, 31H \ 3131 \ 000000C0 323232323333 DC8 32H, 32H, 32H, 32H, 33H, 33H, 33H, 33H \ 3333 \ 000000C8 343434343535 DC8 34H, 34H, 34H, 34H, 35H, 35H, 35H, 36H \ 3536 \ 000000D0 363637373737 DC8 36H, 36H, 37H, 37H, 37H, 37H, 38H, 38H \ 3838 \ 000000D8 383838393939 DC8 38H, 38H, 38H, 39H, 39H, 39H, 39H, 39H \ 3939 \ 000000E0 323232323333 DC8 32H, 32H, 32H, 32H, 33H, 33H, 33H, 33H \ 3333 \ 000000E8 343434343535 DC8 34H, 34H, 34H, 34H, 35H, 35H, 35H, 36H \ 3536 \ 000000F0 363637373737 DC8 36H, 36H, 37H, 37H, 37H, 37H, 38H, 38H \ 3838 \ 000000F8 383838393939 DC8 38H, 38H, 38H, 39H, 39H, 39H, 39H, 39H \ 3939 98 "11111111111111111111111111111111" 99 "10001**0***0000*012345678900***0" 100 "0222333444555666777788899991*110" 101 "122233344455566677778889999111*1" 102 "11111111111111111111111111111111" 103 "11111111311111111111111131111111" 104 "22223333444455566677778888899999" 105 "22223333444455566677778888899999"; 106 107 \ In segment CODE, align 4, keep-with-next 108 CLIST *FindContactByNS(int *i, int si, int act_flag, CLIST *search_contact) 109 { \ FindContactByNS: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0040A0E1 MOV R4,R0 110 CLIST *t; 111 t=(CLIST *)cltop; \ 00000008 ........ LDR R0,??DataTable13 ;; cltop \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 008090E5 LDR R8,[R0, #+0] \ 00000014 0260A0E1 MOV R6,R2 \ 00000018 0370A0E1 MOV R7,R3 112 char *s; 113 char *d; 114 int c; 115 int grp_id=0; \ 0000001C 0090A0E3 MOV R9,#+0 116 int grp_dis=0; \ 00000020 00A0A0E3 MOV R10,#+0 \ 00000024 050000EA B ??FindContactByNS_0 117 while(t) 118 { 119 if (t->isgroup) 120 { 121 grp_id=t->group; 122 grp_dis=t->state; 123 } 124 if (act_flag<2) 125 { 126 if ((act_flag)&&(!t->isactive)) goto L_NOT9; 127 if ((!act_flag)&&(t->isactive)) goto L_NOT9; 128 } 129 if ((si==IS_ANY)||(GetIconIndex(t)==si)) 130 { 131 s=ContactT9Key; 132 if ((!Is_Show_Groups)&&(t->isgroup)) goto L_NOT9; 133 134 if ((!t->isgroup)&&(t->group==grp_id)&&(grp_dis)&&(!(*s))) goto L_NOT9; 135 136 if (!Is_Show_Offline) // by Seklth 13.06.2007 137 if ((!t->isgroup)&&(!t->isactive)&&(t->state==0xFFFF)&&(t->uin!=UIN)&&(!(*s))) 138 if (!t->isunread) goto L_NOT9; 139 140 d=t->name; 141 while(c=*s++) 142 { 143 if (c!=table_T9Key[*d++]) goto L_NOT9; 144 } 145 if (search_contact==t) return t; //Нашли контакт по адресу 146 if (!(*i)) return(t); \ ??FindContactByNS_1: \ 00000028 000094E5 LDR R0,[R4, #+0] \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 4B00000A BEQ ??FindContactByNS_2 147 (*i)--; \ 00000034 010040E2 SUB R0,R0,#+1 \ 00000038 000084E5 STR R0,[R4, #+0] 148 } 149 L_NOT9: 150 t=t->next; \ ??FindContactByNS_3: \ 0000003C 008098E5 LDR R8,[R8, #+0] \ ??FindContactByNS_0: \ 00000040 000058E3 CMP R8,#+0 \ 00000044 4800000A BEQ ??FindContactByNS_4 \ 00000048 080098E5 LDR R0,[R8, #+8] \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 10909815 LDRNE R9,[R8, #+16] \ 00000054 B4A5D811 LDRHNE R10,[R8, #+84] \ 00000058 020056E3 CMP R6,#+2 \ 0000005C 070000AA BGE ??FindContactByNS_5 \ 00000060 8C0098E5 LDR R0,[R8, #+140] \ 00000064 000056E3 CMP R6,#+0 \ 00000068 0200000A BEQ ??FindContactByNS_6 \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 0200001A BNE ??FindContactByNS_5 \ 00000074 F0FFFFEA B ??FindContactByNS_3 \ ??FindContactByNS_6: \ 00000078 000050E3 CMP R0,#+0 \ 0000007C EEFFFF1A BNE ??FindContactByNS_3 \ ??FindContactByNS_5: \ 00000080 010075E3 CMN R5,#+1 \ 00000084 0300000A BEQ ??FindContactByNS_7 \ 00000088 0800A0E1 MOV R0,R8 \ 0000008C ........ _BLF GetIconIndex,??GetIconIndex??rA \ 00000090 050050E1 CMP R0,R5 \ 00000094 E8FFFF1A BNE ??FindContactByNS_3 \ ??FindContactByNS_7: \ 00000098 ........ LDR R3,??DataTable12 ;; Is_Show_Groups \ 0000009C D0209FE5 LDR R2,??FindContactByNS_8 ;; ContactT9Key \ 000000A0 003093E5 LDR R3,[R3, #+0] \ 000000A4 081098E5 LDR R1,[R8, #+8] \ 000000A8 0200A0E1 MOV R0,R2 \ 000000AC 000053E3 CMP R3,#+0 \ 000000B0 0100001A BNE ??FindContactByNS_9 \ 000000B4 000051E3 CMP R1,#+0 \ 000000B8 DFFFFF1A BNE ??FindContactByNS_3 \ ??FindContactByNS_9: \ 000000BC 0020D2E5 LDRB R2,[R2, #+0] \ 000000C0 000051E3 CMP R1,#+0 \ 000000C4 10309805 LDREQ R3,[R8, #+16] \ 000000C8 09005301 CMPEQ R3,R9 \ 000000CC 0300001A BNE ??FindContactByNS_10 \ 000000D0 00005AE3 CMP R10,#+0 \ 000000D4 0100000A BEQ ??FindContactByNS_10 \ 000000D8 000052E3 CMP R2,#+0 \ 000000DC D6FFFF0A BEQ ??FindContactByNS_3 \ ??FindContactByNS_10: \ 000000E0 90309FE5 LDR R3,??FindContactByNS_8+0x4 ;; Is_Show_Offline \ 000000E4 003093E5 LDR R3,[R3, #+0] \ 000000E8 000053E3 CMP R3,#+0 \ 000000EC 00005103 CMPEQ R1,#+0 \ 000000F0 8C109805 LDREQ R1,[R8, #+140] \ 000000F4 00005103 CMPEQ R1,#+0 \ 000000F8 0D00001A BNE ??FindContactByNS_11 \ 000000FC B415D8E1 LDRH R1,[R8, #+84] \ 00000100 FF30A0E3 MOV R3,#+255 \ 00000104 FF3C83E3 ORR R3,R3,#0xFF00 \ 00000108 030051E1 CMP R1,R3 \ 0000010C 0800001A BNE ??FindContactByNS_11 \ 00000110 64309FE5 LDR R3,??FindContactByNS_8+0x8 ;; UIN \ 00000114 0C1098E5 LDR R1,[R8, #+12] \ 00000118 003093E5 LDR R3,[R3, #+0] \ 0000011C 030051E1 CMP R1,R3 \ 00000120 0300000A BEQ ??FindContactByNS_11 \ 00000124 000052E3 CMP R2,#+0 \ 00000128 70109805 LDREQ R1,[R8, #+112] \ 0000012C 00005103 CMPEQ R1,#+0 \ 00000130 C1FFFF0A BEQ ??FindContactByNS_3 \ ??FindContactByNS_11: \ 00000134 44C09FE5 LDR R12,??FindContactByNS_8+0xC ;; table_T9Key \ 00000138 141088E2 ADD R1,R8,#+20 \ 0000013C 030000EA B ??FindContactByNS_12 \ ??FindContactByNS_13: \ 00000140 ........ LDRB R3,[R1], #+1 \ 00000144 0C30D3E7 LDRB R3,[R3, +R12] \ 00000148 030052E1 CMP R2,R3 \ 0000014C BAFFFF1A BNE ??FindContactByNS_3 \ ??FindContactByNS_12: \ 00000150 ........ LDRB R2,[R0], #+1 \ 00000154 000052E3 CMP R2,#+0 \ 00000158 F8FFFF1A BNE ??FindContactByNS_13 \ 0000015C 080057E1 CMP R7,R8 \ 00000160 B0FFFF1A BNE ??FindContactByNS_1 \ ??FindContactByNS_2: \ 00000164 0800A0E1 MOV R0,R8 \ 00000168 F087BDE8 POP {R4-R10,PC} 151 } 152 return(t); \ ??FindContactByNS_4: \ 0000016C 0000A0E3 MOV R0,#+0 \ 00000170 F087BDE8 POP {R4-R10,PC} ;; return \ ??FindContactByNS_8: \ 00000174 ........ DC32 ContactT9Key \ 00000178 ........ DC32 Is_Show_Offline \ 0000017C ........ DC32 UIN \ 00000180 ........ DC32 table_T9Key 153 } 154 155 \ In segment CODE, align 4, keep-with-next 156 int CountContacts(void) 157 { \ CountContacts: \ 00000000 00402DE9 PUSH {LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 158 int l=-1; \ 00000008 0010E0E3 MVN R1,#+0 \ 0000000C 00108DE5 STR R1,[SP, #+0] 159 FindContactByNS(&l,IS_ANY,2,NULL); \ 00000010 0030A0E3 MOV R3,#+0 \ 00000014 0220A0E3 MOV R2,#+2 \ 00000018 0D00A0E1 MOV R0,SP \ 0000001C ........ BL FindContactByNS 160 l=-1-l; 161 return l; \ 00000020 00109DE5 LDR R1,[SP, #+0] \ 00000024 0000E0E3 MVN R0,#+0 \ 00000028 010040E0 SUB R0,R0,R1 \ 0000002C 0280BDE8 POP {R1,PC} ;; return 162 } 163 \ In segment CODE, align 4, keep-with-next 164 CLIST *FindContactByN(int i) 165 { \ FindContactByN: \ 00000000 01402DE9 PUSH {R0,LR} 166 CLIST *t; 167 int f=IsActiveUp; 168 if (f) \ 00000004 ........ LDR R0,??DataTable7 ;; IsActiveUp \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0B00000A BEQ ??FindContactByN_0 169 { 170 t=FindContactByNS(&i,IS_ANY,1,NULL); if ((!i)&&(t)) return (t); \ 00000014 0030A0E3 MOV R3,#+0 \ 00000018 0120A0E3 MOV R2,#+1 \ 0000001C 001062E2 RSB R1,R2,#+0 \ 00000020 0D00A0E1 MOV R0,SP \ 00000024 ........ BL FindContactByNS \ 00000028 00109DE5 LDR R1,[SP, #+0] \ 0000002C 000051E3 CMP R1,#+0 \ 00000030 0100001A BNE ??FindContactByN_1 \ 00000034 000050E3 CMP R0,#+0 \ 00000038 0280BD18 POPNE {R1,PC} 171 f=0; \ ??FindContactByN_1: \ 0000003C 0020A0E3 MOV R2,#+0 \ 00000040 000000EA B ??FindContactByN_2 172 } 173 else f=2; \ ??FindContactByN_0: \ 00000044 0220A0E3 MOV R2,#+2 174 t=FindContactByNS(&i,IS_ANY,f,NULL); 175 return t; \ ??FindContactByN_2: \ 00000048 0030A0E3 MOV R3,#+0 \ 0000004C 0310E0E1 MVN R1,R3 \ 00000050 0D00A0E1 MOV R0,SP \ 00000054 ........ BL FindContactByNS \ 00000058 0280BDE8 POP {R1,PC} ;; return 176 } 177 \ In segment CODE, align 4, keep-with-next 178 int FindContactByContact(CLIST *p) 179 { \ FindContactByContact: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 180 int l=-1; \ 00000008 0010E0E3 MVN R1,#+0 \ 0000000C 0040A0E1 MOV R4,R0 181 // CLIST *t; 182 int f=IsActiveUp; 183 if (f) \ 00000010 ........ LDR R0,??DataTable7 ;; IsActiveUp \ 00000014 00108DE5 STR R1,[SP, #+0] \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0700000A BEQ ??FindContactByContact_0 184 { 185 if (FindContactByNS(&l,IS_ANY,1,p)) return -1-l; \ 00000024 0430A0E1 MOV R3,R4 \ 00000028 0120A0E3 MOV R2,#+1 \ 0000002C 0D00A0E1 MOV R0,SP \ 00000030 ........ BL FindContactByNS \ 00000034 000050E3 CMP R0,#+0 \ 00000038 0600001A BNE ??FindContactByContact_1 186 f=0; \ 0000003C 0020A0E3 MOV R2,#+0 \ 00000040 000000EA B ??FindContactByContact_2 187 } 188 else f=2; \ ??FindContactByContact_0: \ 00000044 0220A0E3 MOV R2,#+2 189 FindContactByNS(&l,IS_ANY,f,p); \ ??FindContactByContact_2: \ 00000048 0430A0E1 MOV R3,R4 \ 0000004C 0010E0E3 MVN R1,#+0 \ 00000050 0D00A0E1 MOV R0,SP \ 00000054 ........ BL FindContactByNS 190 return -1-l; \ ??FindContactByContact_1: \ 00000058 00109DE5 LDR R1,[SP, #+0] \ 0000005C 0000E0E3 MVN R0,#+0 \ 00000060 010040E0 SUB R0,R0,R1 \ 00000064 1280BDE8 POP {R1,R4,PC} ;; return 191 } 192 \ In segment CODE, align 4, keep-with-next 193 void SwapContacts(CLIST *first, CLIST *second) 194 { 195 CLIST *tp; 196 if ((tp=second->next)) tp->prev=first; \ SwapContacts: \ 00000000 002091E5 LDR R2,[R1, #+0] \ 00000004 000052E3 CMP R2,#+0 \ 00000008 04008215 STRNE R0,[R2, #+4] 197 if ((tp=first->prev)) tp->next=second; \ 0000000C 042090E5 LDR R2,[R0, #+4] \ 00000010 000052E3 CMP R2,#+0 \ 00000014 00108215 STRNE R1,[R2, #+0] 198 first->next=second->next; \ 00000018 002091E5 LDR R2,[R1, #+0] \ 0000001C 002080E5 STR R2,[R0, #+0] 199 second->next=first; \ 00000020 000081E5 STR R0,[R1, #+0] 200 second->prev=first->prev; \ 00000024 042090E5 LDR R2,[R0, #+4] \ 00000028 042081E5 STR R2,[R1, #+4] 201 first->prev=second; \ 0000002C 041080E5 STR R1,[R0, #+4] 202 } \ 00000030 1EFF2FE1 BX LR ;; return 203 \ In segment CODE, align 4, keep-with-next 204 void ChangeContactPos(CLIST *p) 205 { \ ChangeContactPos: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 206 CLIST *t; 207 if ((t=p->prev)) \ 00000008 045094E5 LDR R5,[R4, #+4] \ 0000000C 000055E3 CMP R5,#+0 \ 00000010 0B00000A BEQ ??ChangeContactPos_0 \ 00000014 050000EA B ??ChangeContactPos_1 208 { 209 //Проверяем, не надо ли всплывать 210 while(CompareContacts(t,p)>0) 211 { 212 //Всплываем вверх списка 213 SwapContacts(t,p); \ ??ChangeContactPos_2: \ 00000018 0410A0E1 MOV R1,R4 \ 0000001C 0500A0E1 MOV R0,R5 \ 00000020 ........ BL SwapContacts 214 if (!(t=p->prev)) return; //Всплыли \ 00000024 045094E5 LDR R5,[R4, #+4] \ 00000028 000055E3 CMP R5,#+0 \ 0000002C 3080BD08 POPEQ {R4,R5,PC} 215 } \ ??ChangeContactPos_1: \ 00000030 0410A0E1 MOV R1,R4 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 ........ BL CompareContacts \ 0000003C 010050E3 CMP R0,#+1 \ 00000040 F4FFFFAA BGE ??ChangeContactPos_2 216 } 217 if ((t=p->next)) \ ??ChangeContactPos_0: \ 00000044 005094E5 LDR R5,[R4, #+0] \ 00000048 000055E3 CMP R5,#+0 \ 0000004C 3080BD08 POPEQ {R4,R5,PC} 218 { 219 //Проверяем, не надо ли углубляться 220 while(CompareContacts(p,t)>0) \ ??ChangeContactPos_3: \ 00000050 0510A0E1 MOV R1,R5 \ 00000054 0400A0E1 MOV R0,R4 \ 00000058 ........ BL CompareContacts \ 0000005C 010050E3 CMP R0,#+1 \ 00000060 3080BDB8 POPLT {R4,R5,PC} 221 { 222 SwapContacts(p,t); \ 00000064 0510A0E1 MOV R1,R5 \ 00000068 0400A0E1 MOV R0,R4 \ 0000006C ........ BL SwapContacts 223 if (!(t=p->next)) return; //Углубились нах ;) \ 00000070 005094E5 LDR R5,[R4, #+0] \ 00000074 000055E3 CMP R5,#+0 \ 00000078 F4FFFF1A BNE ??ChangeContactPos_3 \ 0000007C 3080BDE8 POP {R4,R5,PC} ;; return 224 } 225 } 226 } 227 \ In segment CODE, align 4, keep-with-next 228 int CompareContacts(CLIST *t, CLIST *p) 229 { \ CompareContacts: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 230 int c; 231 if (Is_Show_Groups) \ 00000008 ........ LDR R0,??DataTable12 ;; Is_Show_Groups \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 000090E5 LDR R0,[R0, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0300000A BEQ ??CompareContacts_0 232 { 233 if ((c=p->group-t->group)) \ 0000001C 100095E5 LDR R0,[R5, #+16] \ 00000020 101094E5 LDR R1,[R4, #+16] \ 00000024 010050E0 SUBS R0,R0,R1 234 { 235 return(c); \ 00000028 7080BD18 POPNE {R4-R6,PC} 236 } 237 } 238 extern int SORT_CLIST; 239 240 int ip=GetIconIndex(p); \ ??CompareContacts_0: \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 ........ _BLF GetIconIndex,??GetIconIndex??rA \ 00000034 0060A0E1 MOV R6,R0 241 int it=GetIconIndex(t); \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C ........ _BLF GetIconIndex,??GetIconIndex??rA 242 switch (SORT_CLIST) \ 00000040 4C109FE5 LDR R1,??CompareContacts_1 ;; SORT_CLIST \ 00000044 001091E5 LDR R1,[R1, #+0] \ 00000048 000051E3 CMP R1,#+0 \ 0000004C 0200000A BEQ ??CompareContacts_2 \ 00000050 011051E2 SUBS R1,R1,#+1 \ 00000054 0800000A BEQ ??CompareContacts_3 \ 00000058 090000EA B ??CompareContacts_4 243 { 244 case 0: // by name 245 if ((ip>IS_OFFLINE)&&(ipIS_OFFLINE)&&(itname,p->name)); \ ??CompareContacts_4: \ 00000084 141085E2 ADD R1,R5,#+20 \ 00000088 140084E2 ADD R0,R4,#+20 \ 0000008C ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000090 7080BDE8 POP {R4-R6,PC} ;; return \ ??CompareContacts_1: \ 00000094 ........ DC32 SORT_CLIST 256 } 257 258 \ In segment CODE, align 4, keep-with-next 259 CLIST *AddContactOrGroup(CLIST **top, CLIST *p) 260 { \ AddContactOrGroup: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 261 CLIST *t; 262 CLIST *pr; 263 t=*top; \ 00000008 006094E5 LDR R6,[R4, #+0] \ 0000000C 0150A0E1 MOV R5,R1 264 if (t) \ 00000010 000056E3 CMP R6,#+0 \ 00000014 0200001A BNE ??AddContactOrGroup_0 265 { 266 //Не первый 267 while(CompareContacts(t,p)<0) 268 { 269 if (!(pr=t->next)) 270 { 271 //добавляем в конец 272 t->next=p; 273 p->prev=t; 274 return(p); 275 } 276 t=pr; 277 } 278 if ((pr=t->prev)) 279 pr->next=p; 280 else 281 *top=p; 282 p->prev=pr; 283 p->next=t; 284 t->prev=p; 285 } 286 else 287 { 288 //Первый 289 *top=p; \ 00000018 005084E5 STR R5,[R4, #+0] 290 } 291 return(p); \ 0000001C 130000EA B ??AddContactOrGroup_1 \ ??AddContactOrGroup_2: \ 00000020 0060A0E1 MOV R6,R0 \ ??AddContactOrGroup_0: \ 00000024 0510A0E1 MOV R1,R5 \ 00000028 0600A0E1 MOV R0,R6 \ 0000002C ........ BL CompareContacts \ 00000030 000050E3 CMP R0,#+0 \ 00000034 0600005A BPL ??AddContactOrGroup_3 \ 00000038 000096E5 LDR R0,[R6, #+0] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 F6FFFF1A BNE ??AddContactOrGroup_2 \ 00000044 005086E5 STR R5,[R6, #+0] \ 00000048 046085E5 STR R6,[R5, #+4] \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 7080BDE8 POP {R4-R6,PC} \ ??AddContactOrGroup_3: \ 00000054 040096E5 LDR R0,[R6, #+4] \ 00000058 000050E3 CMP R0,#+0 \ 0000005C 00508015 STRNE R5,[R0, #+0] \ 00000060 00508405 STREQ R5,[R4, #+0] \ 00000064 040085E5 STR R0,[R5, #+4] \ 00000068 006085E5 STR R6,[R5, #+0] \ 0000006C 045086E5 STR R5,[R6, #+4] \ ??AddContactOrGroup_1: \ 00000070 0500A0E1 MOV R0,R5 \ 00000074 7080BDE8 POP {R4-R6,PC} 292 } 293 \ In segment CODE, align 4, keep-with-next 294 void ResortCL(void) 295 { \ ResortCL: \ 00000000 70402DE9 PUSH {R4-R6,LR} 296 CLIST *first=NULL; 297 CLIST *cl=(CLIST *)cltop; \ 00000004 ........ LDR R4,??DataTable13 ;; cltop \ 00000008 04D04DE2 SUB SP,SP,#+4 \ 0000000C 006094E5 LDR R6,[R4, #+0] \ 00000010 0050A0E3 MOV R5,#+0 \ 00000014 00508DE5 STR R5,[SP, #+0] \ 00000018 000056E3 CMP R6,#+0 \ 0000001C 1000000A BEQ ??ResortCL_0 298 while(cl) 299 { 300 CLIST *pr=cl; \ ??ResortCL_1: \ 00000020 0610A0E1 MOV R1,R6 301 cl=cl->next; \ 00000024 006096E5 LDR R6,[R6, #+0] 302 pr->next=0; \ 00000028 005081E5 STR R5,[R1, #+0] 303 pr->prev=0; \ 0000002C 045081E5 STR R5,[R1, #+4] 304 if (pr->isgroup) \ 00000030 080091E5 LDR R0,[R1, #+8] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 0500000A BEQ ??ResortCL_2 305 { 306 pr->state=Is_Show_Groups?0xFFFF:0; \ 0000003C ........ LDR R0,??DataTable12 ;; Is_Show_Groups \ 00000040 000090E5 LDR R0,[R0, #+0] \ 00000044 000050E3 CMP R0,#+0 \ 00000048 FF00A013 MOVNE R0,#+255 \ 0000004C FF0C8013 ORRNE R0,R0,#0xFF00 \ 00000050 B405C1E1 STRH R0,[R1, #+84] 307 } 308 AddContactOrGroup(&first,pr); \ ??ResortCL_2: \ 00000054 0D00A0E1 MOV R0,SP \ 00000058 ........ BL AddContactOrGroup 309 } \ 0000005C 000056E3 CMP R6,#+0 \ 00000060 EEFFFF1A BNE ??ResortCL_1 310 cltop=first; \ ??ResortCL_0: \ 00000064 00009DE5 LDR R0,[SP, #+0] \ 00000068 000084E5 STR R0,[R4, #+0] 311 } \ 0000006C 7180BDE8 POP {R0,R4-R6,PC} ;; return 312 \ In segment CODE, align 4, keep-with-next 313 CLIST *AddContact(unsigned int uin, char *name, unsigned int group, int local) 314 { \ AddContact: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 \ 00000010 0370A0E1 MOV R7,R3 315 CLIST *p=malloc(sizeof(CLIST)); \ 00000014 A400A0E3 MOV R0,#+164 \ 00000018 140000EF SWI +20 \ 0000001C 0080A0E1 MOV R8,R0 316 zeromem(p,sizeof(CLIST)); \ 00000020 A410A0E3 MOV R1,#+164 \ 00000024 1D0100EF SWI +285 317 p->uin=uin; \ 00000028 0C4088E5 STR R4,[R8, #+12] 318 p->group=group; \ 0000002C 106088E5 STR R6,[R8, #+16] 319 strncpy(p->name,name,sizeof(p->name)-1); \ 00000030 3F20A0E3 MOV R2,#+63 \ 00000034 0510A0E1 MOV R1,R5 \ 00000038 140088E2 ADD R0,R8,#+20 \ 0000003C 160100EF SWI +278 320 p->state=0xFFFF; \ 00000040 FF00A0E3 MOV R0,#+255 \ 00000044 FF0C80E3 ORR R0,R0,#0xFF00 \ 00000048 B405C8E1 STRH R0,[R8, #+84] 321 p->local=local; 322 return AddContactOrGroup((CLIST **)&cltop,p); \ 0000004C ........ LDR R0,??DataTable13 ;; cltop \ 00000050 A07088E5 STR R7,[R8, #+160] \ 00000054 0810A0E1 MOV R1,R8 \ 00000058 F041BDE8 POP {R4-R8,LR} ;; Pop \ 0000005C ........ B AddContactOrGroup ;; tailcall 323 } 324 \ In segment CODE, align 4, keep-with-next 325 CLIST *AddGroup(unsigned int grp, char *name) 326 { \ AddGroup: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 327 CLIST *p=malloc(sizeof(CLIST)); \ 0000000C A400A0E3 MOV R0,#+164 \ 00000010 140000EF SWI +20 \ 00000014 0060A0E1 MOV R6,R0 328 zeromem(p,sizeof(CLIST)); \ 00000018 A410A0E3 MOV R1,#+164 \ 0000001C 1D0100EF SWI +285 329 // p->uin=0; 330 p->group=grp; \ 00000020 104086E5 STR R4,[R6, #+16] 331 p->isgroup=1; \ 00000024 0100A0E3 MOV R0,#+1 \ 00000028 080086E5 STR R0,[R6, #+8] 332 strncpy(p->name,name,sizeof(p->name)-1); \ 0000002C 3F20A0E3 MOV R2,#+63 \ 00000030 0510A0E1 MOV R1,R5 \ 00000034 140086E2 ADD R0,R6,#+20 \ 00000038 160100EF SWI +278 333 if (!Is_Show_Groups) p->state=0;//Открыть группу \ 0000003C ........ LDR R0,??DataTable12 ;; Is_Show_Groups 334 else 335 p->state=0xFFFF; 336 return AddContactOrGroup((CLIST **)&cltop,p); \ 00000040 0610A0E1 MOV R1,R6 \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 000050E3 CMP R0,#+0 \ 0000004C FF00A013 MOVNE R0,#+255 \ 00000050 FF0C8013 ORRNE R0,R0,#0xFF00 \ 00000054 B405C6E1 STRH R0,[R6, #+84] \ 00000058 ........ LDR R0,??DataTable13 ;; cltop \ 0000005C ........ BL AddContactOrGroup \ 00000060 7080BDE8 POP {R4-R6,PC} ;; return 337 } 338 339 //by BoBa 19.11.2007 \ In segment CODE, align 4, keep-with-next 340 void LoadLocalCL(void){ 341 FSTATS stat; 342 char fn[256]; 343 int f; 344 unsigned int ul; 345 int fsize; 346 char *p,*s; 347 char cn[64]; 348 unsigned int uin; 349 350 strcpy(fn,TEMPLATES_PATH); \ LoadLocalCL: \ 00000000 84119FE5 LDR R1,??LoadLocalCL_0 ;; TEMPLATES_PATH \ 00000004 F0412DE9 PUSH {R4-R8,LR} \ 00000008 5BDF4DE2 SUB SP,SP,#+364 \ 0000000C 04008DE2 ADD R0,SP,#+4 351 strcat(fn,"\\local.cl"); 352 if (GetFileStats(fn,&stat,&ul)==-1) return; \ 00000010 0040E0E3 MVN R4,#+0 \ 00000014 1A0000EF SWI +26 \ 00000018 70119FE5 LDR R1,??LoadLocalCL_0+0x4 ;; `?` \ 0000001C 04008DE2 ADD R0,SP,#+4 \ 00000020 170000EF SWI +23 \ 00000024 0D20A0E1 MOV R2,SP \ 00000028 511F8DE2 ADD R1,SP,#+324 \ 0000002C 04008DE2 ADD R0,SP,#+4 \ 00000030 840000EF SWI +132 \ 00000034 040050E1 CMP R0,R4 \ 00000038 3300000A BEQ ??LoadLocalCL_1 353 if ((fsize=stat.size)<=0) return; \ 0000003C 48719DE5 LDR R7,[SP, #+328] \ 00000040 010057E3 CMP R7,#+1 \ 00000044 300000BA BLT ??LoadLocalCL_1 354 if ((f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul))==-1) return; \ 00000048 0D30A0E1 MOV R3,SP \ 0000004C 8020A0E3 MOV R2,#+128 \ 00000050 801CA0E3 MOV R1,#+32768 \ 00000054 04008DE2 ADD R0,SP,#+4 \ 00000058 0A0000EF SWI +10 \ 0000005C 0080A0E1 MOV R8,R0 \ 00000060 040058E1 CMP R8,R4 \ 00000064 2800000A BEQ ??LoadLocalCL_1 355 s=p=malloc(fsize+1); \ 00000068 010087E2 ADD R0,R7,#+1 \ 0000006C 140000EF SWI +20 \ 00000070 0040A0E1 MOV R4,R0 \ 00000074 0450A0E1 MOV R5,R4 356 s[fread(f,p,fsize,&ul)]=0; \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 0D30A0E1 MOV R3,SP \ 00000080 0720A0E1 MOV R2,R7 \ 00000084 0410A0E1 MOV R1,R4 \ 00000088 0800A0E1 MOV R0,R8 \ 0000008C 0B0000EF SWI +11 \ 00000090 0560C0E7 STRB R6,[R0, +R5] 357 fclose(f,&ul); \ 00000094 0D10A0E1 MOV R1,SP \ 00000098 0800A0E1 MOV R0,R8 \ 0000009C 0D0000EF SWI +13 \ 000000A0 140000EA B ??LoadLocalCL_2 358 while(*p!=0){ 359 char cc; 360 while((cc=*p)!=';'){ //нах имя группы 361 if (cc==0) goto L_EOF; 362 p++; 363 } 364 p++; 365 uin=0; 366 while((cc=*p)!=';'){ //uin 367 if (cc==0) goto L_EOF; 368 uin*=10; 369 uin+=((*p++)-'0'); 370 } 371 p++; 372 char *c=cn; 373 while((cc=*p)!=';'){ //nick 374 if (cc==0) goto L_EOF; 375 *c++=*p++; 376 } 377 *c=0; 378 while(*p!=13 && *p!=10 && *p!=0) p++; //нах конец строки \ ??LoadLocalCL_3: \ 000000A4 014084E2 ADD R4,R4,#+1 \ ??LoadLocalCL_4: \ 000000A8 0000D4E5 LDRB R0,[R4, #+0] \ 000000AC 0D0050E3 CMP R0,#+13 \ 000000B0 0A005013 CMPNE R0,#+10 \ 000000B4 00005013 CMPNE R0,#+0 \ 000000B8 F9FFFF1A BNE ??LoadLocalCL_3 379 if (*p!=0) p++; \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 01408412 ADDNE R4,R4,#+1 380 if ((*p==13)||(*p==10)) p++; \ 000000C4 0000D4E5 LDRB R0,[R4, #+0] \ 000000C8 0D0050E3 CMP R0,#+13 \ 000000CC 0A005013 CMPNE R0,#+10 \ 000000D0 01408402 ADDEQ R4,R4,#+1 381 if (!FindContactByUin(uin)) AddContact(uin, cn, 0, 1); \ 000000D4 0700A0E1 MOV R0,R7 \ 000000D8 ........ BL FindContactByUin \ 000000DC 000050E3 CMP R0,#+0 \ 000000E0 0400001A BNE ??LoadLocalCL_2 \ 000000E4 0130A0E3 MOV R3,#+1 \ 000000E8 0020A0E3 MOV R2,#+0 \ 000000EC 411F8DE2 ADD R1,SP,#+260 \ 000000F0 0700A0E1 MOV R0,R7 \ 000000F4 ........ BL AddContact \ ??LoadLocalCL_2: \ 000000F8 0000D4E5 LDRB R0,[R4, #+0] \ 000000FC 000050E3 CMP R0,#+0 \ 00000100 0600001A BNE ??LoadLocalCL_5 382 } 383 L_EOF: 384 mfree(s); \ ??LoadLocalCL_6: \ 00000104 0500A0E1 MOV R0,R5 \ 00000108 150000EF SWI +21 385 } \ ??LoadLocalCL_1: \ 0000010C 5BDF8DE2 ADD SP,SP,#+364 ;; stack cleaning \ 00000110 F081BDE8 POP {R4-R8,PC} ;; return \ ??LoadLocalCL_7: \ 00000114 000050E3 CMP R0,#+0 \ 00000118 F9FFFF0A BEQ ??LoadLocalCL_6 \ 0000011C 014084E2 ADD R4,R4,#+1 \ ??LoadLocalCL_5: \ 00000120 0000D4E5 LDRB R0,[R4, #+0] \ 00000124 3B0050E3 CMP R0,#+59 \ 00000128 F9FFFF1A BNE ??LoadLocalCL_7 \ 0000012C 014084E2 ADD R4,R4,#+1 \ 00000130 0070A0E3 MOV R7,#+0 \ 00000134 050000EA B ??LoadLocalCL_8 \ ??LoadLocalCL_9: \ 00000138 000050E3 CMP R0,#+0 \ 0000013C F0FFFF0A BEQ ??LoadLocalCL_6 \ 00000140 ........ LDRB R1,[R4], #+1 \ 00000144 0A00A0E3 MOV R0,#+10 \ 00000148 301041E2 SUB R1,R1,#+48 \ 0000014C 901727E0 MLA R7,R0,R7,R1 \ ??LoadLocalCL_8: \ 00000150 0000D4E5 LDRB R0,[R4, #+0] \ 00000154 3B0050E3 CMP R0,#+59 \ 00000158 F6FFFF1A BNE ??LoadLocalCL_9 \ 0000015C 014084E2 ADD R4,R4,#+1 \ 00000160 411F8DE2 ADD R1,SP,#+260 \ 00000164 030000EA B ??LoadLocalCL_10 \ ??LoadLocalCL_11: \ 00000168 000050E3 CMP R0,#+0 \ 0000016C E4FFFF0A BEQ ??LoadLocalCL_6 \ 00000170 ........ LDRB R0,[R4], #+1 \ 00000174 ........ STRB R0,[R1], #+1 \ ??LoadLocalCL_10: \ 00000178 0000D4E5 LDRB R0,[R4, #+0] \ 0000017C 3B0050E3 CMP R0,#+59 \ 00000180 F8FFFF1A BNE ??LoadLocalCL_11 \ 00000184 0060C1E5 STRB R6,[R1, #+0] \ 00000188 C6FFFFEA B ??LoadLocalCL_4 \ ??LoadLocalCL_0: \ 0000018C ........ DC32 TEMPLATES_PATH \ 00000190 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable7: \ 00000000 ........ DC32 IsActiveUp \ In segment CODE, align 4, keep-with-next \ ??DataTable12: \ 00000000 ........ DC32 Is_Show_Groups \ In segment CODE, align 4, keep-with-next \ ??DataTable13: \ 00000000 ........ DC32 cltop \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C6C6F63616C DC8 "\\local.cl" \ 2E636C00 \ 0000000A 0000 DC8 0, 0 Maximum stack usage in bytes: Function CSTACK -------- ------ AddContact 24 AddContactOrGroup 16 AddGroup 16 ChangeContactPos 12 CompareContacts 16 CountContacts 8 FillAllOffline 16 FindContactByContact 12 FindContactByN 8 FindContactByNS 32 FindContactByUin 0 FindGroupByID 0 FreeCLIST 8 FreeXText 8 LoadLocalCL 388 ResortCL 20 SwapContacts 0 Segment part sizes: Function/Label Bytes -------------- ----- FreeXText 36 FreeCLIST 104 FillAllOffline 144 FindContactByUin 44 FindGroupByID 48 table_T9Key 256 FindContactByNS 388 CountContacts 48 FindContactByN 92 FindContactByContact 104 SwapContacts 52 ChangeContactPos 128 CompareContacts 152 AddContactOrGroup 120 ResortCL 112 AddContact 96 AddGroup 100 LoadLocalCL 404 ??DataTable7 4 ??DataTable12 4 ??DataTable13 4 ? 12 Others 104 2 288 bytes in segment CODE 268 bytes in segment DATA_C 2 184 bytes of CODE memory (+ 104 bytes shared) 268 bytes of CONST memory Errors: none Warnings: none