############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 23/Sep/2008 14:33:10 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\cl_work.c # # Command line = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\cl_work.c -D # # NEWSGOLD -D ELKA -D kluchnik -D BCFGGEN # # --preprocess D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\k # # luchnik\List\ -lC D:\Pasha\elf\_MY_PROJECT_\naticq_m # # od2\kluchnik\List\ -o D:\Pasha\elf\_MY_PROJECT_\nati # # cq_mod2\kluchnik\Obj\ -s9 --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_mod2\kluchnik\List\ # # cl_work.lst # # Object file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\kluchnik\Obj\c # # l_work.r79 # # # # # ############################################################################## D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\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 extern unsigned int UIN; 14 extern char TEMPLATES_PATH[]; 15 \ In segment CODE, align 4, keep-with-next 16 void FreeXText(CLIST *t) 17 { \ FreeXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 18 if (t->xtext) {mfree(t->xtext);t->xtext=NULL;} \ 00000008 B40094E5 LDR R0,[R4, #+180] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} \ 00000014 150000EF SWI +21 \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C B40084E5 STR R0,[R4, #+180] 19 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 20 21 //Уничтожить список \ In segment CODE, align 4, keep-with-next 22 void FreeCLIST(void) 23 { 24 CLIST *cl=(CLIST*)cltop; \ FreeCLIST: \ 00000000 ........ LDR R0,??DataTable13 ;; cltop \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 004090E5 LDR R4,[R0, #+0] 25 cltop=0; \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] \ 00000014 000054E3 CMP R4,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 26 while(cl) 27 { 28 CLIST *p; 29 if (cl->log) FreeLOGQ(&cl->log); \ ??FreeCLIST_0: \ 0000001C A00094E5 LDR R0,[R4, #+160] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 0100000A BEQ ??FreeCLIST_1 \ 00000028 A00084E2 ADD R0,R4,#+160 \ 0000002C ........ _BLF FreeLOGQ,??FreeLOGQ??rA 30 if (cl->answer) mfree(cl->answer); \ ??FreeCLIST_1: \ 00000030 A40094E5 LDR R0,[R4, #+164] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 0000000A BEQ ??FreeCLIST_2 \ 0000003C 150000EF SWI +21 31 if (cl->xtext) mfree(cl->xtext); \ ??FreeCLIST_2: \ 00000040 B40094E5 LDR R0,[R4, #+180] \ 00000044 000050E3 CMP R0,#+0 \ 00000048 0000000A BEQ ??FreeCLIST_3 \ 0000004C 150000EF SWI +21 32 p=cl; \ ??FreeCLIST_3: \ 00000050 0400A0E1 MOV R0,R4 33 cl=(CLIST*)(cl->next); \ 00000054 004094E5 LDR R4,[R4, #+0] 34 mfree(p); \ 00000058 150000EF SWI +21 35 } \ 0000005C 000054E3 CMP R4,#+0 \ 00000060 EDFFFF1A BNE ??FreeCLIST_0 36 } \ 00000064 1080BDE8 POP {R4,PC} ;; return 37 38 //Прописать всех в offline \ In segment CODE, align 4, keep-with-next 39 void FillAllOffline(void) 40 { 41 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 42 while(cl) 43 { 44 if (!cl->isgroup) \ ??FillAllOffline_0: \ 0000001C 080094E5 LDR R0,[R4, #+8] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 0800001A BNE ??FillAllOffline_1 45 { 46 LOGQ *lp=cl->log; \ 00000028 A01094E5 LDR R1,[R4, #+160] \ 0000002C 000051E3 CMP R1,#+0 \ 00000030 0500000A BEQ ??FillAllOffline_1 47 while(lp) 48 { 49 lp->ID|=0x18000; \ ??FillAllOffline_2: \ 00000034 082091E5 LDR R2,[R1, #+8] \ 00000038 602B82E3 ORR R2,R2,#0x18000 \ 0000003C 082081E5 STR R2,[R1, #+8] 50 lp=lp->next; \ 00000040 001091E5 LDR R1,[R1, #+0] 51 } \ 00000044 000051E3 CMP R1,#+0 \ 00000048 F9FFFF1A BNE ??FillAllOffline_2 52 } 53 if ((cl->state!=0xFFFF)&& 54 (!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 55 { 56 CLIST *p=cl; \ 00000060 0460A0E1 MOV R6,R4 57 p->state=0xFFFF; \ 00000064 B455C6E1 STRH R5,[R6, #+84] 58 FreeXText(p); \ 00000068 0600A0E1 MOV R0,R6 \ 0000006C ........ BL FreeXText 59 cl=cl->next; \ 00000070 004094E5 LDR R4,[R4, #+0] 60 ChangeContactPos(p); \ 00000074 0600A0E1 MOV R0,R6 \ 00000078 ........ BL ChangeContactPos 61 continue; \ 0000007C 000000EA B ??FillAllOffline_4 62 } 63 cl=(CLIST*)(cl->next); \ ??FillAllOffline_3: \ 00000080 004094E5 LDR R4,[R4, #+0] 64 } \ ??FillAllOffline_4: \ 00000084 000054E3 CMP R4,#+0 \ 00000088 E3FFFF1A BNE ??FillAllOffline_0 65 } \ 0000008C 7080BDE8 POP {R4-R6,PC} ;; return 66 67 \ In segment CODE, align 4, keep-with-next 68 CLIST *FindContactByUin(unsigned int uin) 69 { 70 CLIST *t; 71 t=(CLIST *)cltop; \ FindContactByUin: \ 00000000 ........ LDR R1,??DataTable13 ;; cltop 72 while(t) 73 { 74 if ((t->uin==uin)&&(!t->isgroup)) break; 75 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 76 } 77 return(t); \ ??FindContactByUin_1: \ 00000024 0100A0E1 MOV R0,R1 \ 00000028 1EFF2FE1 BX LR ;; return 78 } 79 \ In segment CODE, align 4, keep-with-next 80 CLIST *FindGroupByID(unsigned int grp) 81 { 82 CLIST *t; 83 t=(CLIST *)cltop; \ FindGroupByID: \ 00000000 ........ LDR R1,??DataTable13 ;; cltop 84 while(t) 85 { 86 if ((t->group==grp)&&(t->isgroup)) break; 87 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 88 } 89 return(t); \ ??FindGroupByID_1: \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 1EFF2FE1 BX LR ;; return 90 } 91 92 //Ключи для поиска по T9 \ In segment DATA_C, align 4, align-sorted 93 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 94 "11111111111111111111111111111111" 95 "10001**0***0000*012345678900***0" 96 "0222333444555666777788899991*110" 97 "122233344455566677778889999111*1" 98 "11111111111111111111111111111111" 99 "11111111311111111111111131111111" 100 "22223333444455566677778888899999" 101 "22223333444455566677778888899999"; 102 103 \ In segment CODE, align 4, keep-with-next 104 CLIST *FindContactByNS(int *i, int si, int act_flag, CLIST *search_contact) 105 { \ FindContactByNS: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0040A0E1 MOV R4,R0 106 CLIST *t; 107 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 108 char *s; 109 char *d; 110 int c; 111 int grp_id=0; \ 0000001C 0090A0E3 MOV R9,#+0 112 int grp_dis=0; \ 00000020 00A0A0E3 MOV R10,#+0 \ 00000024 050000EA B ??FindContactByNS_0 113 while(t) 114 { 115 if (t->isgroup) 116 { 117 grp_id=t->group; 118 grp_dis=t->state; 119 } 120 if (act_flag<2) 121 { 122 if ((act_flag)&&(!t->isactive)) goto L_NOT9; 123 if ((!act_flag)&&(t->isactive)) goto L_NOT9; 124 } 125 if ((si==IS_ANY)||(GetIconIndex(t)==si)) 126 { 127 s=ContactT9Key; 128 if ((!Is_Show_Groups)&&(t->isgroup)) goto L_NOT9; 129 130 if ((!t->isgroup)&&(t->group==grp_id)&&(grp_dis)&&(!(*s))) goto L_NOT9; 131 132 if (!Is_Show_Offline) // by Seklth 13.06.2007 133 if ((!t->isgroup)&&(!t->isactive)&&(t->state==0xFFFF)&&(t->uin!=UIN)&&(!(*s))) 134 if (!t->isunread) goto L_NOT9; 135 136 d=t->name; 137 while(c=*s++) 138 { 139 if (c!=table_T9Key[*d++]) goto L_NOT9; 140 } 141 if (search_contact==t) return t; //Нашли контакт по адресу 142 if (!(*i)) return(t); \ ??FindContactByNS_1: \ 00000028 000094E5 LDR R0,[R4, #+0] \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 4B00000A BEQ ??FindContactByNS_2 143 (*i)--; \ 00000034 010040E2 SUB R0,R0,#+1 \ 00000038 000084E5 STR R0,[R4, #+0] 144 } 145 L_NOT9: 146 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 AC0098E5 LDR R0,[R8, #+172] \ 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 AC109805 LDREQ R1,[R8, #+172] \ 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 90109805 LDREQ R1,[R8, #+144] \ 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} 147 } 148 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 149 } 150 151 \ In segment CODE, align 4, keep-with-next 152 int CountContacts(void) 153 { \ CountContacts: \ 00000000 00402DE9 PUSH {LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 154 int l=-1; \ 00000008 0010E0E3 MVN R1,#+0 \ 0000000C 00108DE5 STR R1,[SP, #+0] 155 FindContactByNS(&l,IS_ANY,2,NULL); \ 00000010 0030A0E3 MOV R3,#+0 \ 00000014 0220A0E3 MOV R2,#+2 \ 00000018 0D00A0E1 MOV R0,SP \ 0000001C ........ BL FindContactByNS 156 l=-1-l; 157 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 158 } 159 \ In segment CODE, align 4, keep-with-next 160 CLIST *FindContactByN(int i) 161 { \ FindContactByN: \ 00000000 01402DE9 PUSH {R0,LR} 162 CLIST *t; 163 int f=IsActiveUp; 164 if (f) \ 00000004 ........ LDR R0,??DataTable7 ;; IsActiveUp \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0B00000A BEQ ??FindContactByN_0 165 { 166 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} 167 f=0; \ ??FindContactByN_1: \ 0000003C 0020A0E3 MOV R2,#+0 \ 00000040 000000EA B ??FindContactByN_2 168 } 169 else f=2; \ ??FindContactByN_0: \ 00000044 0220A0E3 MOV R2,#+2 170 t=FindContactByNS(&i,IS_ANY,f,NULL); 171 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 172 } 173 \ In segment CODE, align 4, keep-with-next 174 int FindContactByContact(CLIST *p) 175 { \ FindContactByContact: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 176 int l=-1; \ 00000008 0010E0E3 MVN R1,#+0 \ 0000000C 0040A0E1 MOV R4,R0 177 // CLIST *t; 178 int f=IsActiveUp; 179 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 180 { 181 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 182 f=0; \ 0000003C 0020A0E3 MOV R2,#+0 \ 00000040 000000EA B ??FindContactByContact_2 183 } 184 else f=2; \ ??FindContactByContact_0: \ 00000044 0220A0E3 MOV R2,#+2 185 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 186 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 187 } 188 \ In segment CODE, align 4, keep-with-next 189 void SwapContacts(CLIST *first, CLIST *second) 190 { 191 CLIST *tp; 192 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] 193 if ((tp=first->prev)) tp->next=second; \ 0000000C 042090E5 LDR R2,[R0, #+4] \ 00000010 000052E3 CMP R2,#+0 \ 00000014 00108215 STRNE R1,[R2, #+0] 194 first->next=second->next; \ 00000018 002091E5 LDR R2,[R1, #+0] \ 0000001C 002080E5 STR R2,[R0, #+0] 195 second->next=first; \ 00000020 000081E5 STR R0,[R1, #+0] 196 second->prev=first->prev; \ 00000024 042090E5 LDR R2,[R0, #+4] \ 00000028 042081E5 STR R2,[R1, #+4] 197 first->prev=second; \ 0000002C 041080E5 STR R1,[R0, #+4] 198 } \ 00000030 1EFF2FE1 BX LR ;; return 199 \ In segment CODE, align 4, keep-with-next 200 void ChangeContactPos(CLIST *p) 201 { \ ChangeContactPos: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 202 CLIST *t; 203 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 204 { 205 //Проверяем, не надо ли всплывать 206 while(CompareContacts(t,p)>0) 207 { 208 //Всплываем вверх списка 209 SwapContacts(t,p); \ ??ChangeContactPos_2: \ 00000018 0410A0E1 MOV R1,R4 \ 0000001C 0500A0E1 MOV R0,R5 \ 00000020 ........ BL SwapContacts 210 if (!(t=p->prev)) return; //Всплыли \ 00000024 045094E5 LDR R5,[R4, #+4] \ 00000028 000055E3 CMP R5,#+0 \ 0000002C 3080BD08 POPEQ {R4,R5,PC} 211 } \ ??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 212 } 213 if ((t=p->next)) \ ??ChangeContactPos_0: \ 00000044 005094E5 LDR R5,[R4, #+0] \ 00000048 000055E3 CMP R5,#+0 \ 0000004C 3080BD08 POPEQ {R4,R5,PC} 214 { 215 //Проверяем, не надо ли углубляться 216 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} 217 { 218 SwapContacts(p,t); \ 00000064 0510A0E1 MOV R1,R5 \ 00000068 0400A0E1 MOV R0,R4 \ 0000006C ........ BL SwapContacts 219 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 220 } 221 } 222 } 223 \ In segment CODE, align 4, keep-with-next 224 int CompareContacts(CLIST *t, CLIST *p) 225 { \ CompareContacts: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 226 int c; 227 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 228 { 229 if ((c=p->group-t->group)) \ 0000001C 100095E5 LDR R0,[R5, #+16] \ 00000020 101094E5 LDR R1,[R4, #+16] \ 00000024 010050E0 SUBS R0,R0,R1 230 { 231 return(c); \ 00000028 7080BD18 POPNE {R4-R6,PC} 232 } 233 } 234 extern int SORT_CLIST; 235 236 int ip=GetIconIndex(p); \ ??CompareContacts_0: \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 ........ _BLF GetIconIndex,??GetIconIndex??rA \ 00000034 0060A0E1 MOV R6,R0 237 int it=GetIconIndex(t); \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C ........ _BLF GetIconIndex,??GetIconIndex??rA 238 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 239 { 240 case 0: // by name 241 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 252 } 253 254 \ In segment CODE, align 4, keep-with-next 255 CLIST *AddContactOrGroup(CLIST **top, CLIST *p) 256 { \ AddContactOrGroup: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 257 CLIST *t; 258 CLIST *pr; 259 t=*top; \ 00000008 006094E5 LDR R6,[R4, #+0] \ 0000000C 0150A0E1 MOV R5,R1 260 if (t) \ 00000010 000056E3 CMP R6,#+0 \ 00000014 0200001A BNE ??AddContactOrGroup_0 261 { 262 //Не первый 263 while(CompareContacts(t,p)<0) 264 { 265 if (!(pr=t->next)) 266 { 267 //добавляем в конец 268 t->next=p; 269 p->prev=t; 270 return(p); 271 } 272 t=pr; 273 } 274 if ((pr=t->prev)) 275 pr->next=p; 276 else 277 *top=p; 278 p->prev=pr; 279 p->next=t; 280 t->prev=p; 281 } 282 else 283 { 284 //Первый 285 *top=p; \ 00000018 005084E5 STR R5,[R4, #+0] 286 } 287 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} 288 } 289 \ In segment CODE, align 4, keep-with-next 290 void ResortCL(void) 291 { \ ResortCL: \ 00000000 70402DE9 PUSH {R4-R6,LR} 292 CLIST *first=NULL; 293 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 294 while(cl) 295 { 296 CLIST *pr=cl; \ ??ResortCL_1: \ 00000020 0610A0E1 MOV R1,R6 297 cl=cl->next; \ 00000024 006096E5 LDR R6,[R6, #+0] 298 pr->next=0; \ 00000028 005081E5 STR R5,[R1, #+0] 299 pr->prev=0; \ 0000002C 045081E5 STR R5,[R1, #+4] 300 if (pr->isgroup) \ 00000030 080091E5 LDR R0,[R1, #+8] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 0500000A BEQ ??ResortCL_2 301 { 302 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] 303 } 304 AddContactOrGroup(&first,pr); \ ??ResortCL_2: \ 00000054 0D00A0E1 MOV R0,SP \ 00000058 ........ BL AddContactOrGroup 305 } \ 0000005C 000056E3 CMP R6,#+0 \ 00000060 EEFFFF1A BNE ??ResortCL_1 306 cltop=first; \ ??ResortCL_0: \ 00000064 00009DE5 LDR R0,[SP, #+0] \ 00000068 000084E5 STR R0,[R4, #+0] 307 } \ 0000006C 7180BDE8 POP {R0,R4-R6,PC} ;; return 308 \ In segment CODE, align 4, keep-with-next 309 CLIST *AddContact(unsigned int uin, char *name, unsigned int group, int local) 310 { \ 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 311 CLIST *p=malloc(sizeof(CLIST)); \ 00000014 C400A0E3 MOV R0,#+196 \ 00000018 140000EF SWI +20 \ 0000001C 0080A0E1 MOV R8,R0 312 zeromem(p,sizeof(CLIST)); \ 00000020 C410A0E3 MOV R1,#+196 \ 00000024 1D0100EF SWI +285 313 p->uin=uin; \ 00000028 0C4088E5 STR R4,[R8, #+12] 314 p->group=group; \ 0000002C 106088E5 STR R6,[R8, #+16] 315 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 316 p->state=0xFFFF; \ 00000040 FF00A0E3 MOV R0,#+255 \ 00000044 FF0C80E3 ORR R0,R0,#0xFF00 \ 00000048 B405C8E1 STRH R0,[R8, #+84] 317 p->local=local; 318 return AddContactOrGroup((CLIST **)&cltop,p); \ 0000004C ........ LDR R0,??DataTable13 ;; cltop \ 00000050 C07088E5 STR R7,[R8, #+192] \ 00000054 0810A0E1 MOV R1,R8 \ 00000058 F041BDE8 POP {R4-R8,LR} ;; Pop \ 0000005C ........ B AddContactOrGroup ;; tailcall 319 } 320 \ In segment CODE, align 4, keep-with-next 321 CLIST *AddGroup(unsigned int grp, char *name) 322 { \ AddGroup: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 323 CLIST *p=malloc(sizeof(CLIST)); \ 0000000C C400A0E3 MOV R0,#+196 \ 00000010 140000EF SWI +20 \ 00000014 0060A0E1 MOV R6,R0 324 zeromem(p,sizeof(CLIST)); \ 00000018 C410A0E3 MOV R1,#+196 \ 0000001C 1D0100EF SWI +285 325 // p->uin=0; 326 p->group=grp; \ 00000020 104086E5 STR R4,[R6, #+16] 327 p->isgroup=1; \ 00000024 0100A0E3 MOV R0,#+1 \ 00000028 080086E5 STR R0,[R6, #+8] 328 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 329 if (!Is_Show_Groups) p->state=0;//Открыть группу \ 0000003C ........ LDR R0,??DataTable12 ;; Is_Show_Groups 330 else 331 p->state=0xFFFF; 332 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 333 } 334 335 //by BoBa 19.11.2007 \ In segment CODE, align 4, keep-with-next 336 void LoadLocalCL(void){ 337 FSTATS stat; 338 char fn[256]; 339 int f; 340 unsigned int ul; 341 int fsize; 342 char *p,*s; 343 char cn[64]; 344 unsigned int uin; 345 346 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 347 strcat(fn,"\\local.cl"); 348 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 349 if ((fsize=stat.size)<=0) return; \ 0000003C 48719DE5 LDR R7,[SP, #+328] \ 00000040 010057E3 CMP R7,#+1 \ 00000044 300000BA BLT ??LoadLocalCL_1 350 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 351 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 352 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] 353 fclose(f,&ul); \ 00000094 0D10A0E1 MOV R1,SP \ 00000098 0800A0E1 MOV R0,R8 \ 0000009C 0D0000EF SWI +13 \ 000000A0 140000EA B ??LoadLocalCL_2 354 while(*p!=0){ 355 char cc; 356 while((cc=*p)!=';'){ //нах имя группы 357 if (cc==0) goto L_EOF; 358 p++; 359 } 360 p++; 361 uin=0; 362 while((cc=*p)!=';'){ //uin 363 if (cc==0) goto L_EOF; 364 uin*=10; 365 uin+=((*p++)-'0'); 366 } 367 p++; 368 char *c=cn; 369 while((cc=*p)!=';'){ //nick 370 if (cc==0) goto L_EOF; 371 *c++=*p++; 372 } 373 *c=0; 374 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 375 if (*p!=0) p++; \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 01408412 ADDNE R4,R4,#+1 376 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 377 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 378 } 379 L_EOF: 380 mfree(s); \ ??LoadLocalCL_6: \ 00000104 0500A0E1 MOV R0,R5 \ 00000108 150000EF SWI +21 381 } \ ??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