Changeset 317 for trunk/dll/select.c


Ignore:
Timestamp:
Jul 13, 2006, 6:19:04 AM (19 years ago)
Author:
root
Message:

Support compare content (IDM_SELECTSAMECONTENT)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/select.c

    r204 r317  
    55
    66  Copyright (c) 1993-98 M. Kimes
    7   Copyright (c) 2004, 2005 Steven H. Levine
     7  Copyright (c) 2004, 2006 Steven H. Levine
    88
    99  01 Aug 04 SHL Rework lstrip/rstrip usage
    1010  25 May 05 SHL Rework for ULONGLONG
    1111  06 Jun 05 SHL Drop unused code
     12  06 Jul 06 SHL Support compare content (IDM_SELECTSAMECONTENT)
    1213
    1314***********************************************************************/
     
    2223#include <string.h>
    2324#include <share.h>
     25#include <io.h>
    2426
    2527#include "fm3dll.h"
     
    3032#pragma alloc_text(SELECT1,Deselect,HideAll,RemoveAll,ExpandAll,InvertAll)
    3133
    32 
    33 VOID UnHilite (HWND hwndCnr,BOOL all,CHAR ***list) {
    34 
     34VOID UnHilite (HWND hwndCnr,BOOL all,CHAR ***list)
     35{
    3536  PCNRITEM pci;
    3637  INT      numfiles = 0,numalloc = 0;
     
    6162  }
    6263}
    63 
    6464
    6565VOID SelectList (HWND hwndCnr,BOOL partial,BOOL deselect,BOOL clearfirst,
     
    151151  }
    152152}
    153 
    154153
    155154VOID SelectAll (HWND hwndCnr,BOOL files,BOOL dirs,CHAR *mask,
     
    251250    pci = (PCNRITEM)WinSendMsg(hwndCnr,CM_QUERYRECORD,MPFROMP(pci),
    252251                               MPFROM2SHORT(CMA_NEXT,CMA_ITEMORDER));
    253   }
    254 }
    255 
     252  } // while
     253}
    256254
    257255VOID DeselectAll (HWND hwndCnr,BOOL files,BOOL dirs,CHAR *mask,CHAR *text,
     
    357355}
    358356
    359 
    360 VOID Deselect (HWND hwndCnr) {
    361 
     357VOID Deselect (HWND hwndCnr)
     358{
    362359  PCNRITEM pcil;
    363360
     
    373370}
    374371
    375 
    376 VOID HideAll (HWND hwndCnr) {
    377 
     372//=== HideAll() Hide all selected records ===
     373
     374VOID HideAll (HWND hwndCnr)
     375{
    378376  PCNRITEM pci,pciH;
    379377  INT      attribute = CRA_CURSORED;
     
    416414}
    417415
    418 
    419 VOID MarkAll (HWND hwndCnr,BOOL quitit,BOOL target,BOOL source) {
    420 
     416VOID MarkAll (HWND hwndCnr,BOOL quitit,BOOL target,BOOL source)
     417{
    421418  PCNRITEM pci;
    422419  INT      attribute = CRA_CURSORED;
     
    445442}
    446443
    447 
    448 VOID RemoveAll (HWND hwndCnr,ULONGLONG *pullTotalBytes,ULONG *pulTotalFiles) {
    449 
     444VOID RemoveAll (HWND hwndCnr,ULONGLONG *pullTotalBytes,ULONG *pulTotalFiles)
     445{
    450446  PCNRITEM pci;
    451447  INT      attribute = CRA_CURSORED;
     
    490486}
    491487
    492 
    493 VOID SetMask (CHAR *str,MASK *mask) {
    494 
     488VOID SetMask (CHAR *str,MASK *mask)
     489{
    495490  register INT   x;
    496491  register CHAR *p;
     
    517512}
    518513
    519 
    520 VOID ExpandAll (HWND hwndCnr,BOOL expand,PCNRITEM pciParent) {
    521 
     514VOID ExpandAll (HWND hwndCnr,BOOL expand,PCNRITEM pciParent)
     515{
    522516  PCNRITEM pci;
    523517
     
    543537}
    544538
    545 
    546 VOID InvertAll (HWND hwndCnr) {
    547 
     539VOID InvertAll (HWND hwndCnr)
     540{
    548541  PCNRITEM pci;
    549542
     
    564557}
    565558
    566 
    567559#pragma alloc_text (SELECT3,SpecialSelect)
    568560#pragma alloc_text(SELECT4,FreeCnrs,SpecialSelect2,CompSSNames,CompSSNamesB)
    569561
    570 
    571 VOID SpecialSelect (HWND hwndCnrS,HWND hwndCnrD,INT action,BOOL reset) {
    572 
     562VOID SpecialSelect (HWND hwndCnrS,HWND hwndCnrD,INT action,BOOL reset)
     563{
    573564  PCNRITEM       pciS,pciD,*pciSa = NULL,*pciDa = NULL;
    574565  CNRINFO        cnri;
     
    788779      break;
    789780
     781    case IDM_SELECTSAMECONTENT:
     782      // fixme
     783      for (x = 0;x < numS;x++) {
     784        if (~pciSa[x]->rc.flRecordAttr & CRA_FILTERED &&
     785            *pciSa[x]->szFileName &&
     786            *pciDa[x]->szFileName &&
     787            pciSa[x]->flags & CNRITEM_EXISTS &&
     788            pciDa[x]->flags & CNRITEM_EXISTS) {
     789
     790          FILE *fp1 = NULL;
     791          FILE *fp2 = NULL;
     792          BOOL gotMatch = FALSE;
     793          BOOL gotError = FALSE;
     794          CHAR buf1[1024];
     795          CHAR buf2[1024];
     796          HAB hab = WinQueryAnchorBlock(hwndCnrS);
     797
     798          fp1 = _fsopen(pciSa[x]->szFileName,"rb",SH_DENYNO);
     799          if(!fp1) {
     800            gotError = TRUE;
     801          }
     802          else {
     803            fp2 = _fsopen(pciDa[x]->szFileName,"rb",SH_DENYNO);
     804            if(!fp2) {
     805              gotError = TRUE;
     806            }
     807            else {
     808              size_t len1 = filelength(fileno(fp1));
     809              size_t len2 = filelength(fileno(fp2));
     810              if (len1 == len2) {
     811                setbuf(fp1, NULL);
     812                setbuf(fp2, NULL);
     813                while (WinIsWindow(hab,hwndCnrS)) {
     814                  size_t numread1 = fread(buf1,1,1024,fp1);
     815                  size_t numread2 = fread(buf2,1,1024,fp2);
     816                  if (!numread1 || !numread2 || numread1 != numread2) {
     817                    if (ferror(fp1) || ferror(fp2))
     818                      gotError = TRUE;
     819                    else if (feof(fp1) && feof(fp2))
     820                      gotMatch = TRUE;
     821                    break;
     822                  }
     823                  else if (memcmp(buf1,buf2,numread1))
     824                    break;
     825                } // while
     826              } // same len
     827            }
     828          }
     829
     830          if (fp1)
     831            fclose(fp1);
     832
     833          if (fp2)
     834            fclose(fp2);
     835
     836          if (gotError) {
     837            // fixme
     838            DosBeep(250,100);
     839            saymsg(MB_CANCEL,HWND_DESKTOP,
     840                   "Compare Content",
     841                   "Unexpected error comparing..."
     842                  );
     843          }
     844          if (gotMatch) {
     845            if (!(pciSa[x]->rc.flRecordAttr & CRA_SELECTED))
     846              WinSendMsg(hwndCnrS,CM_SETRECORDEMPHASIS,MPFROMP(pciSa[x]),
     847                         MPFROM2SHORT(TRUE,CRA_SELECTED));
     848            if (!(pciDa[x]->rc.flRecordAttr & CRA_SELECTED))
     849              WinSendMsg(hwndCnrD,CM_SETRECORDEMPHASIS,MPFROMP(pciDa[x]),
     850                         MPFROM2SHORT(TRUE,CRA_SELECTED));
     851          }
     852        }
     853        if (!(x % 500))
     854          DosSleep(1L);
     855        else if (!(x % 50))
     856          DosSleep(0L);
     857      } // for records
     858      break;
     859
    790860    case IDM_SELECTBOTH:
    791861      for(x = 0;x < numS;x++) {
     
    10781148}
    10791149
    1080 
    10811150struct SS {
    10821151  PCNRITEM  pci;
     
    10951164};
    10961165
    1097 
    1098 static int CompSSNamesB (const void *s1,const void *s2) {
    1099 
     1166static int CompSSNamesB (const void *s1,const void *s2)
     1167{
    11001168  struct SS *ss2 = (struct SS *)s2;
    11011169
     
    11031171}
    11041172
    1105 
    1106 static int CompSSNames (const void *s1,const void *s2) {
    1107 
     1173static int CompSSNames (const void *s1,const void *s2)
     1174{
    11081175  struct SS *ss1 = (struct SS *)s1;
    11091176  struct SS *ss2 = (struct SS *)s2;
     
    11121179}
    11131180
    1114 
    1115 VOID FreeCnrs (struct Cnr *Cnrs,INT numw) {
    1116 
     1181VOID FreeCnrs (struct Cnr *Cnrs,INT numw)
     1182{
    11171183  register INT z;
    11181184
     
    11251191}
    11261192
    1127 
    1128 VOID SpecialSelect2 (HWND hwndParent,INT action) {
    1129 
     1193VOID SpecialSelect2 (HWND hwndParent,INT action)
     1194{
    11301195  PCNRITEM     pci;
    11311196  HENUM        henum;
Note: See TracChangeset for help on using the changeset viewer.