source: trunk/dll/select.c@ 204

Last change on this file since 204 was 204, checked in by root, 20 years ago

Drop unused code

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 45.4 KB
RevLine 
[123]1
2/***********************************************************************
3
4 $Id: select.c 204 2005-06-08 05:57:53Z root $
5
6 Copyright (c) 1993-98 M. Kimes
[158]7 Copyright (c) 2004, 2005 Steven H. Levine
[123]8
[158]9 01 Aug 04 SHL Rework lstrip/rstrip usage
10 25 May 05 SHL Rework for ULONGLONG
[204]11 06 Jun 05 SHL Drop unused code
[123]12
13***********************************************************************/
14
[2]15#define INCL_DOS
16#define INCL_WIN
[158]17#define INCL_LONGLONG
18#include <os2.h>
[2]19
20#include <stdio.h>
21#include <stdlib.h>
22#include <string.h>
23#include <share.h>
[158]24
[2]25#include "fm3dll.h"
26#include "fm3str.h"
27
28#pragma alloc_text(SELECT,UnHilite,SelectAll,DeselectAll,MarkAll,SetMask)
29#pragma alloc_text(SELECT,SelectList)
30#pragma alloc_text(SELECT1,Deselect,HideAll,RemoveAll,ExpandAll,InvertAll)
31
32
33VOID UnHilite (HWND hwndCnr,BOOL all,CHAR ***list) {
34
35 PCNRITEM pci;
36 INT numfiles = 0,numalloc = 0;
37 INT attribute = CRA_CURSORED;
38
39 if(all && list && *list) {
40 FreeList(*list);
41 *list = NULL;
42 }
43 pci = (PCNRITEM)CurrentRecord(hwndCnr);
44 if(pci && (INT)pci != -1) {
45 if(pci->rc.flRecordAttr & CRA_SELECTED) {
46 attribute = CRA_SELECTED;
47 pci = WinSendMsg(hwndCnr,CM_QUERYRECORDEMPHASIS,MPFROMLONG(CMA_FIRST),
48 MPFROMSHORT(attribute));
49 }
50 while(pci && (INT)pci != -1) {
51 WinSendMsg(hwndCnr,CM_SETRECORDEMPHASIS,MPFROMP(pci),
52 MPFROM2SHORT(FALSE,CRA_SELECTED));
53 if(!all)
54 break;
55 if(list)
56 AddToList(pci->szFileName,list,&numfiles,&numalloc);
57 pci = (PCNRITEM)WinSendMsg(hwndCnr,CM_QUERYRECORDEMPHASIS,
58 MPFROMP(pci),
59 MPFROMSHORT(CRA_SELECTED));
60 }
61 }
62}
63
64
65VOID SelectList (HWND hwndCnr,BOOL partial,BOOL deselect,BOOL clearfirst,
66 PCNRITEM pciParent,CHAR *filename,CHAR **list) {
67
68 PCNRITEM pci;
69 register INT x;
70 BOOL foundone = FALSE;
71 ULONG errs = 0L;
72
73 if(clearfirst && !deselect)
74 UnHilite(hwndCnr,TRUE,NULL);
75 if(list && list[0]) {
76 for(x = 0;list[x];x++) {
77 pci = FindCnrRecord(hwndCnr,
78 list[x],
79 pciParent,
80 partial,
81 partial,
82 TRUE);
83 if(pci) {
84 WinSendMsg(hwndCnr,
85 CM_SETRECORDEMPHASIS,
86 MPFROMP(pci),
87 MPFROM2SHORT((SHORT)((deselect) ? FALSE : TRUE),
88 CRA_SELECTED));
89 foundone = TRUE;
90 }
91 }
92 if(!foundone)
93 DosBeep(250,50);
94 }
95 else if(filename && *filename) {
96
97 FILE *fp;
98 CHAR input[1024],*p;
99
100 fp = _fsopen(filename,"r",SH_DENYNO);
101 if(fp) {
102 while(!feof(fp)) {
103 if(!fgets(input,1024,fp))
104 break;
105 input[1023] = 0;
[123]106 bstripcr(input);
[2]107 if(*input == '\"') {
108 memmove(input,input + 1,strlen(input) + 1);
109 lstrip(input);
110 p = strchr(input,'\"');
111 if(p)
112 *p = 0;
113 rstrip(input);
114 }
115 else {
116 p = strchr(input,' ');
117 if(p)
118 *p = 0;
119 }
120 /* input now contains name of file to select */
121 pci = FindCnrRecord(hwndCnr,
122 input,
123 pciParent,
124 partial,
125 partial,
126 TRUE);
127 if(pci) /* found it? */
128 WinSendMsg(hwndCnr,
129 CM_SETRECORDEMPHASIS,
130 MPFROMP(pci),
131 MPFROM2SHORT((SHORT)((deselect) ? FALSE : TRUE),
132 CRA_SELECTED));
133 else
134 errs++;
135 if(errs > 50L) { /* prevent runaway on bad file */
136
137 APIRET ret;
138
139 ret = saymsg(MB_YESNO,
140 hwndCnr,
141 GetPString(IDS_POSSIBLEERRORTEXT),
142 GetPString(IDS_MAYNOTBELISTTEXT),
143 filename);
144 if(ret == MBID_NO)
145 break;
146 errs = 0L;
147 }
148 }
149 fclose(fp);
150 }
151 }
152}
153
154
155VOID SelectAll (HWND hwndCnr,BOOL files,BOOL dirs,CHAR *mask,
156 CHAR *text,BOOL arc) {
157
158 PCNRITEM pci;
159 BOOL markit;
160 register CHAR *file;
161 MASK Mask;
162 register INT x;
163 ULONG textlen = 0;
164
165 if(text)
166 textlen = strlen(text);
167 memset(&Mask,0,sizeof(Mask));
168 if(mask && *mask)
169 SetMask(mask,&Mask);
170 pci = (PCNRITEM)WinSendMsg(hwndCnr,CM_QUERYRECORD,MPVOID,
171 MPFROM2SHORT(CMA_FIRST,CMA_ITEMORDER));
172 while( pci && (INT)pci != -1 ) {
173 markit = FALSE;
174 if(!(pci->rc.flRecordAttr & CRA_FILTERED)) {
175 if(!arc) {
176 if(files && !(pci->attrFile & FILE_DIRECTORY))
177 markit = TRUE;
178 if(dirs && (pci->attrFile & FILE_DIRECTORY))
179 markit = TRUE;
180 }
181 else
182 markit = TRUE;
183 if(mask && *mask && markit) {
184 markit = FALSE;
185 file = strrchr(pci->szFileName,'\\');
186 if(!file)
187 file = strrchr(pci->szFileName,':');
188 if(file)
189 file++;
190 else
191 file = pci->szFileName;
192 for(x = 0;Mask.pszMasks[x];x++) {
193 if(*Mask.pszMasks[x]) {
194 if(*Mask.pszMasks[x] != '/') {
195 if(wildcard((strchr(Mask.pszMasks[x],'\\') ||
196 strchr(Mask.pszMasks[x],':')) ?
197 pci->szFileName : file,Mask.pszMasks[x],FALSE))
198 markit = TRUE;
199 }
200 else {
201 if(wildcard((strchr(Mask.pszMasks[x],'\\') ||
202 strchr(Mask.pszMasks[x],':'),FALSE) ?
203 pci->szFileName : file,Mask.pszMasks[x] + 1,
204 FALSE)) {
205 markit = FALSE;
206 break;
207 }
208 }
209 }
210 }
211 }
212 }
213 if(markit && text && *text && !(pci->attrFile & FILE_DIRECTORY)) {
214
215 CHAR *input;
216
217 markit = FALSE;
218 input = malloc(65537);
219 if(input) {
220
221 ULONG pos;
222 LONG len;
223 FILE *inputFile;
224
225 if((inputFile = _fsopen(pci->szFileName,"rb",SH_DENYNO)) != NULL) {
226 pos = ftell(inputFile);
227 while(!feof(inputFile)) {
228 if(pos)
229 fseek(inputFile,pos - 256,SEEK_SET);
230 len = fread(input,1,65536,inputFile);
231 if(len >= 0) {
232 if(findstring(text,textlen,input,len,FALSE)) {
233 markit = TRUE;
234 break;
235 }
236 }
237 else
238 break;
239 }
240 fclose(inputFile) ;
241 }
242 free(input);
243 DosSleep(1L);
244 }
245 }
246 else if(markit && text && *text && (pci->attrFile & FILE_DIRECTORY))
247 markit = FALSE;
248 if(markit)
249 WinSendMsg(hwndCnr,CM_SETRECORDEMPHASIS,MPFROMP(pci),
250 MPFROM2SHORT(TRUE,CRA_SELECTED));
251 pci = (PCNRITEM)WinSendMsg(hwndCnr,CM_QUERYRECORD,MPFROMP(pci),
252 MPFROM2SHORT(CMA_NEXT,CMA_ITEMORDER));
253 }
254}
255
256
257VOID DeselectAll (HWND hwndCnr,BOOL files,BOOL dirs,CHAR *mask,CHAR *text,
258 BOOL arc) {
259
260 PCNRITEM pci;
261 BOOL unmarkit;
262 register CHAR *file;
263 MASK Mask;
264 register INT x;
265 ULONG textlen = 0;
266
267 if(text)
268 textlen = strlen(text);
269 memset(&Mask,0,sizeof(Mask));
270 if(mask && *mask)
271 SetMask(mask,&Mask);
272 pci = (PCNRITEM)WinSendMsg(hwndCnr,CM_QUERYRECORD,MPVOID,
273 MPFROM2SHORT(CMA_FIRST,CMA_ITEMORDER));
274 while( pci && (INT)pci != -1 ) {
275 unmarkit = FALSE;
276 if(!(pci->rc.flRecordAttr & CRA_FILTERED)) {
277 if(!arc) {
278 if(files && !(pci->attrFile & FILE_DIRECTORY))
279 unmarkit = TRUE;
280 if(dirs && (pci->attrFile & FILE_DIRECTORY))
281 unmarkit = TRUE;
282 }
283 else
284 unmarkit = TRUE;
285 if(mask && *mask && unmarkit) {
286 unmarkit = FALSE;
287 file = strrchr(pci->szFileName,'\\');
288 if(!file)
289 file = strrchr(pci->szFileName,':');
290 if(file)
291 file++;
292 else
293 file = pci->szFileName;
294 for(x = 0;Mask.pszMasks[x];x++) {
295 if(*Mask.pszMasks[x]) {
296 if(*Mask.pszMasks[x] != '/') {
297 if(wildcard((strchr(Mask.pszMasks[x],'\\') ||
298 strchr(Mask.pszMasks[x],':')) ?
299 pci->szFileName : file,Mask.pszMasks[x],FALSE))
300 unmarkit = TRUE;
301 }
302 else {
303 if(wildcard((strchr(Mask.pszMasks[x],'\\') ||
304 strchr(Mask.pszMasks[x],':')) ?
305 pci->szFileName : file,Mask.pszMasks[x] + 1,
306 FALSE)) {
307 unmarkit = FALSE;
308 break;
309 }
310 }
311 }
312 }
313 }
314 }
315 if(unmarkit && text && *text && !(pci->attrFile & FILE_DIRECTORY)) {
316
317 CHAR *input;
318
319 unmarkit = FALSE;
320 input = malloc(65537);
321 if(input) {
322
323 ULONG pos;
324 LONG len;
325 FILE *inputFile;
326
327 if((inputFile = _fsopen(pci->szFileName,"rb",SH_DENYNO)) != NULL) {
328 pos = ftell(inputFile);
329 while(!feof(inputFile)) {
330 if(pos)
331 fseek(inputFile,pos - 256,SEEK_SET);
332 len = fread(input,1,65536,inputFile);
333 if(len >= 0) {
334 if(findstring(text,textlen,input,len,FALSE)) {
335 unmarkit = TRUE;
336 break;
337 }
338 }
339 else
340 break;
341 }
342 fclose(inputFile) ;
343 }
344 free(input);
345 DosSleep(1L);
346 }
347 }
348 else if(unmarkit && text && *text && (pci->attrFile & FILE_DIRECTORY))
349 unmarkit = FALSE;
350 if(unmarkit)
351 WinSendMsg(hwndCnr,CM_SETRECORDEMPHASIS,pci,
352 MPFROM2SHORT(FALSE,CRA_SELECTED | CRA_CURSORED |
353 CRA_INUSE | CRA_SOURCE));
354 pci = (PCNRITEM)WinSendMsg(hwndCnr,CM_QUERYRECORD,MPFROMP(pci),
355 MPFROM2SHORT(CMA_NEXT,CMA_ITEMORDER));
356 }
357}
358
359
360VOID Deselect (HWND hwndCnr) {
361
362 PCNRITEM pcil;
363
364 pcil = (PCNRITEM)WinSendMsg(hwndCnr,CM_QUERYRECORDEMPHASIS,
365 MPFROMLONG(CMA_FIRST),
366 MPFROMSHORT(CRA_SELECTED));
367 while(pcil && (INT)pcil != -1) {
368 WinSendMsg(hwndCnr,CM_SETRECORDEMPHASIS,MPFROMP(pcil),
369 MPFROM2SHORT(FALSE,CRA_SELECTED));
370 pcil = WinSendMsg(hwndCnr,CM_QUERYRECORDEMPHASIS,MPFROMP(pcil),
371 MPFROMSHORT(CRA_SELECTED));
372 }
373}
374
375
376VOID HideAll (HWND hwndCnr) {
377
378 PCNRITEM pci,pciH;
379 INT attribute = CRA_CURSORED;
380 CNRINFO cnri;
381 BOOL didone = FALSE;
382
383 memset(&cnri,0,sizeof(CNRINFO));
384 cnri.cb = sizeof(CNRINFO);
385 WinSendMsg(hwndCnr,CM_QUERYCNRINFO,MPFROMP(&cnri),
386 MPFROMLONG(sizeof(CNRINFO)));
387 pci = (PCNRITEM)CurrentRecord(hwndCnr);
388 if(pci && (INT)pci != -1) {
389 if(pci->rc.flRecordAttr & CRA_SELECTED) {
390 attribute = CRA_SELECTED;
391 pci = WinSendMsg(hwndCnr,CM_QUERYRECORDEMPHASIS,MPFROMLONG(CMA_FIRST),
392 MPFROMSHORT(attribute));
393 }
394 }
395 while(pci && (INT)pci != -1) {
396 pciH = WinSendMsg(hwndCnr,CM_QUERYRECORDEMPHASIS,MPFROMP(pci),
397 MPFROMSHORT(attribute));
398 WinSendMsg(hwndCnr,CM_SETRECORDEMPHASIS,MPFROMP(pci),
399 MPFROM2SHORT(FALSE,CRA_CURSORED | CRA_SELECTED |
400 CRA_INUSE | CRA_SOURCE));
401 pci->rc.flRecordAttr |= CRA_FILTERED;
402 didone = TRUE;
403 if(fSyncUpdates) {
404 if(cnri.flWindowAttr & CV_DETAIL)
405 WinSendMsg(hwndCnr,CM_INVALIDATERECORD,MPVOID,
406 MPFROM2SHORT(0,CMA_REPOSITION | CMA_ERASE));
407 else
408 WinSendMsg(hwndCnr,CM_INVALIDATERECORD,MPFROMP(&pci),
409 MPFROM2SHORT(1,CMA_REPOSITION | CMA_ERASE));
410 }
411 pci = pciH;
412 }
413 if(didone && !fSyncUpdates)
414 WinSendMsg(hwndCnr,CM_INVALIDATERECORD,MPVOID,
415 MPFROM2SHORT(0,CMA_ERASE | CMA_REPOSITION));
416}
417
418
419VOID MarkAll (HWND hwndCnr,BOOL quitit,BOOL target,BOOL source) {
420
421 PCNRITEM pci;
422 INT attribute = CRA_CURSORED;
423
424 if(quitit)
425 attribute = (target) ? CRA_TARGET : (source) ? CRA_SOURCE : CRA_INUSE;
426 pci = (PCNRITEM)WinSendMsg(hwndCnr,CM_QUERYRECORDEMPHASIS,
427 MPFROMLONG(CMA_FIRST),
428 MPFROMSHORT(attribute));
429 if(pci && (INT)pci != -1) {
430 if(attribute == CRA_CURSORED) {
431 if(pci->rc.flRecordAttr & CRA_SELECTED) {
432 attribute = CRA_SELECTED;
433 pci = WinSendMsg(hwndCnr,CM_QUERYRECORDEMPHASIS,MPFROMLONG(CMA_FIRST),
434 MPFROMSHORT(attribute));
435 }
436 }
437 }
438 while( pci && (INT)pci != -1) {
439 WinSendMsg(hwndCnr,CM_SETRECORDEMPHASIS,MPFROMP(pci),
440 MPFROM2SHORT(!quitit,
441 ((target) ? CRA_TARGET : (source) ? CRA_SOURCE : CRA_INUSE)));
442 pci = WinSendMsg(hwndCnr,CM_QUERYRECORDEMPHASIS,MPFROMP(pci),
443 MPFROMSHORT(attribute));
444 }
445}
446
447
[158]448VOID RemoveAll (HWND hwndCnr,ULONGLONG *pullTotalBytes,ULONG *pulTotalFiles) {
[2]449
450 PCNRITEM pci;
451 INT attribute = CRA_CURSORED;
452 BOOL didone = FALSE;
453
454 pci = (PCNRITEM)CurrentRecord(hwndCnr);
455 if(pci && (INT)pci != -1) {
456 if(pci->rc.flRecordAttr & CRA_SELECTED) {
457 attribute = CRA_SELECTED;
458 pci = WinSendMsg(hwndCnr,CM_QUERYRECORDEMPHASIS,MPFROMLONG(CMA_FIRST),
459 MPFROMSHORT(attribute));
460 }
461 }
462 while(pci && (INT)pci != -1) {
[158]463 if (!(pci->rc.flRecordAttr & CRA_FILTERED))
464 {
[2]465 didone = TRUE;
[158]466 if (pulTotalFiles)
467 *pulTotalFiles--;
468 if (pullTotalBytes)
469 *pullTotalBytes -= (pci->cbFile + pci->easize);
[2]470 WinSendMsg(hwndCnr,CM_SETRECORDEMPHASIS,MPFROMP(pci),
471 MPFROM2SHORT(0,CRA_SELECTED));
472 if(fSyncUpdates)
473 WinSendMsg(hwndCnr,CM_REMOVERECORD,MPFROMP(&pci),
474 MPFROM2SHORT(1,CMA_FREE | CMA_INVALIDATE));
475 else
476 WinSendMsg(hwndCnr,CM_REMOVERECORD,MPFROMP(&pci),
477 MPFROM2SHORT(1,CMA_FREE));
478 if(attribute == CRA_CURSORED)
479 break;
480 pci = WinSendMsg(hwndCnr,CM_QUERYRECORDEMPHASIS,MPFROMLONG(CMA_FIRST),
481 MPFROMSHORT(attribute));
482 }
483 else
484 pci = WinSendMsg(hwndCnr,CM_QUERYRECORDEMPHASIS,MPFROMP(pci),
485 MPFROMSHORT(attribute));
486 }
487 if(didone && !fSyncUpdates)
488 WinSendMsg(hwndCnr,CM_INVALIDATERECORD,MPVOID,
489 MPFROM2SHORT(0,CMA_REPOSITION));
490}
491
492
493VOID SetMask (CHAR *str,MASK *mask) {
494
495 register INT x;
496 register CHAR *p;
497
498 if(str != mask->szMask)
499 strcpy(mask->szMask,str);
500 strcpy(mask->szMaskCopy,mask->szMask);
501 memset(mask->pszMasks,0,sizeof(CHAR *) * 26);
502 p = mask->pszMasks[0] = mask->szMaskCopy;
503 for(x = 1;x < 24;x++) {
504 while(*p && *p != ';')
505 p++;
506 if(*p) {
507 *p = 0;
508 p++;
509 mask->pszMasks[x] = p;
510 }
511 else {
512 mask->pszMasks[x] = NULL;
513 break;
514 }
515 }
516 mask->pszMasks[x] = NULL;
517}
518
519
520VOID ExpandAll (HWND hwndCnr,BOOL expand,PCNRITEM pciParent) {
521
522 PCNRITEM pci;
523
524 if(!pciParent)
525 pciParent = WinSendMsg(hwndCnr,CM_QUERYRECORD,MPFROMP(NULL),
526 MPFROM2SHORT(CMA_FIRST,CMA_ITEMORDER));
527 if(pciParent) {
528 if(expand && !(pciParent->rc.flRecordAttr & CRA_EXPANDED))
529 WinSendMsg(hwndCnr,CM_EXPANDTREE,MPFROMP(pciParent),MPVOID);
530 else if(!expand && (pciParent->rc.flRecordAttr & CRA_EXPANDED))
531 WinSendMsg(hwndCnr,CM_COLLAPSETREE,MPFROMP(pciParent),MPVOID);
532 pci = (PCNRITEM)WinSendMsg(hwndCnr,CM_QUERYRECORD,MPFROMP(pciParent),
533 MPFROM2SHORT(CMA_FIRSTCHILD,CMA_ITEMORDER));
534 if(pci)
535 DosSleep(1L);
536 while(pci && (INT)pci != -1) {
537 ExpandAll(hwndCnr,expand,pci);
538 pci = (PCNRITEM)WinSendMsg(hwndCnr,CM_QUERYRECORD,MPFROMP(pci),
539 MPFROM2SHORT(CMA_NEXT,CMA_ITEMORDER));
540 }
541 }
542 DosSleep(0L);
543}
544
545
546VOID InvertAll (HWND hwndCnr) {
547
548 PCNRITEM pci;
549
550 pci = (PCNRITEM)WinSendMsg(hwndCnr,CM_QUERYRECORD,MPVOID,
551 MPFROM2SHORT(CMA_FIRST,CMA_ITEMORDER));
552 while( pci && (INT)pci != -1 ) {
553 if(!(pci->rc.flRecordAttr & CRA_FILTERED)) {
554 if(!(pci->rc.flRecordAttr & CRA_SELECTED))
555 WinSendMsg(hwndCnr,CM_SETRECORDEMPHASIS,MPFROMP(pci),
556 MPFROM2SHORT(TRUE,CRA_SELECTED));
557 else
558 WinSendMsg(hwndCnr,CM_SETRECORDEMPHASIS,MPFROMP(pci),
559 MPFROM2SHORT(FALSE,CRA_SELECTED));
560 }
561 pci = (PCNRITEM)WinSendMsg(hwndCnr,CM_QUERYRECORD,MPFROMP(pci),
562 MPFROM2SHORT(CMA_NEXT,CMA_ITEMORDER));
563 }
564}
565
566
[204]567#pragma alloc_text (SELECT3,SpecialSelect)
[2]568#pragma alloc_text(SELECT4,FreeCnrs,SpecialSelect2,CompSSNames,CompSSNamesB)
569
570
571VOID SpecialSelect (HWND hwndCnrS,HWND hwndCnrD,INT action,BOOL reset) {
572
573 PCNRITEM pciS,pciD,*pciSa = NULL,*pciDa = NULL;
574 CNRINFO cnri;
575 BOOL slow = FALSE;
576 register INT x,numD,numS;
577
578 if(!hwndCnrS || !hwndCnrD)
579 return;
580
581 memset(&cnri,0,sizeof(CNRINFO));
582 cnri.cb = sizeof(CNRINFO);
583 WinSendMsg(hwndCnrD,CM_QUERYCNRINFO,MPFROMP(&cnri),
584 MPFROMLONG(sizeof(CNRINFO)));
585 numD = (INT)cnri.cRecords;
586 memset(&cnri,0,sizeof(CNRINFO));
587 cnri.cb = sizeof(CNRINFO);
588 WinSendMsg(hwndCnrS,CM_QUERYCNRINFO,MPFROMP(&cnri),
589 MPFROMLONG(sizeof(CNRINFO)));
590 numS = (INT)cnri.cRecords;
591 if(!numD || numS != numD) {
592 DosBeep(250,100);
593 saymsg(MB_ENTER,
594 HWND_DESKTOP,
595 DEBUG_STRING,
596 "numD (%lu) != numS (%lu)",
597 numD,
598 numS);
599 return;
600 }
601 pciDa = malloc(sizeof(PCNRITEM) * numD);
602 if(!pciDa) {
603 DosBeep(250,100);
604 return;
605 }
606
607 pciSa = malloc(sizeof(PCNRITEM) * numS);
608 if(!pciSa) {
609 if(pciDa)
610 free(pciDa);
611 DosBeep(250,100);
612 return;
613 }
614
615Restart:
616
617 memset(pciDa,0,sizeof(PCNRITEM) * numD);
618 memset(pciSa,0,sizeof(PCNRITEM) * numS);
619
620 pciD = (PCNRITEM)WinSendMsg(hwndCnrD,CM_QUERYRECORD,MPVOID,
621 MPFROM2SHORT(CMA_FIRST,CMA_ITEMORDER));
622 x = 0;
623 while( pciD && (INT)pciD != -1 && x < numD) {
624 if(reset)
625 pciD->flags = 0;
626 pciDa[x] = pciD;
627 x++;
628 if(!slow)
629 pciD = (PCNRITEM)pciD->rc.preccNextRecord;
630 else
631 pciD = (PCNRITEM)WinSendMsg(hwndCnrD,CM_QUERYRECORD,MPFROMP(pciD),
632 MPFROM2SHORT(CMA_NEXT,CMA_ITEMORDER));
633 if(!(x % 500))
634 DosSleep(1L);
635 else if(!(x % 50))
636 DosSleep(0L);
637 }
638 if(numD != x) {
639 if(!slow) {
640 slow = TRUE;
641 goto Restart;
642 }
643 free(pciDa);
644 free(pciSa);
645 DosBeep(250,100);
646 saymsg(MB_ENTER,
647 HWND_DESKTOP,
648 DEBUG_STRING,
649 "numD (%lu) != x (%lu)",
650 numD,
651 x);
652 return;
653 }
654
655 pciS = (PCNRITEM)WinSendMsg(hwndCnrS,CM_QUERYRECORD,MPVOID,
656 MPFROM2SHORT(CMA_FIRST,CMA_ITEMORDER));
657 x = 0;
658 while( pciS && (INT)pciS != -1 && x < numS) {
659 if(reset)
660 pciS->flags = 0;
661 pciSa[x] = pciS;
662 x++;
663 if(!slow)
664 pciS = (PCNRITEM)pciS->rc.preccNextRecord;
665 else
666 pciS = (PCNRITEM)WinSendMsg(hwndCnrS,CM_QUERYRECORD,MPFROMP(pciS),
667 MPFROM2SHORT(CMA_NEXT,CMA_ITEMORDER));
668 if(!(x % 500))
669 DosSleep(1L);
670 else if(!(x % 50))
671 DosSleep(0L);
672 }
673 if(numS != x) {
674 if(!slow) {
675 slow = TRUE;
676 goto Restart;
677 }
678 free(pciSa);
679 free(pciDa);
680 DosBeep(250,100);
681 saymsg(MB_ENTER,
682 HWND_DESKTOP,
683 DEBUG_STRING,
684 "numS (%lu) != x (%lu)",
685 numS,
686 x);
687 return;
688 }
689
690 if(reset) {
691 for(x = 0;x < numS;x++) {
692 if(!*pciSa[x]->szFileName || !*pciDa[x]->szFileName)
693 continue;
694 pciSa[x]->flags |= CNRITEM_EXISTS;
695 pciDa[x]->flags |= CNRITEM_EXISTS;
696 if(pciSa[x]->cbFile + pciSa[x]->easize >
697 pciDa[x]->cbFile + pciDa[x]->easize) {
698 pciSa[x]->flags |= CNRITEM_LARGER;
699 pciDa[x]->flags |= CNRITEM_SMALLER;
700 }
701 else if(pciSa[x]->cbFile + pciSa[x]->easize <
702 pciDa[x]->cbFile + pciDa[x]->easize) {
703 pciSa[x]->flags |= CNRITEM_SMALLER;
704 pciDa[x]->flags |= CNRITEM_LARGER;
705 }
706 if((pciSa[x]->date.year > pciDa[x]->date.year) ? TRUE :
707 (pciSa[x]->date.year < pciDa[x]->date.year) ? FALSE :
708 (pciSa[x]->date.month > pciDa[x]->date.month) ? TRUE :
709 (pciSa[x]->date.month < pciDa[x]->date.month) ? FALSE :
710 (pciSa[x]->date.day > pciDa[x]->date.day) ? TRUE :
711 (pciSa[x]->date.day < pciDa[x]->date.day) ? FALSE :
712 (pciSa[x]->time.hours > pciDa[x]->time.hours) ? TRUE :
713 (pciSa[x]->time.hours < pciDa[x]->time.hours) ? FALSE :
714 (pciSa[x]->time.minutes > pciDa[x]->time.minutes) ? TRUE :
715 (pciSa[x]->time.minutes < pciDa[x]->time.minutes) ? FALSE :
716 (pciSa[x]->time.seconds > pciDa[x]->time.seconds) ? TRUE :
717 (pciSa[x]->time.seconds < pciDa[x]->time.seconds) ? FALSE : FALSE) {
718 pciSa[x]->flags |= CNRITEM_NEWER;
719 pciDa[x]->flags |= CNRITEM_OLDER;
720 }
721 else if((pciSa[x]->date.year < pciDa[x]->date.year) ? TRUE :
722 (pciSa[x]->date.year > pciDa[x]->date.year) ? FALSE :
723 (pciSa[x]->date.month < pciDa[x]->date.month) ? TRUE :
724 (pciSa[x]->date.month > pciDa[x]->date.month) ? FALSE :
725 (pciSa[x]->date.day < pciDa[x]->date.day) ? TRUE :
726 (pciSa[x]->date.day > pciDa[x]->date.day) ? FALSE :
727 (pciSa[x]->time.hours < pciDa[x]->time.hours) ? TRUE :
728 (pciSa[x]->time.hours > pciDa[x]->time.hours) ? FALSE :
729 (pciSa[x]->time.minutes < pciDa[x]->time.minutes) ? TRUE :
730 (pciSa[x]->time.minutes > pciDa[x]->time.minutes) ? FALSE :
731 (pciSa[x]->time.seconds < pciDa[x]->time.seconds) ? TRUE :
732 (pciSa[x]->time.seconds > pciDa[x]->time.seconds) ? FALSE :
733 FALSE) {
734 pciSa[x]->flags |= CNRITEM_OLDER;
735 pciDa[x]->flags |= CNRITEM_NEWER;
736 }
737 if(!(x % 500))
738 DosSleep(1L);
739 else if(!(x % 50))
740 DosSleep(0L);
741 }
742 }
743
744 switch(action) {
745 case IDM_SELECTIDENTICAL:
746 for(x = 0;x < numS;x++) {
747 if(!(pciSa[x]->rc.flRecordAttr & CRA_FILTERED)) {
748 if(*pciSa[x]->szFileName &&
749 (pciSa[x]->flags & CNRITEM_EXISTS) &&
750 !(pciSa[x]->flags & CNRITEM_SMALLER) &&
751 !(pciSa[x]->flags & CNRITEM_LARGER) &&
752 !(pciSa[x]->flags & CNRITEM_NEWER) &&
753 !(pciSa[x]->flags & CNRITEM_OLDER)) {
754 if(!(pciSa[x]->rc.flRecordAttr & CRA_SELECTED))
755 WinSendMsg(hwndCnrS,CM_SETRECORDEMPHASIS,MPFROMP(pciSa[x]),
756 MPFROM2SHORT(TRUE,CRA_SELECTED));
757 if(!(pciDa[x]->rc.flRecordAttr & CRA_SELECTED))
758 WinSendMsg(hwndCnrD,CM_SETRECORDEMPHASIS,MPFROMP(pciDa[x]),
759 MPFROM2SHORT(TRUE,CRA_SELECTED));
760 }
761 if(!(x % 500))
762 DosSleep(1L);
763 else if(!(x % 50))
764 DosSleep(0L);
765 }
766 }
767 break;
768
769 case IDM_SELECTSAME:
770 for(x = 0;x < numS;x++) {
771 if(!(pciSa[x]->rc.flRecordAttr & CRA_FILTERED) &&
772 *pciSa[x]->szFileName &&
773 (pciSa[x]->flags & CNRITEM_EXISTS) &&
774 !(pciSa[x]->flags & CNRITEM_SMALLER) &&
775 !(pciSa[x]->flags & CNRITEM_LARGER)) {
776 if(!(pciSa[x]->rc.flRecordAttr & CRA_SELECTED))
777 WinSendMsg(hwndCnrS,CM_SETRECORDEMPHASIS,MPFROMP(pciSa[x]),
778 MPFROM2SHORT(TRUE,CRA_SELECTED));
779 if(!(pciDa[x]->rc.flRecordAttr & CRA_SELECTED))
780 WinSendMsg(hwndCnrD,CM_SETRECORDEMPHASIS,MPFROMP(pciDa[x]),
781 MPFROM2SHORT(TRUE,CRA_SELECTED));
782 }
783 if(!(x % 500))
784 DosSleep(1L);
785 else if(!(x % 50))
786 DosSleep(0L);
787 }
788 break;
789
790 case IDM_SELECTBOTH:
791 for(x = 0;x < numS;x++) {
792 if(!(pciSa[x]->rc.flRecordAttr & CRA_FILTERED) &&
793 *pciSa[x]->szFileName &&
794 (pciSa[x]->flags & CNRITEM_EXISTS)) {
795 if(!(pciSa[x]->rc.flRecordAttr & CRA_SELECTED))
796 WinSendMsg(hwndCnrS,CM_SETRECORDEMPHASIS,MPFROMP(pciSa[x]),
797 MPFROM2SHORT(TRUE,CRA_SELECTED));
798 if(!(pciDa[x]->rc.flRecordAttr & CRA_SELECTED))
799 WinSendMsg(hwndCnrD,CM_SETRECORDEMPHASIS,MPFROMP(pciDa[x]),
800 MPFROM2SHORT(TRUE,CRA_SELECTED));
801 }
802 if(!(x % 500))
803 DosSleep(1L);
804 else if(!(x % 50))
805 DosSleep(0L);
806 }
807 break;
808
809 case IDM_SELECTONE:
810 for(x = 0;x < numS;x++) {
811 if(!(pciSa[x]->rc.flRecordAttr & CRA_FILTERED) &&
812 *pciSa[x]->szFileName &&
813 !(pciSa[x]->flags & CNRITEM_EXISTS)) {
814 if(!(pciSa[x]->rc.flRecordAttr & CRA_SELECTED))
815 WinSendMsg(hwndCnrS,CM_SETRECORDEMPHASIS,MPFROMP(pciSa[x]),
816 MPFROM2SHORT(TRUE,CRA_SELECTED));
817 }
818 else if(*pciDa[x]->szFileName &&
819 !(pciDa[x]->flags & CNRITEM_EXISTS)) {
820 if(!(pciDa[x]->rc.flRecordAttr & CRA_SELECTED))
821 WinSendMsg(hwndCnrD,CM_SETRECORDEMPHASIS,MPFROMP(pciDa[x]),
822 MPFROM2SHORT(TRUE,CRA_SELECTED));
823 }
824 if(!(x % 500))
825 DosSleep(1L);
826 else if(!(x % 50))
827 DosSleep(0L);
828 }
829 break;
830
831 case IDM_SELECTBIGGER:
832 for(x = 0;x < numS;x++) {
833 if(!(pciSa[x]->rc.flRecordAttr & CRA_FILTERED) &&
834 *pciSa[x]->szFileName &&
835 (pciSa[x]->flags & CNRITEM_LARGER)) {
836 if(!(pciSa[x]->rc.flRecordAttr & CRA_SELECTED))
837 WinSendMsg(hwndCnrS,CM_SETRECORDEMPHASIS,MPFROMP(pciSa[x]),
838 MPFROM2SHORT(TRUE,CRA_SELECTED));
839 }
840 else if(!(pciDa[x]->rc.flRecordAttr & CRA_FILTERED) &&
841 *pciDa[x]->szFileName &&
842 (pciDa[x]->flags & CNRITEM_LARGER)) {
843 if(!(pciDa[x]->rc.flRecordAttr & CRA_SELECTED))
844 WinSendMsg(hwndCnrD,CM_SETRECORDEMPHASIS,MPFROMP(pciDa[x]),
845 MPFROM2SHORT(TRUE,CRA_SELECTED));
846 }
847 if(!(x % 500))
848 DosSleep(1L);
849 else if(!(x % 50))
850 DosSleep(0L);
851 }
852 break;
853
854 case IDM_SELECTSMALLER:
855 for(x = 0;x < numS;x++) {
856 if(!(pciSa[x]->rc.flRecordAttr & CRA_FILTERED) &&
857 *pciSa[x]->szFileName &&
858 (pciSa[x]->flags & CNRITEM_SMALLER)) {
859 if(!(pciSa[x]->rc.flRecordAttr & CRA_SELECTED))
860 WinSendMsg(hwndCnrS,CM_SETRECORDEMPHASIS,MPFROMP(pciSa[x]),
861 MPFROM2SHORT(TRUE,CRA_SELECTED));
862 }
863 else if(!(pciDa[x]->rc.flRecordAttr & CRA_FILTERED) &&
864 *pciDa[x]->szFileName &&
865 (pciDa[x]->flags & CNRITEM_SMALLER)) {
866 if(!(pciDa[x]->rc.flRecordAttr & CRA_SELECTED))
867 WinSendMsg(hwndCnrD,CM_SETRECORDEMPHASIS,MPFROMP(pciDa[x]),
868 MPFROM2SHORT(TRUE,CRA_SELECTED));
869 }
870 if(!(x % 500))
871 DosSleep(1L);
872 else if(!(x % 50))
873 DosSleep(0L);
874 }
875 break;
876
877 case IDM_SELECTNEWER:
878 for(x = 0;x < numS;x++) {
879 if(!(pciSa[x]->rc.flRecordAttr & CRA_FILTERED) &&
880 *pciSa[x]->szFileName &&
881 (pciSa[x]->flags & CNRITEM_NEWER)) {
882 if(!(pciSa[x]->rc.flRecordAttr & CRA_SELECTED))
883 WinSendMsg(hwndCnrS,CM_SETRECORDEMPHASIS,MPFROMP(pciSa[x]),
884 MPFROM2SHORT(TRUE,CRA_SELECTED));
885 }
886 else if(!(pciDa[x]->rc.flRecordAttr & CRA_FILTERED) &&
887 *pciDa[x]->szFileName &&
888 (pciDa[x]->flags & CNRITEM_NEWER)) {
889 if(!(pciDa[x]->rc.flRecordAttr & CRA_SELECTED))
890 WinSendMsg(hwndCnrD,CM_SETRECORDEMPHASIS,MPFROMP(pciDa[x]),
891 MPFROM2SHORT(TRUE,CRA_SELECTED));
892 }
893 if(!(x % 500))
894 DosSleep(1L);
895 else if(!(x % 50))
896 DosSleep(0L);
897 }
898 break;
899
900 case IDM_SELECTOLDER:
901 for(x = 0;x < numS;x++) {
902 if(!(pciSa[x]->rc.flRecordAttr & CRA_FILTERED) &&
903 *pciSa[x]->szFileName &&
904 (pciSa[x]->flags & CNRITEM_OLDER)) {
905 if(!(pciSa[x]->rc.flRecordAttr & CRA_SELECTED))
906 WinSendMsg(hwndCnrS,CM_SETRECORDEMPHASIS,MPFROMP(pciSa[x]),
907 MPFROM2SHORT(TRUE,CRA_SELECTED));
908 }
909 else if(!(pciDa[x]->rc.flRecordAttr & CRA_FILTERED) &&
910 *pciDa[x]->szFileName &&
911 (pciDa[x]->flags & CNRITEM_OLDER)) {
912 if(!(pciDa[x]->rc.flRecordAttr & CRA_SELECTED))
913 WinSendMsg(hwndCnrD,CM_SETRECORDEMPHASIS,MPFROMP(pciDa[x]),
914 MPFROM2SHORT(TRUE,CRA_SELECTED));
915 }
916 if(!(x % 500))
917 DosSleep(1L);
918 else if(!(x % 50))
919 DosSleep(0L);
920 }
921 break;
922
923 case IDM_DESELECTBOTH:
924 for(x = 0;x < numS;x++) {
925 if(!(pciSa[x]->rc.flRecordAttr & CRA_FILTERED) &&
926 *pciSa[x]->szFileName &&
927 (pciSa[x]->flags & CNRITEM_EXISTS)) {
928 if(pciSa[x]->rc.flRecordAttr & CRA_SELECTED)
929 WinSendMsg(hwndCnrS,CM_SETRECORDEMPHASIS,MPFROMP(pciSa[x]),
930 MPFROM2SHORT(FALSE,CRA_SELECTED));
931 if(pciDa[x]->rc.flRecordAttr & CRA_SELECTED)
932 WinSendMsg(hwndCnrD,CM_SETRECORDEMPHASIS,MPFROMP(pciDa[x]),
933 MPFROM2SHORT(FALSE,CRA_SELECTED));
934 }
935 if(!(x % 500))
936 DosSleep(1L);
937 else if(!(x % 50))
938 DosSleep(0L);
939 }
940 break;
941
942 case IDM_DESELECTONE:
943 for(x = 0;x < numS;x++) {
944 if(!(pciSa[x]->rc.flRecordAttr & CRA_FILTERED) &&
945 *pciSa[x]->szFileName &&
946 !(pciSa[x]->flags & CNRITEM_EXISTS)) {
947 if(pciSa[x]->rc.flRecordAttr & CRA_SELECTED)
948 WinSendMsg(hwndCnrS,CM_SETRECORDEMPHASIS,MPFROMP(pciSa[x]),
949 MPFROM2SHORT(FALSE,CRA_SELECTED));
950 }
951 else if(*pciDa[x]->szFileName &&
952 !(pciDa[x]->flags & CNRITEM_EXISTS)) {
953 if(pciDa[x]->rc.flRecordAttr & CRA_SELECTED)
954 WinSendMsg(hwndCnrD,CM_SETRECORDEMPHASIS,MPFROMP(pciDa[x]),
955 MPFROM2SHORT(FALSE,CRA_SELECTED));
956 }
957 if(!(x % 500))
958 DosSleep(1L);
959 else if(!(x % 50))
960 DosSleep(0L);
961 }
962 break;
963
964 case IDM_DESELECTBIGGER:
965 for(x = 0;x < numS;x++) {
966 if(!(pciSa[x]->rc.flRecordAttr & CRA_FILTERED) &&
967 *pciSa[x]->szFileName &&
968 (pciSa[x]->flags & CNRITEM_LARGER)) {
969 if(pciSa[x]->rc.flRecordAttr & CRA_SELECTED)
970 WinSendMsg(hwndCnrS,CM_SETRECORDEMPHASIS,MPFROMP(pciSa[x]),
971 MPFROM2SHORT(FALSE,CRA_SELECTED));
972 }
973 else if(!(pciDa[x]->rc.flRecordAttr & CRA_FILTERED) &&
974 *pciDa[x]->szFileName &&
975 (pciDa[x]->flags & CNRITEM_LARGER)) {
976 if(pciDa[x]->rc.flRecordAttr & CRA_SELECTED)
977 WinSendMsg(hwndCnrD,CM_SETRECORDEMPHASIS,MPFROMP(pciDa[x]),
978 MPFROM2SHORT(FALSE,CRA_SELECTED));
979 }
980 if(!(x % 500))
981 DosSleep(1L);
982 else if(!(x % 50))
983 DosSleep(0L);
984 }
985 break;
986
987 case IDM_DESELECTSMALLER:
988 for(x = 0;x < numS;x++) {
989 if(!(pciSa[x]->rc.flRecordAttr & CRA_FILTERED) &&
990 *pciSa[x]->szFileName &&
991 (pciSa[x]->flags & CNRITEM_SMALLER)) {
992 if(pciSa[x]->rc.flRecordAttr & CRA_SELECTED)
993 WinSendMsg(hwndCnrS,CM_SETRECORDEMPHASIS,MPFROMP(pciSa[x]),
994 MPFROM2SHORT(FALSE,CRA_SELECTED));
995 }
996 else if(!(pciDa[x]->rc.flRecordAttr & CRA_FILTERED) &&
997 *pciDa[x]->szFileName &&
998 (pciDa[x]->flags & CNRITEM_SMALLER)) {
999 if(pciDa[x]->rc.flRecordAttr & CRA_SELECTED)
1000 WinSendMsg(hwndCnrD,CM_SETRECORDEMPHASIS,MPFROMP(pciDa[x]),
1001 MPFROM2SHORT(FALSE,CRA_SELECTED));
1002 }
1003 if(!(x % 500))
1004 DosSleep(1L);
1005 else if(!(x % 50))
1006 DosSleep(0L);
1007 }
1008 break;
1009
1010 case IDM_DESELECTNEWER:
1011 for(x = 0;x < numS;x++) {
1012 if(!(pciSa[x]->rc.flRecordAttr & CRA_FILTERED) &&
1013 *pciSa[x]->szFileName &&
1014 (pciSa[x]->flags & CNRITEM_NEWER)) {
1015 if(pciSa[x]->rc.flRecordAttr & CRA_SELECTED)
1016 WinSendMsg(hwndCnrS,CM_SETRECORDEMPHASIS,MPFROMP(pciSa[x]),
1017 MPFROM2SHORT(FALSE,CRA_SELECTED));
1018 }
1019 else if(!(pciDa[x]->rc.flRecordAttr & CRA_FILTERED) &&
1020 *pciDa[x]->szFileName &&
1021 (pciDa[x]->flags & CNRITEM_NEWER)) {
1022 if(pciDa[x]->rc.flRecordAttr & CRA_SELECTED)
1023 WinSendMsg(hwndCnrD,CM_SETRECORDEMPHASIS,MPFROMP(pciDa[x]),
1024 MPFROM2SHORT(FALSE,CRA_SELECTED));
1025 }
1026 if(!(x % 500))
1027 DosSleep(1L);
1028 else if(!(x % 50))
1029 DosSleep(0L);
1030 }
1031 break;
1032
1033 case IDM_DESELECTOLDER:
1034 for(x = 0;x < numS;x++) {
1035 if(!(pciSa[x]->rc.flRecordAttr & CRA_FILTERED) &&
1036 *pciSa[x]->szFileName &&
1037 (pciSa[x]->flags & CNRITEM_OLDER)) {
1038 if(pciSa[x]->rc.flRecordAttr & CRA_SELECTED)
1039 WinSendMsg(hwndCnrS,CM_SETRECORDEMPHASIS,MPFROMP(pciSa[x]),
1040 MPFROM2SHORT(FALSE,CRA_SELECTED));
1041 }
1042 else if(!(pciDa[x]->rc.flRecordAttr & CRA_FILTERED) &&
1043 *pciDa[x]->szFileName &&
1044 (pciDa[x]->flags & CNRITEM_OLDER)) {
1045 if(pciDa[x]->rc.flRecordAttr & CRA_SELECTED)
1046 WinSendMsg(hwndCnrD,CM_SETRECORDEMPHASIS,MPFROMP(pciDa[x]),
1047 MPFROM2SHORT(FALSE,CRA_SELECTED));
1048 }
1049 if(!(x % 500))
1050 DosSleep(1L);
1051 else if(!(x % 50))
1052 DosSleep(0L);
1053 }
1054 break;
1055
1056 default:
1057 break;
1058 }
1059
1060 if(reset) {
1061 while(numS) {
1062 WinSendMsg(hwndCnrS,CM_INVALIDATERECORD,
1063 MPFROMP(pciSa),
1064 MPFROM2SHORT((min(numS,65535)),0));
1065 DosSleep(0L);
1066 WinSendMsg(hwndCnrD,CM_INVALIDATERECORD,
1067 MPFROMP(pciDa),
1068 MPFROM2SHORT((min(numD,65535)),0));
1069 numS -= min(numS,65535);
1070 if(numS)
1071 DosSleep(0L);
1072 }
1073 }
1074
1075 free(pciSa);
1076 free(pciDa);
1077 DosPostEventSem(CompactSem);
1078}
1079
1080
1081struct SS {
1082 PCNRITEM pci;
1083 BOOL unique,
1084 all,
1085 smallest,
1086 largest,
1087 newest,
1088 oldest;
1089};
1090
1091struct Cnr {
1092 HWND hwndCnr;
1093 ULONG numfiles;
1094 struct SS *ss;
1095};
1096
1097
1098static int CompSSNamesB (const void *s1,const void *s2) {
1099
1100 struct SS *ss2 = (struct SS *)s2;
1101
1102 return stricmp((CHAR *)s1,ss2->pci->pszFileName);
1103}
1104
1105
1106static int CompSSNames (const void *s1,const void *s2) {
1107
1108 struct SS *ss1 = (struct SS *)s1;
1109 struct SS *ss2 = (struct SS *)s2;
1110
1111 return stricmp(ss1->pci->pszFileName,ss2->pci->pszFileName);
1112}
1113
1114
1115VOID FreeCnrs (struct Cnr *Cnrs,INT numw) {
1116
1117 register INT z;
1118
1119 for(z = 0;z < numw;z++) {
1120 if(Cnrs[z].ss)
1121 free(Cnrs[z].ss);
1122 }
1123 free(Cnrs);
1124 DosPostEventSem(CompactSem);
1125}
1126
1127
1128VOID SpecialSelect2 (HWND hwndParent,INT action) {
1129
1130 PCNRITEM pci;
1131 HENUM henum;
1132 HWND hwnd;
1133 register INT numwindows = 0,w,x,z,cmp;
1134 struct Cnr *Cnrs = NULL;
1135 struct SS *bsres;
1136
1137 if(!hwndParent)
1138 return;
1139
1140 /* count directory containers, build array of hwnds */
1141 henum = WinBeginEnumWindows(hwndParent);
1142 while((hwnd = WinGetNextWindow(henum)) != NULLHANDLE) {
1143 if(WinWindowFromID(WinWindowFromID(hwnd,FID_CLIENT),DIR_CNR)) {
1144 Cnrs = realloc(Cnrs,(numwindows + 1) * sizeof(struct Cnr));
1145 if(!Cnrs) {
1146 Notify(GetPString(IDS_OUTOFMEMORY));
1147 return;
1148 }
1149 memset(&Cnrs[numwindows],0,sizeof(struct Cnr));
1150 Cnrs[numwindows].hwndCnr = WinWindowFromID(WinWindowFromID(hwnd,
1151 FID_CLIENT),DIR_CNR);
1152 numwindows++;
1153 }
1154 }
1155 WinEndEnumWindows(henum);
1156 if(numwindows < 2) {
1157 FreeCnrs(Cnrs,numwindows);
1158 DosBeep(250,100);
1159 Notify(GetPString(IDS_COMPSEL2ORMORETEXT));
1160 return;
1161 }
1162 if(numwindows > 4) {
1163 WinSendMsg(Cnrs[0].
1164 hwndCnr,
1165 UM_NOTIFY,
1166 MPFROMP(GetPString(IDS_BUILDINGLISTSTEXT)),
1167 MPVOID);
1168 DosSleep(0L);
1169 }
1170
1171 /* count records, build array of pointers to records */
1172 for(z = 0;z < numwindows;z++) {
1173 pci = (PCNRITEM)WinSendMsg(Cnrs[z].hwndCnr,
1174 CM_QUERYRECORD,
1175 MPVOID,
1176 MPFROM2SHORT(CMA_FIRST,
1177 CMA_ITEMORDER));
1178 x = 0;
1179 while(pci && (INT)pci != -1) {
1180 if(!(pci->rc.flRecordAttr & CRA_FILTERED) &&
1181 !(pci->attrFile & FILE_DIRECTORY)) {
1182 Cnrs[z].ss = realloc(Cnrs[z].ss,(x + 1) * sizeof(struct SS));
1183 if(!Cnrs[z].ss) {
1184 FreeCnrs(Cnrs,numwindows);
1185 Notify(GetPString(IDS_OUTOFMEMORY));
1186 return;
1187 }
1188 memset(&Cnrs[z].ss[x],0,sizeof(struct SS));
1189 Cnrs[z].ss[x].pci = pci;
1190 x++;
1191 }
1192 pci = (PCNRITEM)WinSendMsg(Cnrs[z].hwndCnr,
1193 CM_QUERYRECORD,
1194 MPFROMP(pci),
1195 MPFROM2SHORT(CMA_NEXT,
1196 CMA_ITEMORDER));
1197 }
1198 DosSleep(0L);
1199 Cnrs[z].numfiles = x;
1200 if(Cnrs[z].numfiles)
1201 qsort(Cnrs[z].ss,Cnrs[z].numfiles,sizeof(struct SS),CompSSNames);
1202 }
1203
1204 for(z = 0;z < numwindows;z++) {
1205 for(x = 0;x < Cnrs[z].numfiles;x++) {
1206 Cnrs[z].ss[x].all = Cnrs[z].ss[x].unique = Cnrs[z].ss[x].newest =
1207 Cnrs[z].ss[x].oldest = Cnrs[z].ss[x].smallest =
1208 Cnrs[z].ss[x].largest = TRUE;
1209 for(w = 0;w < numwindows;w++) {
1210 if(w != z && Cnrs[w].numfiles) {
1211 bsres = (struct SS *)bsearch(Cnrs[z].ss[x].pci->pszFileName,
1212 Cnrs[w].ss,Cnrs[w].numfiles,
1213 sizeof(struct SS),CompSSNamesB);
1214 if(bsres) {
1215 Cnrs[z].ss[x].unique = FALSE;
1216 if(Cnrs[z].ss[x].pci->cbFile + Cnrs[z].ss[x].pci->easize >
1217 bsres->pci->cbFile + bsres->pci->easize)
1218 Cnrs[z].ss[x].smallest = FALSE;
1219 if(Cnrs[z].ss[x].pci->cbFile + Cnrs[z].ss[x].pci->easize <
1220 bsres->pci->cbFile + bsres->pci->easize)
1221 Cnrs[z].ss[x].largest = FALSE;
1222 cmp = (Cnrs[z].ss[x].pci->date.year > bsres->pci->date.year) ? TRUE :
1223 (Cnrs[z].ss[x].pci->date.year < bsres->pci->date.year) ? FALSE :
1224 (Cnrs[z].ss[x].pci->date.month > bsres->pci->date.month) ? TRUE :
1225 (Cnrs[z].ss[x].pci->date.month < bsres->pci->date.month) ? FALSE :
1226 (Cnrs[z].ss[x].pci->date.day > bsres->pci->date.day) ? TRUE :
1227 (Cnrs[z].ss[x].pci->date.day < bsres->pci->date.day) ? FALSE :
1228 (Cnrs[z].ss[x].pci->time.hours > bsres->pci->time.hours) ? TRUE :
1229 (Cnrs[z].ss[x].pci->time.hours < bsres->pci->time.hours) ? FALSE :
1230 (Cnrs[z].ss[x].pci->time.minutes > bsres->pci->time.minutes) ? TRUE :
1231 (Cnrs[z].ss[x].pci->time.minutes < bsres->pci->time.minutes) ? FALSE :
1232 (Cnrs[z].ss[x].pci->time.seconds > bsres->pci->time.seconds) ? TRUE :
1233 (Cnrs[z].ss[x].pci->time.seconds < bsres->pci->time.seconds) ? FALSE :
1234 FALSE;
1235 if(!cmp)
1236 Cnrs[z].ss[x].newest = FALSE;
1237 cmp = (Cnrs[z].ss[x].pci->date.year < bsres->pci->date.year) ? TRUE :
1238 (Cnrs[z].ss[x].pci->date.year > bsres->pci->date.year) ? FALSE :
1239 (Cnrs[z].ss[x].pci->date.month < bsres->pci->date.month) ? TRUE :
1240 (Cnrs[z].ss[x].pci->date.month > bsres->pci->date.month) ? FALSE :
1241 (Cnrs[z].ss[x].pci->date.day < bsres->pci->date.day) ? TRUE :
1242 (Cnrs[z].ss[x].pci->date.day > bsres->pci->date.day) ? FALSE :
1243 (Cnrs[z].ss[x].pci->time.hours < bsres->pci->time.hours) ? TRUE :
1244 (Cnrs[z].ss[x].pci->time.hours > bsres->pci->time.hours) ? FALSE :
1245 (Cnrs[z].ss[x].pci->time.minutes < bsres->pci->time.minutes) ? TRUE :
1246 (Cnrs[z].ss[x].pci->time.minutes > bsres->pci->time.minutes) ? FALSE :
1247 (Cnrs[z].ss[x].pci->time.seconds < bsres->pci->time.seconds) ? TRUE :
1248 (Cnrs[z].ss[x].pci->time.seconds > bsres->pci->time.seconds) ? FALSE :
1249 FALSE;
1250 if(!cmp)
1251 Cnrs[z].ss[x].oldest = FALSE;
1252 cmp = 0;
1253 break;
1254 }
1255 else
1256 Cnrs[z].ss[x].all = FALSE;
1257 }
1258 }
1259 if(Cnrs[z].ss[x].unique)
1260 Cnrs[z].ss[x].oldest = Cnrs[z].ss[x].newest = Cnrs[z].ss[x].all =
1261 Cnrs[z].ss[x].largest = Cnrs[z].ss[x].smallest = FALSE;
1262 DosSleep(0L);
1263 }
1264 DosSleep(1L);
1265 }
1266
1267 switch(action) {
1268 case IDM_SELECTBOTH:
1269 for(z = 0;z < numwindows;z++) {
1270 for(x = 0;x < Cnrs[z].numfiles;x++) {
1271 if(Cnrs[z].ss[x].all)
1272 WinSendMsg(Cnrs[z].hwndCnr,CM_SETRECORDEMPHASIS,
1273 MPFROMP(Cnrs[z].ss[x].pci),
1274 MPFROM2SHORT(TRUE,CRA_SELECTED));
1275 }
1276 DosSleep(0L);
1277 }
1278 break;
1279 case IDM_SELECTMORE:
1280 for(z = 0;z < numwindows;z++) {
1281 for(x = 0;x < Cnrs[z].numfiles;x++) {
1282 if(!Cnrs[z].ss[x].unique)
1283 WinSendMsg(Cnrs[z].hwndCnr,CM_SETRECORDEMPHASIS,
1284 MPFROMP(Cnrs[z].ss[x].pci),
1285 MPFROM2SHORT(TRUE,CRA_SELECTED));
1286 }
1287 DosSleep(0L);
1288 }
1289 break;
1290 case IDM_SELECTONE:
1291 for(z = 0;z < numwindows;z++) {
1292 for(x = 0;x < Cnrs[z].numfiles;x++) {
1293 if(Cnrs[z].ss[x].unique)
1294 WinSendMsg(Cnrs[z].hwndCnr,CM_SETRECORDEMPHASIS,
1295 MPFROMP(Cnrs[z].ss[x].pci),
1296 MPFROM2SHORT(TRUE,CRA_SELECTED));
1297 }
1298 DosSleep(0L);
1299 }
1300 break;
1301 case IDM_SELECTNEWER:
1302 for(z = 0;z < numwindows;z++) {
1303 for(x = 0;x < Cnrs[z].numfiles;x++) {
1304 if(Cnrs[z].ss[x].newest)
1305 WinSendMsg(Cnrs[z].hwndCnr,CM_SETRECORDEMPHASIS,
1306 MPFROMP(Cnrs[z].ss[x].pci),
1307 MPFROM2SHORT(TRUE,CRA_SELECTED));
1308 }
1309 DosSleep(0L);
1310 }
1311 break;
1312 case IDM_SELECTOLDER:
1313 for(z = 0;z < numwindows;z++) {
1314 for(x = 0;x < Cnrs[z].numfiles;x++) {
1315 if(Cnrs[z].ss[x].oldest)
1316 WinSendMsg(Cnrs[z].hwndCnr,CM_SETRECORDEMPHASIS,
1317 MPFROMP(Cnrs[z].ss[x].pci),
1318 MPFROM2SHORT(TRUE,CRA_SELECTED));
1319 }
1320 DosSleep(0L);
1321 }
1322 break;
1323 case IDM_SELECTBIGGER:
1324 for(z = 0;z < numwindows;z++) {
1325 for(x = 0;x < Cnrs[z].numfiles;x++) {
1326 if(Cnrs[z].ss[x].largest)
1327 WinSendMsg(Cnrs[z].hwndCnr,CM_SETRECORDEMPHASIS,
1328 MPFROMP(Cnrs[z].ss[x].pci),
1329 MPFROM2SHORT(TRUE,CRA_SELECTED));
1330 }
1331 DosSleep(0L);
1332 }
1333 break;
1334 case IDM_SELECTSMALLER:
1335 for(z = 0;z < numwindows;z++) {
1336 for(x = 0;x < Cnrs[z].numfiles;x++) {
1337 if(Cnrs[z].ss[x].smallest)
1338 WinSendMsg(Cnrs[z].hwndCnr,CM_SETRECORDEMPHASIS,
1339 MPFROMP(Cnrs[z].ss[x].pci),
1340 MPFROM2SHORT(TRUE,CRA_SELECTED));
1341 }
1342 DosSleep(0L);
1343 }
1344 break;
1345
1346 case IDM_DESELECTBOTH:
1347 for(z = 0;z < numwindows;z++) {
1348 for(x = 0;x < Cnrs[z].numfiles;x++) {
1349 if(Cnrs[z].ss[x].all)
1350 WinSendMsg(Cnrs[z].hwndCnr,CM_SETRECORDEMPHASIS,
1351 MPFROMP(Cnrs[z].ss[x].pci),
1352 MPFROM2SHORT(FALSE,CRA_SELECTED));
1353 }
1354 DosSleep(0L);
1355 }
1356 break;
1357 case IDM_DESELECTMORE:
1358 for(z = 0;z < numwindows;z++) {
1359 for(x = 0;x < Cnrs[z].numfiles;x++) {
1360 if(!Cnrs[z].ss[x].unique)
1361 WinSendMsg(Cnrs[z].hwndCnr,CM_SETRECORDEMPHASIS,
1362 MPFROMP(Cnrs[z].ss[x].pci),
1363 MPFROM2SHORT(FALSE,CRA_SELECTED));
1364 }
1365 DosSleep(0L);
1366 }
1367 break;
1368 case IDM_DESELECTONE:
1369 for(z = 0;z < numwindows;z++) {
1370 for(x = 0;x < Cnrs[z].numfiles;x++) {
1371 if(Cnrs[z].ss[x].unique)
1372 WinSendMsg(Cnrs[z].hwndCnr,CM_SETRECORDEMPHASIS,
1373 MPFROMP(Cnrs[z].ss[x].pci),
1374 MPFROM2SHORT(FALSE,CRA_SELECTED));
1375 }
1376 DosSleep(0L);
1377 }
1378 break;
1379 case IDM_DESELECTNEWER:
1380 for(z = 0;z < numwindows;z++) {
1381 for(x = 0;x < Cnrs[z].numfiles;x++) {
1382 if(Cnrs[z].ss[x].newest)
1383 WinSendMsg(Cnrs[z].hwndCnr,CM_SETRECORDEMPHASIS,
1384 MPFROMP(Cnrs[z].ss[x].pci),
1385 MPFROM2SHORT(FALSE,CRA_SELECTED));
1386 }
1387 DosSleep(0L);
1388 }
1389 break;
1390 case IDM_DESELECTOLDER:
1391 for(z = 0;z < numwindows;z++) {
1392 for(x = 0;x < Cnrs[z].numfiles;x++) {
1393 if(Cnrs[z].ss[x].oldest)
1394 WinSendMsg(Cnrs[z].hwndCnr,CM_SETRECORDEMPHASIS,
1395 MPFROMP(Cnrs[z].ss[x].pci),
1396 MPFROM2SHORT(FALSE,CRA_SELECTED));
1397 }
1398 DosSleep(0L);
1399 }
1400 break;
1401 case IDM_DESELECTBIGGER:
1402 for(z = 0;z < numwindows;z++) {
1403 for(x = 0;x < Cnrs[z].numfiles;x++) {
1404 if(Cnrs[z].ss[x].largest)
1405 WinSendMsg(Cnrs[z].hwndCnr,CM_SETRECORDEMPHASIS,
1406 MPFROMP(Cnrs[z].ss[x].pci),
1407 MPFROM2SHORT(FALSE,CRA_SELECTED));
1408 }
1409 DosSleep(0L);
1410 }
1411 break;
1412 case IDM_DESELECTSMALLER:
1413 for(z = 0;z < numwindows;z++) {
1414 for(x = 0;x < Cnrs[z].numfiles;x++) {
1415 if(Cnrs[z].ss[x].smallest)
1416 WinSendMsg(Cnrs[z].hwndCnr,CM_SETRECORDEMPHASIS,
1417 MPFROMP(Cnrs[z].ss[x].pci),
1418 MPFROM2SHORT(FALSE,CRA_SELECTED));
1419 }
1420 DosSleep(0L);
1421 }
1422 break;
1423 }
1424
1425 FreeCnrs(Cnrs,numwindows);
1426}
Note: See TracBrowser for help on using the repository browser.