Changeset 551 for trunk/dll/makelist.c
- Timestamp:
- Feb 28, 2007, 2:33:51 AM (19 years ago)
- File:
-
- 1 edited
-
trunk/dll/makelist.c (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/makelist.c
r361 r551 32 32 #pragma alloc_text(MAKELIST,SortList,BuildArcList,RemoveFromList,CombineLists) 33 33 34 VOID SortList (LISTINFO *li)34 VOID SortList(LISTINFO * li) 35 35 { 36 36 /* bubble-sort entries by size, descending */ 37 37 38 INT x;38 INT x; 39 39 CHAR *s; 40 40 ULONG l; 41 BOOL swapped;42 43 if (li && li->list && li->list[0] && li->cbFile) {41 BOOL swapped; 42 43 if (li && li->list && li->list[0] && li->cbFile) { 44 44 do { 45 45 swapped = FALSE; 46 for(x = 0;li->list[x] && li->list[x + 1];x++) { 47 if(li->cbFile[x] < li->cbFile[x + 1]) { 48 s = li->list[x]; 49 li->list[x] = li->list[x + 1]; 50 li->list[x + 1] = s; 51 l = li->cbFile[x]; 52 li->cbFile[x] = li->cbFile[x + 1]; 53 li->cbFile[x + 1] = l; 54 if(li->ulitemID) { 55 l = li->ulitemID[x]; 56 li->ulitemID[x] = li->ulitemID[x + 1]; 57 li->ulitemID[x + 1] = l; 58 } 59 swapped = TRUE; 60 } 61 } 62 } while(swapped); 63 } 64 } 65 66 67 VOID FreeListInfo (LISTINFO *li) 68 { 69 if(li) { 70 if(li->ulitemID) 46 for (x = 0; li->list[x] && li->list[x + 1]; x++) { 47 if (li->cbFile[x] < li->cbFile[x + 1]) { 48 s = li->list[x]; 49 li->list[x] = li->list[x + 1]; 50 li->list[x + 1] = s; 51 l = li->cbFile[x]; 52 li->cbFile[x] = li->cbFile[x + 1]; 53 li->cbFile[x + 1] = l; 54 if (li->ulitemID) { 55 l = li->ulitemID[x]; 56 li->ulitemID[x] = li->ulitemID[x + 1]; 57 li->ulitemID[x + 1] = l; 58 } 59 swapped = TRUE; 60 } 61 } 62 } while (swapped); 63 } 64 } 65 66 VOID FreeListInfo(LISTINFO * li) 67 { 68 if (li) { 69 if (li->ulitemID) 71 70 free(li->ulitemID); 72 if (li->cbFile)71 if (li->cbFile) 73 72 free(li->cbFile); 74 if (li->list)73 if (li->list) 75 74 FreeList(li->list); 76 75 free(li); … … 78 77 } 79 78 80 81 VOID FreeList (CHAR **list) 79 VOID FreeList(CHAR ** list) 82 80 { 83 81 register INT x; 84 82 85 if (list) {86 for (x = 0;list[x];x++) {87 #ifdef __DEBUG_ALLOC__ 88 _heap_check();83 if (list) { 84 for (x = 0; list[x]; x++) { 85 #ifdef __DEBUG_ALLOC__ 86 _heap_check(); 89 87 #endif 90 88 free(list[x]); 91 89 } 92 90 #ifdef __DEBUG_ALLOC__ 93 _heap_check();91 _heap_check(); 94 92 #endif 95 93 free(list); … … 98 96 } 99 97 100 101 INT AddToFileList (CHAR *string,FILEFINDBUF4 *ffb4,FILELIST ***list, 102 INT *numfiles,INT *numalloced) 98 INT AddToFileList(CHAR * string, FILEFINDBUF4 * ffb4, FILELIST *** list, 99 INT * numfiles, INT * numalloced) 103 100 { 104 101 FILELIST *pfl; 102 105 103 if (string && ffb4) { 106 104 if (((*numfiles) + 3) > *numalloced) { 107 105 FILELIST **pflArray; 106 108 107 // Use plain realloc for speed 109 pflArray = realloc(*list, (*numalloced + 6) * sizeof(FILELIST *));108 pflArray = realloc(*list, (*numalloced + 6) * sizeof(FILELIST *)); 110 109 if (!pflArray) { 111 Runtime_Error(pszSrcFile,__LINE__,GetPString(IDS_OUTOFMEMORY));112 return 1;110 Runtime_Error(pszSrcFile, __LINE__, GetPString(IDS_OUTOFMEMORY)); 111 return 1; 113 112 } 114 113 (*numalloced) += 6; … … 118 117 pfl = malloc(sizeof(FILELIST) + strlen(string)); 119 118 if (!pfl) { 120 Runtime_Error(pszSrcFile, __LINE__,GetPString(IDS_OUTOFMEMORY));119 Runtime_Error(pszSrcFile, __LINE__, GetPString(IDS_OUTOFMEMORY)); 121 120 return 2; 122 121 } … … 130 129 pfl->cbFile = ffb4->cbFile; 131 130 pfl->easize = CBLIST_TO_EASIZE(ffb4->cbList); 132 strcpy(pfl->fname, string);131 strcpy(pfl->fname, string); 133 132 (*list)[*numfiles] = pfl; 134 133 (*numfiles)++; … … 142 141 } 143 142 144 145 INT AddToList (CHAR *string,CHAR ***list,INT *numfiles,INT *numalloced) 143 INT AddToList(CHAR * string, CHAR *** list, INT * numfiles, INT * numalloced) 146 144 { 147 145 CHAR **ppsz; … … 151 149 if (((*numfiles) + 3) > *numalloced) { 152 150 // Use plain realloc for speed 153 ppsz = realloc(*list, (*numalloced + 6) * sizeof(CHAR *));151 ppsz = realloc(*list, (*numalloced + 6) * sizeof(CHAR *)); 154 152 if (!ppsz) { 155 Runtime_Error(pszSrcFile, __LINE__, "realloc");156 return 1;153 Runtime_Error(pszSrcFile, __LINE__, "realloc"); 154 return 1; 157 155 } 158 156 (*numalloced) += 6; … … 162 160 psz = malloc(strlen(string) + 1); 163 161 if (!psz) { 164 Runtime_Error(pszSrcFile, __LINE__,GetPString(IDS_OUTOFMEMORY));162 Runtime_Error(pszSrcFile, __LINE__, GetPString(IDS_OUTOFMEMORY)); 165 163 return 2; 166 164 } 167 165 (*list)[*numfiles] = psz; 168 strcpy((*list)[*numfiles], string);166 strcpy((*list)[*numfiles], string); 169 167 (*numfiles)++; 170 168 (*list)[*numfiles] = NULL; … … 177 175 } 178 176 179 180 CHAR ** BuildList (HWND hwndCnr) 177 CHAR **BuildList(HWND hwndCnr) 181 178 { 182 179 PCNRITEM pci; 183 CHAR **list = NULL,**test;184 INT numfiles = 0,numalloc = 0,error = 0,attribute = CRA_CURSORED;185 186 pci = (PCNRITEM) CurrentRecord(hwndCnr);187 if (pci && (INT)pci != -1 && !(pci->flags & RECFLAGS_ENV)) {188 if (pci->rc.flRecordAttr & CRA_SELECTED) {180 CHAR **list = NULL, **test; 181 INT numfiles = 0, numalloc = 0, error = 0, attribute = CRA_CURSORED; 182 183 pci = (PCNRITEM) CurrentRecord(hwndCnr); 184 if (pci && (INT) pci != -1 && !(pci->flags & RECFLAGS_ENV)) { 185 if (pci->rc.flRecordAttr & CRA_SELECTED) { 189 186 attribute = CRA_SELECTED; 190 pci = WinSendMsg(hwndCnr, CM_QUERYRECORDEMPHASIS,MPFROMLONG(CMA_FIRST),191 MPFROMSHORT(attribute));192 } 193 } 194 while (pci && (INT)pci != -1 && !error) {187 pci = WinSendMsg(hwndCnr, CM_QUERYRECORDEMPHASIS, MPFROMLONG(CMA_FIRST), 188 MPFROMSHORT(attribute)); 189 } 190 } 191 while (pci && (INT) pci != -1 && !error) { 195 192 if (!(pci->rc.flRecordAttr & CRA_FILTERED)) 196 error = AddToList(pci->szFileName, &list,&numfiles,&numalloc);197 pci = WinSendMsg(hwndCnr, CM_QUERYRECORDEMPHASIS,MPFROMP(pci),198 MPFROMSHORT(attribute));193 error = AddToList(pci->szFileName, &list, &numfiles, &numalloc); 194 pci = WinSendMsg(hwndCnr, CM_QUERYRECORDEMPHASIS, MPFROMP(pci), 195 MPFROMSHORT(attribute)); 199 196 } 200 197 if (numalloc > numfiles + 1) { 201 198 // Use plain realloc for speed 202 test = realloc(list, sizeof(CHAR *) * (numfiles + 1));199 test = realloc(list, sizeof(CHAR *) * (numfiles + 1)); 203 200 if (!test) 204 Runtime_Error(pszSrcFile, __LINE__,GetPString(IDS_OUTOFMEMORY));201 Runtime_Error(pszSrcFile, __LINE__, GetPString(IDS_OUTOFMEMORY)); 205 202 else 206 203 list = test; … … 209 206 } 210 207 211 212 CHAR ** BuildArcList (HWND hwndCnr) 208 CHAR **BuildArcList(HWND hwndCnr) 213 209 { 214 210 PARCITEM pai; 215 CHAR **list = NULL;216 INT numfiles = 0,numalloc = 0,error = 0,attribute = CRA_CURSORED;217 218 pai = (PARCITEM) CurrentRecord(hwndCnr);219 if (pai && (INT)pai != -1) {220 if (pai->rc.flRecordAttr & CRA_SELECTED) {211 CHAR **list = NULL; 212 INT numfiles = 0, numalloc = 0, error = 0, attribute = CRA_CURSORED; 213 214 pai = (PARCITEM) CurrentRecord(hwndCnr); 215 if (pai && (INT) pai != -1) { 216 if (pai->rc.flRecordAttr & CRA_SELECTED) { 221 217 attribute = CRA_SELECTED; 222 pai = WinSendMsg(hwndCnr, CM_QUERYRECORDEMPHASIS,MPFROMLONG(CMA_FIRST),223 MPFROMSHORT(attribute));224 } 225 } 226 while ( pai && (INT)pai != -1 && !error) {227 if (!(pai->rc.flRecordAttr & CRA_FILTERED))228 error = AddToList(pai->szFileName, &list,&numfiles,&numalloc);229 pai = WinSendMsg(hwndCnr, CM_QUERYRECORDEMPHASIS,MPFROMP(pai),230 MPFROMSHORT(attribute));218 pai = WinSendMsg(hwndCnr, CM_QUERYRECORDEMPHASIS, MPFROMLONG(CMA_FIRST), 219 MPFROMSHORT(attribute)); 220 } 221 } 222 while (pai && (INT) pai != -1 && !error) { 223 if (!(pai->rc.flRecordAttr & CRA_FILTERED)) 224 error = AddToList(pai->szFileName, &list, &numfiles, &numalloc); 225 pai = WinSendMsg(hwndCnr, CM_QUERYRECORDEMPHASIS, MPFROMP(pai), 226 MPFROMSHORT(attribute)); 231 227 } 232 228 return list; 233 229 } 234 230 235 236 CHAR ** RemoveFromList (CHAR **list,CHAR *item) 237 { 238 register INT x,y; 239 240 if(list && list[0] && item) { 241 for(x = 0;list[x];x++) { 242 if(item == list[x]) { 243 free(list[x]); 244 list[x] = NULL; 245 for(y = x;;y++) { 246 if(y != x && !list[y]) 247 break; 248 list[y] = list[y + 1]; 249 } 250 if(!list[0]) { 251 FreeList(list); 252 list = NULL; 253 } 254 break; 231 CHAR **RemoveFromList(CHAR ** list, CHAR * item) 232 { 233 register INT x, y; 234 235 if (list && list[0] && item) { 236 for (x = 0; list[x]; x++) { 237 if (item == list[x]) { 238 free(list[x]); 239 list[x] = NULL; 240 for (y = x;; y++) { 241 if (y != x && !list[y]) 242 break; 243 list[y] = list[y + 1]; 244 } 245 if (!list[0]) { 246 FreeList(list); 247 list = NULL; 248 } 249 break; 255 250 } 256 251 } … … 259 254 } 260 255 261 262 CHAR ** CombineLists (CHAR **prime,CHAR **add) 256 CHAR **CombineLists(CHAR ** prime, CHAR ** add) 263 257 { 264 258 register INT x; 265 INT numalloc,numfiles = 0;266 267 if (add && add[0]) {268 if (prime) {269 for (x = 0;prime[x];x++)270 numfiles++;259 INT numalloc, numfiles = 0; 260 261 if (add && add[0]) { 262 if (prime) { 263 for (x = 0; prime[x]; x++) 264 numfiles++; 271 265 } 272 266 numalloc = numfiles; 273 for (x = 0;add[x];x++) {274 if (*add[x])275 AddToList(add[x],&prime,&numfiles,&numalloc);267 for (x = 0; add[x]; x++) { 268 if (*add[x]) 269 AddToList(add[x], &prime, &numfiles, &numalloc); 276 270 } 277 271 FreeList(add);
Note:
See TracChangeset
for help on using the changeset viewer.
