Changeset 751


Ignore:
Timestamp:
Aug 2, 2007, 11:05:48 PM (13 years ago)
Author:
Steven Levine
Message:

Sync rest of code with CNRITEM mods
Sync code with ARCITEM mods
Get compare dialog working
Still some issues with status display
Still some issues with directory sizes tree display
Heap check diagnostic code mostly enabled

Location:
trunk/dll
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/arccnrs.c

    r740 r751  
    4040  10 Jun 07 GKY Add CheckPmDrgLimit including IsFm2Window as part of work around PM drag limit
    4141  16 Jun 07 SHL Use DosQueryAppType not DosQAppType
     42  02 Aug 07 SHL Sync with ARCITEM mods
    4243
    4344***********************************************************************/
     
    6061#include <limits.h>
    6162#include <process.h>                    // _beginthread
     63#include <malloc.h>                     // _heapchk
    6264
    6365#include "fm3dll.h"
     
    307309}
    308310
     311/**
     312 * Free storage associated with archive container item
     313 * Caller is responsible for correcting pointers
     314 */
     315
     316static VOID FreeArcItemData(PARCITEM pai)
     317{
     318  // DbgMsg(pszSrcFile, __LINE__, "FreeArcItemData %p", pai);
     319
     320  if (pai->pszFileName && pai->pszFileName != NullStr)
     321    xfree(pai->pszFileName);
     322}
     323
     324/**
     325 * Remove item from archive container and free associated storage if requested
     326 */
     327
     328static VOID RemoveArcItems(HWND hwnd, PARCITEM pai, USHORT usCnt, USHORT usFlags)
     329{
     330  if (usCnt == 0) {
     331    if (pai != NULL)
     332      Runtime_Error(pszSrcFile, __LINE__, "pai not NULL");
     333    else {
     334      for (;;) {
     335        pai = (PARCITEM)WinSendMsg(hwnd, CM_QUERYRECORD, MPVOID,
     336                                   MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER));
     337        if (!pai)
     338          break;
     339        else if ((INT)pai == -1) {
     340          Win_Error(hwnd, HWND_DESKTOP, pszSrcFile, __LINE__,"CM_QUERYRECORD");
     341          break;
     342        }
     343        else
     344          RemoveArcItems(hwnd, pai, 1, usFlags);
     345      }
     346    }
     347  }
     348  else if (usCnt != 1)
     349    Runtime_Error(pszSrcFile, __LINE__, "count not 1");
     350  else {
     351    // DbgMsg(pszSrcFile, __LINE__, "RemoveArcItems %p %u %s", pai, usCnt, pai->pszFileName);
     352
     353    if (usFlags & CMA_FREE)
     354      FreeArcItemData(pai);
     355
     356    if ((INT)WinSendMsg(hwnd, CM_REMOVERECORD, MPFROMP(&pai), MPFROM2SHORT(usCnt, usFlags)) == -1) {
     357      // Win_Error2(hwnd, HWND_DESKTOP, pszSrcFile, __LINE__,IDS_CMREMOVEERRTEXT);
     358      Win_Error(hwnd, HWND_DESKTOP, pszSrcFile, __LINE__,"CM_REMOVERECORD hwnd %x pai %p", hwnd, pai);
     359    }
     360  }
     361}
     362
     363/**
     364 * Empty all records from an archive container and free associated storage and
     365 * Free up field infos
     366 */
     367
     368static VOID EmptyArcCnr(HWND hwnd)
     369{
     370#if 1 // fixme to disable or to be configurable
     371  {
     372    int state = _heapchk();
     373    if (state != _HEAPOK)
     374      Runtime_Error(pszSrcFile, __LINE__, "heap corrupted %d", state);
     375  }
     376#endif
     377
     378  // Remove all ARCITEM records
     379  RemoveArcItems(hwnd, NULL, 0, CMA_FREE);
     380
     381  // Use common code to remove rest
     382  EmptyCnr(hwnd);
     383}
     384
    309385//== FillArcCnr() generate archive content list and fill container window ==
    310386
     
    359435    Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
    360436  else {
    361     WinSendMsg(hwndCnr,
    362                CM_REMOVERECORD,
    363                MPVOID,
    364                MPFROM2SHORT(0, CMA_FREE | CMA_INVALIDATE | CMA_ERASE));
     437    RemoveArcItems(hwndCnr, NULL, 0, CMA_FREE | CMA_INVALIDATE | CMA_ERASE);
    365438    *arcinfo = info;
    366439    highest = info->osizepos;
     
    32153288      WinDestroyWindow(ArcCnrMenu);
    32163289    ArcMenu = ArcCnrMenu = (HWND) 0;
    3217     EmptyCnr(hwnd);
     3290    EmptyArcCnr(hwnd);
    32183291    break;
    32193292  }
  • trunk/dll/collect.c

    r750 r751  
    3737  10 Jun 07 GKY Add CheckPmDrgLimit including IsFm2Window as part of work around PM drag limit
    3838  05 Jul 07 SHL CollectorCnrWndProc: just warn if busy
    39   02 Aug 07 SHL Minor clean up
     39  02 Aug 07 SHL Sync with CNRITEM mods
    4040
    4141***********************************************************************/
     
    609609              else
    610610                pciFirst = pci;
    611               WinSendMsg(hwnd, CM_FREERECORD, MPFROMP(&pciT), MPFROMSHORT(1));
     611              FreeCnrItem(hwnd, pciT);
    612612              ulMaxFiles--;
    613613            }
     
    16581658                                      MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER));
    16591659          if (pci && (INT) pci != -1) {
    1660             WinSendMsg(hwnd,
    1661                        CM_REMOVERECORD,
    1662                        MPVOID, MPFROM2SHORT(0, CMA_FREE | CMA_INVALIDATE));
     1660            RemoveCnrItems(hwnd, NULL, 0, CMA_FREE | CMA_INVALIDATE);
    16631661            dcd->ullTotalBytes = dcd->selectedbytes = dcd->selectedfiles =
    16641662              dcd->totalfiles = 0;
     
    25612559            }
    25622560            else
    2563               WinSendMsg(hwnd,
    2564                          CM_REMOVERECORD,
    2565                          MPFROMP(&pci),
    2566                          MPFROM2SHORT(1,
    2567                                       CMA_FREE | CMA_INVALIDATE | CMA_ERASE));
     2561              RemoveCnrItems(hwnd, pci, 1, CMA_FREE | CMA_INVALIDATE | CMA_ERASE);
    25682562          }
    25692563        }
  • trunk/dll/common.c

    r593 r751  
    77
    88  Copyright (c) 1993, 1998 M. Kimes
    9   Copyright (c) 2001, 2006 Steven H. Levine
     9  Copyright (c) 2001, 2007 Steven H. Levine
    1010
    1111  13 Aug 05 SHL Renames
     
    1717  22 Mar 07 GKY Use QWL_USER
    1818  30 Mar 07 GKY Remove GetPString for window class names
     19  02 Aug 07 SHL Sync with CNRITEM mods
    1920
    2021***********************************************************************/
     
    742743      else if (mp2) {
    743744        if ((INT) mp1 == -1) {
    744 
    745745          PCNRITEM pci = (PCNRITEM) mp2;
    746 
    747           WinSendMsg(hwnd,
    748                      CM_REMOVERECORD,
    749                      MPFROMP(&pci),
    750                      MPFROM2SHORT(1, CMA_FREE | CMA_INVALIDATE));
     746          RemoveCnrItems(hwnd, pci, 1, CMA_FREE | CMA_INVALIDATE);
    751747        }
    752748        else {
  • trunk/dll/comp.c

    r748 r751  
    431431
    432432              if (!*pciD->pszFileName) {
    433                 // Other side is blank
    434                 WinSendMsg(hwndCnrS, CM_REMOVERECORD, MPFROMP(&pci),
    435                            MPFROM2SHORT(1, CMA_FREE | CMA_INVALIDATE));
     433                // Other side is blank - remove from both sides
     434                RemoveCnrItems(hwndCnrS, pci, 1, CMA_FREE | CMA_INVALIDATE);
    436435                if (pciD->rc.flRecordAttr & CRA_SELECTED)
    437436                  WinSendMsg(hwndCnrD, CM_SETRECORDEMPHASIS, MPFROMP(pciD),
    438437                             MPFROM2SHORT(FALSE, CRA_SELECTED));
    439                 WinSendMsg(hwndCnrD, CM_REMOVERECORD, MPFROMP(&pciD),
    440                            MPFROM2SHORT(1, CMA_FREE | CMA_INVALIDATE));
     438                RemoveCnrItems(hwndCnrD, pciD, 1, CMA_FREE | CMA_INVALIDATE);
    441439              }
    442440              else {
    443                 // Other side is not blank
     441                // Other side is not blank - update just this side
    444442                FreeCnrItemData(pci);
     443                pci->pszFileName = NullStr;
     444                pci->pszDisplayName = pci->pszFileName;
     445                pci->rc.pszIcon = pci->pszFileName;
     446                pci->pszLongname = NullStr;
     447                pci->pszSubject = NullStr;
    445448                pci->flags = 0;
    446449                WinSendMsg(hwndCnrS, CM_INVALIDATERECORD, MPFROMP(&pci),
     
    457460          case IDM_MOVE:
    458461            if (hwndCnrS == WinWindowFromID(cmp->hwnd, COMP_RIGHTDIR))
    459               sprintf(newname, "%s%s%s", cmp->leftdir,
    460                       cmp->leftdir[strlen(cmp->leftdir) - 1] ==
    461                       '\\' ? NullStr : "\\", pci->pszFileName);
     462              // 02 Aug 07 SHL fixme to replace this kind of stuff with _makepath or equivalent
     463              sprintf(newname, "%s%s%s",
     464                      cmp->leftdir,
     465                      cmp->leftdir[strlen(cmp->leftdir) - 1] == '\\' ?
     466                        NullStr : "\\",
     467                        pci->pszDisplayName);
    462468            else
    463               sprintf(newname, "%s%s%s", cmp->rightdir,
    464                       cmp->rightdir[strlen(cmp->rightdir) - 1] ==
    465                       '\\' ? NullStr : "\\", pci->pszFileName);
     469              sprintf(newname, "%s%s%s",
     470                      cmp->rightdir,
     471                      cmp->rightdir[strlen(cmp->rightdir) - 1] == '\\' ?
     472                        NullStr : "\\",
     473                      pci->pszDisplayName);
    466474            // Make directory if required
    467475            strcpy(dirname, newname);
     
    486494                pciD->pszDisplayName = pciD->pszFileName + strlen(cmp->leftdir);
    487495                if (cmp->leftdir[strlen(cmp->leftdir) - 1] != '\\')
    488                   pciD->pszFileName++;
     496                  pciD->pszDisplayName++;
    489497              }
    490498              else {
    491499                pciD->pszDisplayName = pciD->pszFileName + strlen(cmp->rightdir);
    492500                if (cmp->rightdir[strlen(cmp->rightdir) - 1] != '\\')
    493                   pciD->pszFileName++;
    494               }
    495               strcpy(pciD->szDispAttr, pci->szDispAttr);
     501                  pciD->pszDisplayName++;
     502              }
     503              // 02 Aug 07 SHL fixme to know Longname transfer is correct?
     504              pciD->pszLongname = pci->pszLongname;
     505              if (pciD->pszSubject != NullStr) {
     506                xfree(pciD->pszSubject);
     507                pciD->pszSubject = NullStr;
     508              }
    496509              pciD->attrFile = pci->attrFile;
     510              pciD->pszDispAttr = pci->pszDispAttr;
    497511              pciD->flags = 0;
    498512              pciD->date = pci->date;
     
    504518              pciD->cbFile = pci->cbFile;
    505519              pciD->easize = pci->easize;
    506               pciD->pszSubject = NullStr;
    507               pci->pszFileName = NullStr;
     520
     521              if (pci->pszFileName != NullStr) {
     522                xfree(pci->pszFileName);
     523                pci->pszFileName = NullStr;
     524                pci->pszDisplayName = pci->pszFileName;
     525                pci->rc.pszIcon = pci->pszFileName;
     526              }
     527              if (pci->pszSubject != NullStr) {
     528                xfree(pci->pszSubject);
     529                pci->pszSubject = NullStr;
     530              }
    508531              pci->flags = 0;
     532
    509533              WinSendMsg(hwndCnrS, CM_INVALIDATERECORD, MPFROMP(&pci),
    510534                         MPFROM2SHORT(1, CMA_ERASE | CMA_TEXTCHANGED));
     
    527551          case IDM_COPY:
    528552            if (hwndCnrS == WinWindowFromID(cmp->hwnd, COMP_RIGHTDIR))
    529               sprintf(newname, "%s%s%s", cmp->leftdir,
    530                       cmp->leftdir[strlen(cmp->leftdir) - 1] ==
    531                       '\\' ? NullStr : "\\", pci->pszFileName);
     553              sprintf(newname, "%s%s%s",
     554                      cmp->leftdir,
     555                      cmp->leftdir[strlen(cmp->leftdir) - 1] == '\\' ?
     556                        NullStr : "\\",
     557                      pci->pszDisplayName);
    532558            else
    533               sprintf(newname, "%s%s%s", cmp->rightdir,
    534                       cmp->rightdir[strlen(cmp->rightdir) - 1] ==
    535                       '\\' ? NullStr : "\\", pci->pszFileName);
     559              sprintf(newname, "%s%s%s",
     560                      cmp->rightdir,
     561                      cmp->rightdir[strlen(cmp->rightdir) - 1] == '\\' ?
     562                        NullStr : "\\",
     563                      pci->pszDisplayName);
    536564            // Make directory if required
    537565            strcpy(dirname, newname);
     
    564592              FreeCnrItemData(pciD);
    565593              pciD->pszFileName = xstrdup(newname, pszSrcFile, __LINE__);
     594              pciD->pszLongname = NullStr;
     595              pciD->pszSubject = NullStr;
    566596              if (hwndCnrS == WinWindowFromID(cmp->hwnd, COMP_RIGHTDIR)) {
    567597                pciD->pszDisplayName = pciD->pszFileName + strlen(cmp->leftdir);
    568598                if (cmp->leftdir[strlen(cmp->leftdir) - 1] != '\\')
    569                   pciD->pszFileName++;
     599                  pciD->pszDisplayName++;
    570600              }
    571601              else {
    572602                pciD->pszDisplayName = pciD->pszFileName + strlen(cmp->rightdir);
    573603                if (cmp->rightdir[strlen(cmp->rightdir) - 1] != '\\')
    574                   pciD->pszFileName++;
    575               }
    576               strcpy(pciD->szDispAttr, pci->szDispAttr);
     604                  pciD->pszDisplayName++;
     605              }
    577606              pciD->attrFile = pci->attrFile;
     607              pciD->pszDispAttr = pci->pszDispAttr;
    578608              pciD->flags = CNRITEM_EXISTS;
    579609              pciD->date = pci->date;
     
    585615              pciD->cbFile = pci->cbFile;
    586616              pciD->easize = pci->easize;
    587               pci->pszSubject = NullStr;
    588               pci->pszLongname = NullStr;
     617
     618              // 02 Aug 07 SHL fixme to know why subject cleared?
     619              if (pci->pszSubject != NullStr) {
     620                xfree(pci->pszSubject);
     621                pci->pszSubject = NullStr;
     622              }
     623              // 02 Aug 07 SHL fixme to know why - should already be set?
    589624              pci->flags = CNRITEM_EXISTS;
     625
    590626              WinSendMsg(hwndCnrS, CM_INVALIDATERECORD, MPFROMP(&pci),
    591627                         MPFROM2SHORT(1, CMA_ERASE | CMA_TEXTCHANGED));
     
    771807//=== FillCnrsThread() Fill left and right containers ===
    772808
    773 static VOID FillCnrsThread(VOID * args)
     809static VOID FillCnrsThread(VOID *args)
    774810{
    775811  COMPARE *cmp = (COMPARE *) args;
     
    777813  HMQ hmq;
    778814  BOOL notified = FALSE;
    779   const PSZ attrstring = "RHS\0DA";
     815
    780816  HWND hwndLeft, hwndRight;
    781817  CHAR szBuf[CCHMAXPATH];
     
    801837      INT l;
    802838      INT r;
    803       INT y;
    804       UINT i;
    805839      ULONG cntr;
    806840      FILELIST **filesl = NULL;
     
    817851      PCNRITEM pcil;
    818852      PCNRITEM pcir;
    819       PCNRITEM pcit;
    820853      RECORDINSERT ri;
    821854      CHAR *pch;
     
    833866      priority_normal();
    834867      // Clear containers
    835       WinSendMsg(hwndRight, CM_REMOVERECORD,
    836                  MPVOID, MPFROM2SHORT(0, CMA_FREE | CMA_INVALIDATE));
    837       WinSendMsg(hwndLeft, CM_REMOVERECORD,
    838                  MPVOID, MPFROM2SHORT(0, CMA_FREE | CMA_INVALIDATE));
     868      RemoveCnrItems(hwndRight, NULL, 0, CMA_FREE | CMA_INVALIDATE);
     869      RemoveCnrItems(hwndLeft, NULL, 0, CMA_FREE | CMA_INVALIDATE);
    839870      cmp->cmp->totalleft = cmp->cmp->totalright = 0;
    840871
     
    10261057        pcilFirst = WinSendMsg(hwndLeft,
    10271058                               CM_ALLOCRECORD,
    1028                                MPFROMLONG(EXTRA_RECORD_BYTES2),
     1059                               MPFROMLONG(EXTRA_RECORD_BYTES),
    10291060                               MPFROMLONG(recsNeeded));
    10301061        if (!pcilFirst) {
     
    10361067      if (recsNeeded) {
    10371068        pcirFirst = WinSendMsg(hwndRight, CM_ALLOCRECORD,
    1038                                MPFROMLONG(EXTRA_RECORD_BYTES2),
     1069                               MPFROMLONG(EXTRA_RECORD_BYTES),
    10391070                               MPFROMLONG(recsNeeded));
    10401071        if (!pcirFirst) {
     
    10421073                    recsNeeded);
    10431074          recsNeeded = 0;
    1044           pcil = pcilFirst;
    1045           while (pcil) {
    1046             pcit = (PCNRITEM) pcil->rc.preccNextRecord;
    1047             WinSendMsg(hwndLeft, CM_FREERECORD,
    1048                        MPFROMP(&pcil), MPFROMSHORT(1));
    1049             pcil = pcit;
    1050           }
     1075          FreeCnrItemList(hwndLeft, pcilFirst);
    10511076        }
    10521077      }
     
    10591084          pcir->hwndCnr = hwndRight;
    10601085          pcir->rc.hptrIcon = (HPOINTER) 0;
    1061           pcir->pszDispAttr = pcir->szDispAttr;
    1062 
    10631086          pcil->hwndCnr = hwndLeft;
    10641087          pcil->rc.hptrIcon = (HPOINTER) 0;
    1065           pcil->pszDispAttr = pcil->szDispAttr;
    10661088
    10671089          if (filesl && filesl[l]) {
     
    10821104            pcil->pszDisplayName = pcil->pszFileName + lenl;
    10831105            pcil->attrFile = filesl[l]->attrFile;
    1084             y = 0;
    1085             for (i = 0; i < 6; i++) {
    1086               if (attrstring[i]) {
    1087                 pcil->szDispAttr[y++] = (CHAR)(pcil->attrFile & (1 << i) ?
    1088                                            attrstring[i] : '-');
    1089               }
    1090             }
    1091             pcil->szDispAttr[5] = 0;
     1106            pcil->pszDispAttr = FileAttrToString(pcil->attrFile);
    10921107            pcil->cbFile = filesl[l]->cbFile;
    10931108            pcil->easize = filesl[l]->easize;
     
    11281143            pcir->attrFile = filesr[r]->attrFile;
    11291144            // pcir->rc.hptrIcon = hptrFile;
    1130             y = 0;
    1131             for (i = 0; i < 6; i++) {
    1132               if (attrstring[i]) {
    1133                 pcir->szDispAttr[y++] = (CHAR)(pcir->attrFile & (1 << i) ?
    1134                                           attrstring[i] : '-');
    1135               }
    1136             }
    1137             pcir->szDispAttr[5] = 0;
     1145            pcir->pszDispAttr = FileAttrToString(pcir->attrFile);
    11381146            pcir->cbFile = filesr[r]->cbFile;
    11391147            pcir->easize = filesr[r]->easize;
     
    12271235              pch += 5;
    12281236            }
    1229             *pch = 0;           // fixme to be gone?
    1230             // fixme to known why not displayed - defect?
    1231             pcil->pszSubject = *szBuf ? strdup(szBuf) : NullStr;
     1237            // fixme to know why not displayed - defect?
     1238            pcil->pszSubject = *szBuf ?
     1239                                 xstrdup(szBuf, pszSrcFile, __LINE__) :
     1240                                 NullStr;
    12321241
    12331242          } // if on both sides
     
    15961605          }
    15971606
    1598           pcil->rc.pszIcon = pcil->pszFileName;         // fixme to be pszDisplayName?
    1599           pcir->rc.pszIcon = pcir->pszFileName;
    1600           pcil->pszLongname = pcil->pszFileName;
    1601           pcir->pszLongname = pcir->pszFileName;
     1607          pcil->rc.pszIcon = pcil->pszDisplayName;
     1608          pcir->rc.pszIcon = pcir->pszDisplayName;
     1609
     1610          pcil->pszLongname = NullStr;
     1611          pcir->pszLongname = NullStr;
    16021612
    16031613          if (!pcil->pszSubject)
     
    16051615          if (!pcir->pszSubject)
    16061616            pcil->pszSubject = NullStr;
     1617
     1618          if (!pcil->pszDispAttr)
     1619            pcil->pszDispAttr = NullStr;
     1620          if (!pcir->pszDispAttr)
     1621            pcil->pszDispAttr = NullStr;
    16071622
    16081623          // fixme to be time based - every 2 sec should be OK
     
    16381653                        MPFROMP(pcilFirst), MPFROMP(&ri))) {
    16391654          Win_Error(hwndLeft, cmp->hwnd, pszSrcFile, __LINE__, "CM_INSERTRECORD");
    1640           pcil = pcilFirst;
    1641           while (pcil) {
    1642             pcit = (PCNRITEM) pcil->rc.preccNextRecord;
    1643             WinSendMsg(hwndLeft, CM_FREERECORD,
    1644                        MPFROMP(&pcil), MPFROMSHORT(1));
    1645             pcil = pcit;
    1646           }
     1655          FreeCnrItemList(hwndLeft, pcilFirst);
    16471656          numfilesl = 0;
    16481657        }
     
    16551664        ri.cRecordsInsert = recsNeeded;
    16561665        ri.fInvalidateRecord = FALSE;
     1666
    16571667        if (!WinSendMsg(hwndRight, CM_INSERTRECORD,
    16581668                        MPFROMP(pcirFirst), MPFROMP(&ri))) {
    1659           Win_Error(hwndLeft, cmp->hwnd, pszSrcFile, __LINE__, "CM_INSERTRECORD");
    1660           WinSendMsg(hwndLeft, CM_REMOVERECORD,
    1661                      MPVOID, MPFROM2SHORT(0, CMA_FREE | CMA_INVALIDATE));
    1662           pcir = pcirFirst;
    1663           while (pcir) {
    1664             pcit = (PCNRITEM) pcir->rc.preccNextRecord;
    1665             WinSendMsg(hwndRight, CM_FREERECORD,
    1666                        MPFROMP(&pcir), MPFROMSHORT(1));
    1667             pcir = pcit;
    1668           }
     1669          Win_Error(hwndRight, cmp->hwnd, pszSrcFile, __LINE__, "CM_INSERTRECORD");
     1670          RemoveCnrItems(hwndLeft, NULL, 0, CMA_FREE | CMA_INVALIDATE);
     1671          FreeCnrItemList(hwndRight, pcirFirst);
    16691672          numfilesr = 0;
    16701673        }
     
    17291732      {
    17301733        USHORT ids[] = { COMP_LEFTDIR, COMP_RIGHTDIR, COMP_TOTALLEFT,
    1731           COMP_TOTALRIGHT, COMP_SELLEFT, COMP_SELRIGHT,
    1732           0
    1733         };
    1734         register INT x;
     1734                        COMP_TOTALRIGHT, COMP_SELLEFT, COMP_SELRIGHT,
     1735                        0
     1736                       };
     1737        INT x;
    17351738
    17361739        for (x = 0; ids[x]; x++)
     
    21892192      cnri.pszCnrTitle = cmp->leftdir;
    21902193      cnri.flWindowAttr = CV_DETAIL | CV_MINI |
    2191         CA_CONTAINERTITLE | CA_TITLESEPARATOR |
    2192         CA_DETAILSVIEWTITLES | CA_OWNERDRAW;
     2194                          CA_CONTAINERTITLE | CA_TITLESEPARATOR |
     2195                          CA_DETAILSVIEWTITLES | CA_OWNERDRAW;
    21932196      WinSendDlgItemMsg(hwnd, COMP_LEFTDIR, CM_SETCNRINFO, MPFROMP(&cnri),
    21942197                        MPFROMLONG(CMA_CNRTITLE | CMA_FLWINDOWATTR));
     
    23512354          if (ofile[strlen(ofile) - 1] != '\\')
    23522355            strcat(ofile, "\\");
    2353           strcat(ofile, pci->pszFileName);
     2356          strcat(ofile, pci->pszDisplayName);
    23542357          if (*compare) {
    23552358            CHAR *fakelist[3];
  • trunk/dll/dircnrs.c

    r730 r751  
    2727  12 May 07 SHL Use dcd->ulItemsToUnHilite; sync with UnHilite arg mods
    2828  10 Jun 07 GKY Add CheckPmDrgLimit including IsFm2Window as part of work around PM drag limit
     29  02 Aug 07 SHL Sync with CNRITEM mods
    2930
    3031***********************************************************************/
     
    736737        WinSetWindowText(WinWindowFromID(dcd->hwndFrame, FID_TITLEBAR), s);
    737738      }
    738       WinSendMsg(dcd->hwndCnr,
    739                  CM_REMOVERECORD,
    740                  MPVOID,
    741                  MPFROM2SHORT(0, CMA_FREE | CMA_INVALIDATE | CMA_ERASE));
     739      RemoveCnrItems(dcd->hwndCnr, NULL, 0, CMA_FREE | CMA_INVALIDATE | CMA_ERASE);
    742740      AdjustCnrColsForFSType(dcd->hwndCnr, dcd->directory, dcd);
    743741      dcd->ullTotalBytes = dcd->totalfiles =
     
    32223220              if (!*dcd->directory || IsValidDir(dcd->directory)) {
    32233221                NotifyError(pci->pszFileName, status);
    3224                 WinSendMsg(hwnd,
    3225                            CM_REMOVERECORD,
    3226                            MPFROMP(&pci),
    3227                            MPFROM2SHORT(1,
    3228                                         CMA_FREE | CMA_INVALIDATE |
    3229                                         CMA_ERASE));
     3222                RemoveCnrItems(hwnd, pci, 1, CMA_FREE | CMA_INVALIDATE | CMA_ERASE);
    32303223                if (hwndStatus)
    32313224                  WinSetWindowText(hwndStatus,
  • trunk/dll/dirsize.c

    r739 r751  
    8585{
    8686  CHAR maskstr[CCHMAXPATH];
     87  CHAR szBuf[CCHMAXPATH];
    8788  CHAR *pEndMask;
    8889  register char *p;
     
    113114
    114115  hdir = HDIR_CREATE;
    115   nm = 1L;
     116  nm = 1;
    116117  memset(pffb, 0, sizeof(FILEFINDBUF4));
    117118  DosError(FERR_DISABLEHARDERR);
     
    135136      return FALSE;
    136137    }
    137     pci = WinSendMsg(hwndCnr, CM_ALLOCRECORD, MPFROMLONG(EXTRA_RECORD_BYTES2),
    138                      MPFROMLONG(1L));
     138    pci = WinSendMsg(hwndCnr, CM_ALLOCRECORD, MPFROMLONG(EXTRA_RECORD_BYTES),
     139                     MPFROMLONG(1));
    139140    if (!pci) {
    140141      free(pffb);
     
    148149      DosError(FERR_DISABLEHARDERR);
    149150    pci->rc.hptrIcon = hptrDir;
    150     *pci->szDispAttr = 0;
    151151    pci->attrFile = 0;
    152     pci->pszSubject = xstrdup(NullStr, pszSrcFile, __LINE__);
     152    pci->pszDispAttr = NullStr;
     153    pci->pszSubject = NullStr;
    153154  }
    154155  else {
     
    163164
    164165  if (strlen(pszFileName) < 4 || top)
    165    pci->pszFileName = xstrdup(pszFileName, pszSrcFile, __LINE__);
     166    pci->pszFileName = xstrdup(pszFileName, pszSrcFile, __LINE__);
    166167  else {
    167168    p = strrchr(pszFileName, '\\');
     
    170171    else
    171172      p++;                              // After last backslash
    172     // Handle quoted names?
     173    // Handle quoted names
     174    // fixme to understand this - why lose path prefix?
    173175    sp = strchr(pszFileName, ' ') != NULL ? "\"" : NullStr;
    174     pci->pszFileName = xmalloc(CCHMAXPATH, pszSrcFile, __LINE__);       // fixme to optimize alloc
    175     pp = pci->pszFileName;
    176     if (*sp) {
    177       *pp = *sp;                        // Need quotes
    178       pp++;
    179       *pp = 0;
    180     }
     176    pp = szBuf;
     177    if (*sp)
     178      *pp++ = *sp;                      // Need quotes
    181179    strcpy(pp, p);
    182180    if (*sp)
    183181      strcat(pp, sp);
    184   }
    185   pci->pszLongname = pci->pszFileName;
    186   pci->rc.pszIcon = pci->pszLongname;
     182    pci->pszFileName = xstrdup(szBuf, pszSrcFile, __LINE__);
     183  }
     184  // fixme to know why - it appears to be indirectly saving length, but why?
     185  pci->pszDisplayName = pci->pszFileName + strlen(pci->pszFileName);
     186  pci->pszLongname = pci->pszFileName;          // fixme to be sure?
     187  pci->rc.pszIcon = pci->pszFileName;
    187188  pci->rc.flRecordAttr |= CRA_RECORDREADONLY;
    188189  if (fForceUpper)
     
    196197  ri.pRecordParent = (PRECORDCORE) pciParent;
    197198  ri.zOrder = (USHORT) CMA_TOP;
    198   ri.cRecordsInsert = 1L;
     199  ri.cRecordsInsert = 1;
    199200  ri.fInvalidateRecord = TRUE;
    200201  if (!WinSendMsg(hwndCnr, CM_INSERTRECORD, MPFROMP(pci), MPFROMP(&ri))) {
     
    203204  }
    204205  hdir = HDIR_CREATE;
    205   nm = 1L;
     206  nm = 1;
    206207  rc = DosFindFirst(maskstr, &hdir,
    207208                    FILE_NORMAL | FILE_READONLY | FILE_ARCHIVED |
     
    216217      priority_normal();
    217218      //printf("Found %lu\n",nm);
    218       for (x = 0L; x < nm; x++) {
     219      for (x = 0; x < nm; x++) {
    219220        pffbFile = (FILEFINDBUF4 *) fb;
    220221        //printf("%s\n",pffbFile->achName);
     
    247248      if (*pchStopFlag)
    248249        break;
    249       DosSleep(0L);
    250       nm = 1L;                          /* FilesToGet */
     250      DosSleep(1);
     251      nm = 1;                           /* FilesToGet */
    251252      rc = DosFindNext(hdir, pffb, sizeof(FILEFINDBUF4), &nm);
    252253    }                                   // while more found
     
    276277
    277278    float fltPct = 0.0;
     279    USHORT c;
    278280    CHAR szCurDir[80];
    279281    CHAR szSubDir[80];
     
    301303        }
    302304        // Need unique buffer 23 Jul 07 SHL
    303         pci->pszLongname = xmalloc(2, pszSrcFile, __LINE__);
     305        pci->pszLongname = xmalloc(2, pszSrcFile, __LINE__);
    304306        pci->pszLongname[0] = 0;                // Make null string
    305307        pci->pszLongname[1] = 1;                // Flag root - hack cough
     
    323325    CommaFmtULL(szSubDir, sizeof(szSubDir), pci->easize, 'K');
    324326    CommaFmtULL(szAllDir, sizeof(szAllDir), pci->cbFile + pci->easize, 'K');
    325     pci->pszFileName = xrealloc(pci->pszFileName, strlen(pci->pszFileName) + 100,
     327    c = pci->pszDisplayName - pci->pszFileName;
     328    pci->pszFileName = xrealloc(pci->pszFileName,
     329                                CCHMAXPATH,
    326330                                pszSrcFile,
    327331                                __LINE__);      // 23 Jul 07 SHL
    328     sprintf(pci->pszFileName + strlen(pci->pszFileName),
     332    sprintf(pci->pszFileName + c,
    329333            "  %s + %s = %s (%.02lf%%%s)\r%s",
    330334            szCurDir,
    331335            szSubDir,
    332336            szAllDir,
    333             fltPct, isroot ? GetPString(IDS_OFDRIVETEXT) : NullStr, szBar);
     337            fltPct,
     338            isroot ? GetPString(IDS_OFDRIVETEXT) : NullStr,
     339            szBar);
     340    pci->pszFileName = xrealloc(pci->pszFileName,
     341                                strlen(pci->pszFileName) + 1,
     342                                pszSrcFile,
     343                                __LINE__);      // 23 Jul 07 SHL
     344    pci->pszDisplayName = pci->pszFileName + c;
    334345    WinSendMsg(hwndCnr,
    335346               CM_INVALIDATERECORD, MPFROMP(&pci), MPFROM2SHORT(1, 0));
     
    377388                                               CMA_ITEMORDER));
    378389      while (pci && (INT) pci != -1) {
    379         DosSleep(0L);
     390        DosSleep(1);
    380391        PrintToFile(hwndCnr, indent + 1, pci, fp);
    381392        pci = (PCNRITEM) WinSendMsg(hwndCnr, CM_QUERYRECORD, MPFROMP(pci),
     
    462473      dirsize->pszFileName = pState->szDirName;
    463474      dirsize->hwndCnr = WinWindowFromID(hwnd, DSZ_CNR);
    464       if (_beginthread(FillCnrThread, NULL, 122880L * 5L, (PVOID) dirsize) ==
     475      if (_beginthread(FillCnrThread, NULL, 122880L * 5, (PVOID)dirsize) ==
    465476          -1) {
    466477        Runtime_Error(pszSrcFile, __LINE__,
     
    489500                        MPFROMP(&cnri), MPFROMLONG(sizeof(CNRINFO)));
    490501      cnri.cyLineSpacing = 0;
    491       cnri.cxTreeIndent = 12L;
     502      cnri.cxTreeIndent = 12;
    492503      cnri.flWindowAttr = CV_TREE | CV_FLOW | CA_TREELINE | CA_OWNERDRAW;
    493504      WinSendDlgItemMsg(hwnd, DSZ_CNR, CM_SETCNRINFO, MPFROMP(&cnri),
     
    760771            memset(szTemp, 0, sizeof(szTemp));
    761772            strncpy(szTemp, pci->pszFileName,
    762                     pci->pszFileName - pci->pszFileName);
     773                    pci->pszDisplayName - pci->pszFileName);
    763774            strrev(szTemp);
    764775            if (*szFileName && *szTemp != '\\')
     
    771782          strrev(szFileName);
    772783          if (!fVTreeOpensWPS)
    773             OpenDirCnr((HWND) 0,
    774                        (hwndMain) ? hwndMain : HWND_DESKTOP,
    775                        hwnd, FALSE, szFileName);
     784            OpenDirCnr((HWND)0,
     785                       hwndMain ? hwndMain : HWND_DESKTOP,
     786                       hwnd,
     787                       FALSE,
     788                       szFileName);
    776789          else {
    777790
     
    908921    if (pState)
    909922      pState->chStopFlag = (BYTE)0xff;
    910     DosSleep(1L);
     923    DosSleep(1);
    911924    break;
    912925
     
    917930      if (pState->hptr)
    918931        WinDestroyPointer(pState->hptr);
    919       DosSleep(33L);
     932      DosSleep(33);
    920933      free(pState);                     // Let's hope no one is still looking
    921934    }
  • trunk/dll/filldir.c

    r745 r751  
    3333  23 Jul 07 SHL Sync with CNRITEM updates (ticket#24)
    3434  29 Jul 07 SHL Add CNRITEM free and remove support (ticket#24)
     35  02 Aug 07 SHL Add FileAttrToString
    3536
    3637***********************************************************************/
     
    4748#include <ctype.h>
    4849#include <time.h>
     50#include <malloc.h>                     // _heapchk
    4951
    5052#include "fm3dll.h"
     
    5456
    5557#pragma alloc_text(FILLDIR,FillInRecordFromFFB,FillInRecordFromFSA,IDFile)
    56 #pragma alloc_text(FILLDIR1,ProcessDirectory,FillDirCnr,FillTreeCnr)
     58#pragma alloc_text(FILLDIR1,ProcessDirectory,FillDirCnr,FillTreeCnr,FileAttrToString)
    5759#pragma alloc_text(EMPTYCNR,EmptyCnr)
     60
     61/**
     62 * Return display string given standard file attribute mask
     63 * @param fileAttr attribute mask in FILEFINDBUF format
     64 * @return fixed length string for display
     65 */
     66
     67const PSZ FileAttrToString(ULONG fileAttr)
     68{
     69  // From os2win.h
     70  // FILE_ATTRIBUTE_READONLY    0x00000001
     71  // FILE_ATTRIBUTE_HIDDEN      0x00000002
     72  // FILE_ATTRIBUTE_SYSTEM      0x00000004
     73  //                            0x00000008
     74  // FILE_ATTRIBUTE_DIRECTORY   0x00000010
     75  // FILE_ATTRIBUTE_ARCHIVE     0x00000020
     76
     77  static CHAR *apszAttrString[] = {
     78  // RHSDA
     79    "-----",
     80    "R----",
     81    "-H---",
     82    "RH---",
     83    "--S--",
     84    "R-S--",
     85    "-HS--",
     86    "RHS--",
     87    "---D-",
     88    "R--D-",
     89    "-H-D-",
     90    "RH-D-",
     91    "--SD-",
     92    "R-SD-",
     93    "-HSD-",
     94    "RHSD-",
     95    "----A",
     96    "R---A",
     97    "-H--A",
     98    "RH--A",
     99    "--S-A",
     100    "R-S-A",
     101    "-HS-A",
     102    "RHS-A",
     103    "---DA",
     104    "R--DA",
     105    "-H-DA",
     106    "RH-DA",
     107    "--SDA",
     108    "R-SDA",
     109    "-HSDA",
     110    "RHSDA"
     111  };
     112
     113  fileAttr = ((fileAttr & 0x30) >> 1) | (fileAttr & 7); // Drop don't care bit from index
     114
     115  return apszAttrString[fileAttr];
     116
     117}
    58118
    59119static HPOINTER IDFile(PSZ p)
     
    175235  /* fill in a container record from a FILEFINDBUF4 structure */
    176236
    177   CHAR attrstring[] = "RHS\0DA";
    178237  CHAR *p;
    179238  HPOINTER hptr;
    180   UINT x;
    181   UINT y;
    182239
    183240  pci->hwndCnr = hwndCnr;
     
    194251    if (pszDirectory[c - 1] != '\\')
    195252      c2++;
    196     pci->pszFileName = xmalloc(c + c2,
    197                                pszSrcFile,
    198                                __LINE__);
     253    pci->pszFileName = xmalloc(c + c2, pszSrcFile, __LINE__);
    199254    memcpy(pci->pszFileName, pszDirectory, c + 1);
    200255    p = pci->pszFileName + c - 1;
     
    249304    }
    250305  }
    251   // If still need subject - fixme to just point NullStr
    252306  if (!pci->pszSubject)
    253     pci->pszSubject = xstrdup(NullStr, pszSrcFile, __LINE__);
     307    pci->pszSubject = NullStr;
    254308
    255309  /* load the object's longname */
     
    297351    }
    298352  }
    299   // If still need long name set - fixme to just point to NullStr
    300353  if (!pci->pszLongname)
    301     pci->pszLongname = xstrdup(NullStr, pszSrcFile, __LINE__);
     354    pci->pszLongname = NullStr;
    302355
    303356  /* do anything required to case of filename */
     
    385438  pci->cbFile = pffb->cbFile;
    386439  pci->attrFile = pffb->attrFile;
    387   /* build attribute string for display */
    388   y = 0;
    389   for (x = 0; x < 6; x++) {
    390     if (attrstring[x]) {
    391       pci->szDispAttr[y++] =
    392         (CHAR) ((pci->attrFile & (1 << x)) ? attrstring[x] : '-');
    393     }
    394   }
    395   pci->szDispAttr[5] = 0;
    396   pci->pszDispAttr = pci->szDispAttr;
     440  pci->pszDispAttr = FileAttrToString(pci->attrFile);
    397441  pci->rc.pszIcon = pci->pszDisplayName;
    398442  pci->rc.hptrIcon = hptr;
     
    428472{
    429473  HPOINTER hptr;
    430   CHAR attrstring[] = "RHS\0DA";
    431474  CHAR *p;
    432   INT x;
    433   INT y;
    434475
    435476  /* fill in a container record from a FILESTATUS4 structure */
     
    481522    }
    482523  }
    483   // If still need subject buffer - fixme to just point to NullStr
    484524  if (!pci->pszSubject)
    485     pci->pszSubject = xstrdup(NullStr, pszSrcFile, __LINE__);
     525    pci->pszSubject = NullStr;
    486526
    487527  pci->pszLongname = 0;
     
    530570    }
    531571  }
    532   // If still need long name set - fixme to just point to NullStr
    533572  if (!pci->pszLongname)
    534     pci->pszLongname = xstrdup(NullStr, pszSrcFile, __LINE__);
     573    pci->pszLongname = NullStr;
    535574
    536575  if (fForceUpper)
     
    607646  pci->cbFile = pfsa4->cbFile;
    608647  pci->attrFile = pfsa4->attrFile;
    609   y = 0;
    610   for (x = 0; x < 6; x++)
    611     if (attrstring[x])
    612       pci->szDispAttr[y++] = (CHAR) ((pci->attrFile & (1 << x)) ?
    613                                      attrstring[x] : '-');
    614   pci->szDispAttr[5] = 0;
    615   pci->pszDispAttr = pci->szDispAttr;
     648  pci->pszDispAttr = FileAttrToString(pci->attrFile);
    616649  pci->rc.pszIcon = pci->pszDisplayName;
    617650  pci->rc.hptrIcon = hptr;
     
    677710  PCNRITEM pci;
    678711  PCNRITEM pciFirst;
    679   PCNRITEM pcit;
    680712  RECORDINSERT ri;
    681713  PBYTE pByte;
     
    802834                    ok = FALSE;
    803835                    ullTotalBytes = 0;
    804                     if (WinIsWindow((HAB) 0, hwndCnr)) {
    805                       pci = pciFirst;
    806                       while (pci) {
    807                         pcit = (PCNRITEM) pci->rc.preccNextRecord;
    808                         WinSendMsg(hwndCnr,
    809                                    CM_FREERECORD,
    810                                    MPFROMP(&pci), MPFROMSHORT(1));
    811                         pci = pcit;
    812                       }
    813                     }
     836                    if (WinIsWindow((HAB) 0, hwndCnr))
     837                      FreeCnrItemList(hwndCnr, pciFirst);
    814838                  }
    815839                }
     
    907931                ok = FALSE;
    908932                ullTotalBytes = 0;
    909                 if (WinIsWindow((HAB) 0, hwndCnr)) {
    910                   pci = pciFirst;
    911                   while (pci) {
    912                     pcit = (PCNRITEM) pci->rc.preccNextRecord;
    913                     WinSendMsg(hwndCnr, CM_FREERECORD,
    914                                MPFROMP(&pci), MPFROMSHORT(1));
    915                     pci = pcit;
    916                   }
    917                 }
     933                if (WinIsWindow((HAB) 0, hwndCnr))
     934                  FreeCnrItemList(hwndCnr, pciFirst);
    918935              }
    919936            }
     
    977994  DosPostEventSem(CompactSem);
    978995
     996#if 1 // fixme to disable or to be configurable
     997  {
     998    int state = _heapchk();
     999    if (state != _HEAPOK)
     1000      Runtime_Error(pszSrcFile, __LINE__, "heap corrupted %d", state);
     1001  }
     1002#endif
     1003
    9791004} // FillDirCnr
    9801005
     
    10321057    pciFirst = WinSendMsg(hwndCnr,
    10331058                          CM_ALLOCRECORD,
    1034                           MPFROMLONG(EXTRA_RECORD_BYTES2),
     1059                          MPFROMLONG(EXTRA_RECORD_BYTES),
    10351060                          MPFROMLONG((ULONG) numtoinsert));
    10361061  }
     
    11521177              pci->rc.pszIcon = pci->pszDisplayName;
    11531178              pci->attrFile = FILE_DIRECTORY;
    1154               strcpy(pci->szDispAttr, "----D-");
    1155               pci->pszDispAttr = pci->szDispAttr;
     1179              pci->pszDispAttr = FileAttrToString(pci->attrFile);
    11561180              driveserial[x] = -1;
    11571181            }
     
    11651189            pci->rc.pszIcon = pci->pszDisplayName;
    11661190            pci->attrFile = FILE_DIRECTORY;
    1167             strcpy(pci->szDispAttr, "----D-");
    1168             pci->pszDispAttr = pci->szDispAttr;
     1191            pci->pszDispAttr = FileAttrToString(pci->attrFile);
    11691192          }
    11701193          SelectDriveIcon(pci);
     
    11761199          pci->rc.pszIcon = pci->pszFileName;
    11771200          pci->attrFile = FILE_DIRECTORY;
    1178           strcpy(pci->szDispAttr, "----D-");
    1179           pci->pszDispAttr = pci->szDispAttr;
     1201          pci->pszDispAttr = FileAttrToString(pci->attrFile);
    11801202          driveserial[x] = -1;
    11811203        }
     
    11881210        pci->rc.pszIcon = pci->pszDisplayName;
    11891211        pci->attrFile = FILE_DIRECTORY;
    1190         strcpy(pci->szDispAttr, "----D-");
    1191         pci->pszDispAttr = pci->szDispAttr;
     1212        pci->pszDispAttr = FileAttrToString(pci->attrFile);
    11921213        driveflags[x] |= (DRIVE_REMOVABLE | DRIVE_NOLONGNAMES);
    11931214        driveserial[x] = -1;
     
    12531274    pciParent = WinSendMsg(hwndCnr,
    12541275                           CM_ALLOCRECORD,
    1255                            MPFROMLONG(EXTRA_RECORD_BYTES2), MPFROMLONG(1));
     1276                           MPFROMLONG(EXTRA_RECORD_BYTES), MPFROMLONG(1));
    12561277    if (pciParent) {
    12571278      pciParent->flags |= RECFLAGS_ENV;
    12581279      pciParent->pszFileName = xstrdup(GetPString(IDS_ENVVARSTEXT), pszSrcFile, __LINE__);
    1259       //pciParent->pszFileName = pciParent->szFileName;
    12601280      pciParent->rc.hptrIcon = hptrEnv;
    12611281      pciParent->rc.pszIcon = pciParent->pszFileName;
    1262       strcpy(pciParent->szDispAttr, "------");
    1263       pciParent->pszDispAttr = pciParent->szDispAttr;
     1282      pciParent->pszDispAttr = FileAttrToString(0);
    12641283      memset(&ri, 0, sizeof(RECORDINSERT));
    12651284      ri.cb = sizeof(RECORDINSERT);
     
    12891308            pci = WinSendMsg(hwndCnr,
    12901309                             CM_ALLOCRECORD,
    1291                              MPFROMLONG(EXTRA_RECORD_BYTES2),
     1310                             MPFROMLONG(EXTRA_RECORD_BYTES),
    12921311                             MPFROMLONG(1));
    12931312            if (pci) {
     
    12981317              pci->rc.hptrIcon = hptrEnv;
    12991318              pci->rc.pszIcon = pci->pszFileName;
    1300               strcpy(pci->szDispAttr, "------");
    1301               pci->pszDispAttr = pci->szDispAttr;
     1319              pci->pszDispAttr = FileAttrToString(0);
    13021320              memset(&ri, 0, sizeof(RECORDINSERT));
    13031321              ri.cb = sizeof(RECORDINSERT);
     
    13121330                Win_Error2(hwndCnr, HWND_DESKTOP, pszSrcFile, __LINE__,
    13131331                           IDS_CMINSERTERRTEXT);
    1314                 WinSendMsg(hwndCnr, CM_FREERECORD, MPFROMP(&pci),
    1315                            MPFROMSHORT(1));
     1332                FreeCnrItem(hwndCnr, pci);
    13161333              }
    13171334            }
     
    13241341      }
    13251342      else
    1326         WinSendMsg(hwndCnr,
    1327                    CM_FREERECORD, MPFROMP(&pciParent), MPFROMSHORT(1));
     1343        FreeCnrItem(hwndCnr, pciParent);
    13281344    }
    13291345  } // if show env
     
    14801496  PFIELDINFO pfi;
    14811497
     1498#if 1 // fixme to disable or to be configurable
     1499  {
     1500    int state = _heapchk();
     1501    if (state != _HEAPOK)
     1502      Runtime_Error(pszSrcFile, __LINE__, "heap corrupted %d", state);
     1503  }
     1504#endif
     1505
    14821506  // Remove all records
    14831507  RemoveCnrItems(hwnd, NULL, 0, CMA_FREE);
     
    14911515    Win_Error(hwnd, HWND_DESKTOP, pszSrcFile, __LINE__,"CM_REMOVEDETAILFIELDINFO hwnd %x", hwnd);
    14921516  }
    1493 
    1494   // DbgMsg(pszSrcFile, __LINE__, "EmptyCnr hwnd %p emptied", hwnd);
    14951517}
    14961518
    14971519/**
    14981520 * Free storage associated with container item
     1521 * Caller is responsible for correcting pointers
    14991522 */
    15001523
    1501 static VOID FreeCnrItemData(PCNRITEM pci)
     1524VOID FreeCnrItemData(PCNRITEM pci)
    15021525{
    15031526  // DbgMsg(pszSrcFile, __LINE__, "FreeCnrItemData %p", pci);
     
    15181541 */
    15191542
    1520 VOID FreeCnrItem(HWND hwnd, PCNRITEM pci)
     1543INT FreeCnrItem(HWND hwnd, PCNRITEM pci)
    15211544{
     1545  INT remaining;
     1546
    15221547  // DbgMsg(pszSrcFile, __LINE__, "FreeCnrItem hwnd %x pci %p", hwnd, pci);
    15231548
    15241549  FreeCnrItemData(pci);
    15251550
    1526   if ((INT)WinSendMsg(hwnd, CM_FREERECORD, MPFROMP(&pci), MPFROMSHORT(1)) == -1) {
     1551  remaining = (INT)WinSendMsg(hwnd, CM_FREERECORD, MPFROMP(&pci), MPFROMSHORT(1));
     1552  if (remaining == -1) {
    15271553    // Win_Error2(hwnd, HWND_DESKTOP, pszSrcFile, __LINE__,IDS_CMFREEERRTEXT);
    15281554    Win_Error(hwnd, HWND_DESKTOP, pszSrcFile, __LINE__,"CM_FREERECORD hwnd %x pci %p", hwnd, pci);
    15291555  }
     1556  return remaining;
    15301557}
    15311558
    15321559/**
    1533  * Remove item from container and free associated storage
     1560 * Free container item list and associated storage
    15341561 */
    15351562
    1536 VOID RemoveCnrItems(HWND hwnd, PCNRITEM pci, USHORT usCnt, USHORT usFlags)
     1563VOID FreeCnrItemList(HWND hwnd, PCNRITEM pciFirst)
    15371564{
     1565  PCNRITEM pci = pciFirst;
     1566  PCNRITEM pciNext;
     1567
     1568  while (pci) {
     1569    pciNext = (PCNRITEM) pci->rc.preccNextRecord;
     1570    if (FreeCnrItem(hwnd, pci) == -1)
     1571      break;                            // Avoid cascading errors
     1572    pci = pciNext;
     1573  }
     1574}
     1575
     1576/**
     1577 * Remove item(s) from container and free associated storage if requested
     1578 * @returns count of items remaining in container or -1 if error
     1579 */
     1580
     1581INT RemoveCnrItems(HWND hwnd, PCNRITEM pci, USHORT usCnt, USHORT usFlags)
     1582{
     1583  INT remaining;
     1584
    15381585  if (usCnt == 0) {
    1539     if (pci != NULL)
     1586    if (pci != NULL) {
    15401587      Runtime_Error(pszSrcFile, __LINE__, "pci not NULL");
     1588      remaining = -1;
     1589    }
    15411590    else {
    15421591      for (;;) {
    15431592        pci = (PCNRITEM)WinSendMsg(hwnd, CM_QUERYRECORD, MPVOID,
    15441593                                   MPFROM2SHORT(CMA_FIRST, CMA_ITEMORDER));
    1545         if (!pci)
    1546           break;
     1594        if (!pci) {
     1595          remaining = 0;
     1596          break;                        // Done
     1597        }
    15471598        else if ((INT)pci == -1) {
    15481599          Win_Error(hwnd, HWND_DESKTOP, pszSrcFile, __LINE__,"CM_QUERYRECORD");
     1600          remaining = -1;
    15491601          break;
    15501602        }
    1551         else
    1552           RemoveCnrItems(hwnd, pci, 1, usFlags);
    1553       }
    1554     }
    1555   }
    1556   else if (usCnt != 1)
     1603        else {
     1604          remaining = RemoveCnrItems(hwnd, pci, 1, usFlags);
     1605          if (remaining == -1)
     1606            break;
     1607        }
     1608      } // for
     1609    }
     1610  }
     1611  else if (usCnt != 1) {
    15571612    Runtime_Error(pszSrcFile, __LINE__, "count not 1");
     1613    remaining = -1;
     1614  }
    15581615  else {
    15591616    // DbgMsg(pszSrcFile, __LINE__, "RemoveCnrItems %p %u %s", pci, usCnt, pci->pszFileName);
    15601617
    1561     FreeCnrItemData(pci);
    1562 
    1563     if ((INT)WinSendMsg(hwnd, CM_REMOVERECORD, MPFROMP(&pci), MPFROM2SHORT(usCnt, CMA_FREE)) == -1) {
     1618    if (usFlags & CMA_FREE)
     1619      FreeCnrItemData(pci);
     1620
     1621    remaining = (INT)WinSendMsg(hwnd, CM_REMOVERECORD, MPFROMP(&pci), MPFROM2SHORT(usCnt, usFlags));
     1622    if (remaining == -1) {
    15641623      // Win_Error2(hwnd, HWND_DESKTOP, pszSrcFile, __LINE__,IDS_CMREMOVEERRTEXT);
    15651624      Win_Error(hwnd, HWND_DESKTOP, pszSrcFile, __LINE__,"CM_REMOVERECORD hwnd %x pci %p", hwnd, pci);
    15661625    }
    15671626  }
     1627  return remaining;
    15681628}
    15691629
  • trunk/dll/flesh.c

    r739 r751  
    77
    88  Copyright (c) 1993-98 M. Kimes
    9   Copyright (c) 2005-07 Steven H. Levine
     9  Copyright (c) 2005, 2007 Steven H. Levine
    1010
    1111  24 May 05 SHL Rework Win_Error usage
     
    1616  19 Oct 06 SHL Stubby - correct . and .. detect
    1717  22 Mar 07 GKY Use QWL_USER
     18  01 Aug 07 SHL Sync with CNRITEM mods
    1819
    1920***********************************************************************/
     
    102103              pciL = WinSendMsg(hwndCnr,
    103104                                CM_ALLOCRECORD,
    104                                 MPFROMLONG(EXTRA_RECORD_BYTES2),
     105                                MPFROMLONG(EXTRA_RECORD_BYTES),
    105106                                MPFROMLONG(1));
    106107              if (pciL) {
    107108                pciL->pszFileName = xstrdup(fullpath, pszSrcFile, __LINE__);
    108                 pciL->rc.pszIcon = pciL->pszFileName;
     109                pciL->rc.pszIcon = pciL->pszFileName;
    109110                if (!fNoIconsDirs &&
    110111                    (!isalpha(*fullpath) ||
     
    115116                  pciL->rc.hptrIcon = hptrDir;
    116117                pciL->attrFile = FILE_DIRECTORY;
    117                 strcpy(pciL->szDispAttr, "----D-");
    118                 pciL->pszDispAttr = pciL->szDispAttr;
     118                pciL->pszDispAttr = FileAttrToString(pciL->attrFile);
    119119                memset(&ri, 0, sizeof(ri));
    120120                ri.cb = sizeof(ri);
     
    126126                if (!WinSendMsg(hwndCnr,
    127127                                CM_INSERTRECORD, MPFROMP(pciL), MPFROMP(&ri)))
    128                   WinSendMsg(hwndCnr,
    129                              CM_FREERECORD, MPFROMP(&pciL), MPFROMSHORT(1));
     128                  FreeCnrItem(hwndCnr, pciL);
    130129              }
    131130            }
     
    165164                               MPFROM2SHORT(CMA_FIRSTCHILD, CMA_ITEMORDER));
    166165  if (!pciL || !*pciL->pszFileName) {
    167     if (pciL && (INT) pciL != -1) {
    168       WinSendMsg(hwndCnr,
    169                  CM_REMOVERECORD, MPFROMP(&pciL), MPFROM2SHORT(1, CMA_FREE));
    170     }
     166    if (pciL && (INT) pciL != -1)
     167      RemoveCnrItems(hwndCnr, pciL, 1, CMA_FREE);
    171168    dcd = INSTDATA(hwndCnr);
    172169    if (dcd && dcd->size != sizeof(DIRCNRDATA))
     
    203200    if (pciL && (INT) pciL != -1) {
    204201      ret = TRUE;
    205       WinSendMsg(hwndCnr,
    206                  CM_REMOVERECORD, MPFROMP(&pciL), MPFROM2SHORT(1, CMA_FREE));
     202      RemoveCnrItems(hwndCnr, pciL, 1, CMA_FREE);
    207203    }
    208204    else
     
    343339    DosFindClose(hDir);
    344340    if (toupper(*pciParent->pszFileName) > 'B' &&
    345         (*(pciParent->pszFileName + 1)) == ':' &&
     341        (*(pciParent->pszFileName + 1)) == ':' &&
    346342        (*(pciParent->pszFileName + 2)) == '\\' && !(*(pciParent->pszFileName + 3))) {
    347343
     
    420416        pci = WinSendMsg(hwndCnr,
    421417                         CM_ALLOCRECORD,
    422                          MPFROMLONG(EXTRA_RECORD_BYTES2), MPFROMLONG(1L));
     418                         MPFROMLONG(EXTRA_RECORD_BYTES), MPFROMLONG(1L));
    423419        if (!pci) {
    424420          Win_Error(hwndCnr, HWND_DESKTOP, __FILE__, __LINE__,
     
    427423        else {
    428424          RECORDINSERT ri;
    429           //pci->pszFileName = pci->szFileName;
    430           pci->pszFileName = xstrdup(NullStr, pszSrcFile, __LINE__);
    431           pci->rc.pszIcon = pci->pszFileName;
    432           // 23 Jul 07 SHL fixme to ensure pszDisplay set appropriately
     425          pci->pszFileName = NullStr;
     426          pci->pszDisplayName = pci->pszFileName;
     427          pci->rc.pszIcon = pci->pszDisplayName;
    433428          memset(&ri, 0, sizeof(RECORDINSERT));
    434429          ri.cb = sizeof(RECORDINSERT);
     
    440435          if (!WinSendMsg(hwndCnr,
    441436                          CM_INSERTRECORD, MPFROMP(pci), MPFROMP(&ri))) {
    442             DosSleep(100L);
     437            DosSleep(100);
    443438            WinSetFocus(HWND_DESKTOP, hwndCnr);
    444             if (WinIsWindow((HAB) 0, hwndCnr)) {
     439            if (WinIsWindow((HAB)0, hwndCnr)) {
    445440              if (!WinSendMsg(hwndCnr,
    446441                              CM_INSERTRECORD, MPFROMP(pci), MPFROMP(&ri))) {
    447442                Win_Error(hwndCnr, HWND_DESKTOP, __FILE__, __LINE__,
    448443                          GetPString(IDS_RECORDINSERTFAILEDTEXT));
    449                 WinSendMsg(hwndCnr,
    450                            CM_FREERECORD, MPFROMP(&pci), MPFROMSHORT(1));
     444                FreeCnrItem(hwndCnr, pci);
    451445              }
    452446              else
  • trunk/dll/fm3dll.h

    r748 r751  
    5353  22 Jul 07 GKY Update CNRITEM to optimize RAM usage
    5454  23 Jul 07 SHL More CNRITEM updates (ticket#24)
     55  01 Aug 07 SHL More CNRITEM and ARCITEM updates (ticket#24)
    5556
    5657***********************************************************************/
     
    155156#define CONTAINER_COLUMNS       13      /* Number of columns in details view */
    156157#define RGBFROMPARTS(r,g,b)     (((r) * 65536) + ((g) * 256) + (b))
    157 #define EXTRA_RECORD_BYTES2     (sizeof(CNRITEM) - sizeof(MINIRECORDCORE))
    158 #define EXTRA_RECORD_BYTES      (EXTRA_RECORD_BYTES2 + (CCHMAXPATHCOMP - 1))
     158
     159#define EXTRA_RECORD_BYTES      (sizeof(CNRITEM) - sizeof(MINIRECORDCORE))
    159160#define EXTRA_ARCRECORD_BYTES   (sizeof(ARCITEM) - sizeof(MINIRECORDCORE))
     161
    160162#define ALLATTRS                (FILE_NORMAL | FILE_DIRECTORY | FILE_ARCHIVED |\
    161163                                 FILE_HIDDEN | FILE_READONLY | FILE_SYSTEM)
     
    407409  MINIRECORDCORE rc;            /* Base information */
    408410  HWND hwndCnr;                 /* The container holding this record */
    409   PSZ pszFileName;              // Points to buffer holding full pathname
     411  PSZ pszFileName;              // Points to buffer holding full pathname or NullStr
    410412  PSZ pszDisplayName;           // Points to displayable part of path name  - used by CFA_STRING
    411   //CHAR szFileName[CCHMAXPATH];        // Path name - fixme to rename to szPathName?
    412   //CHAR szSubject[40];         /* Subject string */
    413   CHAR *pszSubject;             // Points subject buffer - used by fm/2 and by CFA_STRING
     413  CHAR *pszSubject;             // Points subject buffer or Nullstr - used by fm/2 and by CFA_STRING
    414414  CHAR *pszDispAttr;            // Points to szDispAttr - required by CFA_STRING
    415415  CDATE date;                   /* Last write date of file */
     
    419419  CDATE crdate;                 /* Creation date of file */
    420420  CTIME crtime;                 /* Creation time of file */
    421   CHAR szDispAttr[6];           /* Attrib string for details display */
    422421  CHAR *pszLongname;            // Points to long name buffer - used by code and by CFA_STRING
    423422  ULONGLONG cbFile;             /* File size */
     
    425424  ULONG attrFile;               /* Attributes of this file */
    426425  ULONG flags;
    427   //CHAR szLongname[1];         // Holds .LONGNAME EA or root flag
    428426}
    429427CNRITEM, *PCNRITEM;
     
    433431  MINIRECORDCORE rc;            // Base information
    434432  HWND hwndCnr;                 /* Container holding this record */
    435   PSZ pszFileName;              // Pointer to full path name
     433  PSZ pszFileName;              // Points to full path name or NullStr
    436434  PSZ pszDisplayName;           // Points to displayable part of path name  - used by CFA_STRING
    437   // CHAR szFileName[CCHMAXPATH];       // File name
    438435  CHAR szDate[40];              // File's assembled date
    439436  PSZ pszDate;                  // Pointer to date
     
    626623/* filldir.c */
    627624VOID EmptyCnr(HWND hwnd);
     625const PSZ FileAttrToString(ULONG fileAttr);
    628626VOID FillDirCnr(HWND hwndCnr, CHAR *pszDirectory, DIRCNRDATA *pdcd,
    629627                PULONGLONG pullBytes);
     
    641639                              const PSZ pszFileName, const PFILESTATUS4 pfsa4,
    642640                              const BOOL partial, DIRCNRDATA *pdcd);
    643 VOID FreeCnrItem(HWND hwnd, PCNRITEM pci);
     641INT FreeCnrItem(HWND hwnd, PCNRITEM pci);
     642VOID FreeCnrItemList(HWND hwnd, PCNRITEM pciFirst);
    644643VOID FreeCnrItemData(PCNRITEM pci);
    645 VOID RemoveCnrItems(HWND hwnd, PCNRITEM pci, USHORT usCnt, USHORT usFlags);
     644INT RemoveCnrItems(HWND hwnd, PCNRITEM pci, USHORT usCnt, USHORT usFlags);
    646645
    647646/* flesh.c */
  • trunk/dll/misc.c

    r747 r751  
    2626  05 Jul 07 GKY Fix menu removals for WORKPLACE_PROCESS=YES
    2727  23 Jul 07 SHL Sync with CNRITEM updates (ticket#24)
     28  31 Jul 07 SHL Clean up and report errors (ticket#24)
    2829
    2930***********************************************************************/
     
    8384    PIB *ppib;
    8485    TIB *ptib;
    85     APIRET rc;
    86 
    87     rc = DosGetInfoBlocks(&ptib, &ppib);
     86    BOOL yes;
     87    APIRET rc = DosGetInfoBlocks(&ptib, &ppib);
     88
    8889    if (rc) {
    8990      Dos_Error(MB_CANCEL, rc, HWND_DESKTOP, pszSrcFile, __LINE__,
    9091                "DosGetInfoBlocks");
     92      yes = FALSE;
    9193    }
    9294    else {
     
    9496      TID tid;
    9597
    96       if (WinQueryWindowProcess(hwnd, &pid, &tid)) {
    97         if (chkTid) {
    98           // Is window owned by FM2 process on same thread?
    99           if (pid == ppib->pib_ulpid && tid == ptib->tib_ptib2->tib2_ultid)
    100             return TRUE;
    101         }
    102         // Is window owned by some FM2 thread
    103         else if (pid == ppib->pib_ulpid)
    104           return TRUE;
    105       }
    106     }
    107     return FALSE;
     98      // Check window owned by FM2 process
     99      // Check say same thread too, if requested
     100      // OK for window to be dead - just return FALSE
     101      yes = WinQueryWindowProcess(hwnd, &pid, &tid) &&
     102            pid == ppib->pib_ulpid &&
     103            (!chkTid || tid == ptib->tib_ptib2->tib2_ultid);
     104    }
     105    return yes;
    108106}
    109107
     
    381379        !stricmp(FileSystem, JFS) ||
    382380        !stricmp(FileSystem, FAT32) ||
    383         !stricmp(FileSystem, RAMFS) ||
    384         !stricmp(FileSystem, NDFS32) ||
    385         !stricmp(FileSystem, NTFS) ||
    386         !stricmp(FileSystem, HPFS386)) {
     381        !stricmp(FileSystem, RAMFS) ||
     382        !stricmp(FileSystem, NDFS32) ||
     383        !stricmp(FileSystem, NTFS) ||
     384        !stricmp(FileSystem, HPFS386)) {
    387385      hasCreateDT = TRUE;
    388386      hasAccessDT = TRUE;
     
    430428  BOOL *bool;
    431429
    432   bool = (dcd) ? &dcd->detailssubject : &detailssubject;
    433   AdjustCnrColVis(hwndCnr, ((compare) ? GetPString(IDS_STATUS) :
    434                             GetPString(IDS_SUBJ)), *bool, FALSE);
    435   bool = (dcd) ? &dcd->detailsattr : &detailsattr;
     430  bool = dcd ? &dcd->detailssubject : &detailssubject;
     431  AdjustCnrColVis(hwndCnr,
     432                  compare ? GetPString(IDS_STATUS) : GetPString(IDS_SUBJ),
     433                  *bool,
     434                  FALSE);
     435
     436  bool = dcd ? &dcd->detailsattr : &detailsattr;
    436437  AdjustCnrColVis(hwndCnr, GetPString(IDS_ATTR), *bool, FALSE);
    437   bool = (dcd) ? &dcd->detailsicon : &detailsicon;
     438  bool = dcd ? &dcd->detailsicon : &detailsicon;
    438439  AdjustCnrColVis(hwndCnr, GetPString(IDS_ICON), *bool, FALSE);
    439   bool = (dcd) ? &dcd->detailslwdate : &detailslwdate;
     440  bool = dcd ? &dcd->detailslwdate : &detailslwdate;
    440441  AdjustCnrColVis(hwndCnr, GetPString(IDS_LWDATE), *bool, FALSE);
    441   bool = (dcd) ? &dcd->detailslwtime : &detailslwtime;
     442  bool = dcd ? &dcd->detailslwtime : &detailslwtime;
    442443  AdjustCnrColVis(hwndCnr, GetPString(IDS_LWTIME), *bool, FALSE);
    443   bool = (dcd) ? &dcd->detailsea : &detailsea;
     444  bool = dcd ? &dcd->detailsea : &detailsea;
    444445  AdjustCnrColVis(hwndCnr, GetPString(IDS_EA), *bool, FALSE);
    445   bool = (dcd) ? &dcd->detailssize : &detailssize;
     446  bool = dcd ? &dcd->detailssize : &detailssize;
    446447  AdjustCnrColVis(hwndCnr, GetPString(IDS_SIZE), *bool, FALSE);
     448
    447449  if (!directory) {
    448     bool = (dcd) ? &dcd->detailsladate : &detailsladate;
     450    bool = dcd ? &dcd->detailsladate : &detailsladate;
    449451    AdjustCnrColVis(hwndCnr, GetPString(IDS_LADATE), *bool, FALSE);
    450     bool = (dcd) ? &dcd->detailslatime : &detailslatime;
     452    bool = dcd ? &dcd->detailslatime : &detailslatime;
    451453    AdjustCnrColVis(hwndCnr, GetPString(IDS_LATIME), *bool, FALSE);
    452     bool = (dcd) ? &dcd->detailscrdate : &detailscrdate;
     454    bool = dcd ? &dcd->detailscrdate : &detailscrdate;
    453455    AdjustCnrColVis(hwndCnr, GetPString(IDS_CRDATE), *bool, FALSE);
    454     bool = (dcd) ? &dcd->detailscrtime : &detailscrtime;
     456    bool = dcd ? &dcd->detailscrtime : &detailscrtime;
    455457    AdjustCnrColVis(hwndCnr, GetPString(IDS_CRTIME), *bool, FALSE);
    456     bool = (dcd) ? &dcd->detailslongname : &detailslongname;
     458    bool = dcd ? &dcd->detailslongname : &detailslongname;
    457459    AdjustCnrColVis(hwndCnr, GetPString(IDS_LNAME), *bool, FALSE);
    458460    WinSendMsg(hwndCnr, CM_INVALIDATEDETAILFIELDINFO, MPVOID, MPVOID);
     
    462464}
    463465
    464 BOOL SetCnrCols(HWND hwndCnr, BOOL compare)
     466BOOL SetCnrCols(HWND hwndCnr, BOOL isCompCnr)
    465467{
    466468  BOOL fSuccess = TRUE;
     
    472474                   MPFROMLONG(CONTAINER_COLUMNS), NULL);
    473475
    474   if (pfi) {
     476  if (!pfi) {
     477    Win_Error(hwndCnr, HWND_DESKTOP, pszSrcFile, __LINE__, "CM_ALLOCDETAILFIELDINFO");
     478    fSuccess = FALSE;
     479  }
     480  else {
    475481
    476482    PFIELDINFO pfiFirst;
     
    518524    pfi = pfi->pNextFieldInfo;
    519525    pfi->flData = CFA_STRING | CFA_LEFT | CFA_SEPARATOR;
    520     if (compare)
     526    if (isCompCnr)
    521527      pfi->flData |= CFA_FIREADONLY;
    522528    pfi->flTitle = CFA_CENTER | CFA_FITITLEREADONLY;
    523     pfi->pTitleData = (compare) ? GetPString(IDS_STATUS) :
     529    pfi->pTitleData = (isCompCnr) ? GetPString(IDS_STATUS) :
    524530      GetPString(IDS_SUBJ);
    525531    pfi->offStruct = FIELDOFFSET(CNRITEM, pszSubject);
     
    610616
    611617    if (!WinSendMsg(hwndCnr, CM_INSERTDETAILFIELDINFO, MPFROMP(pfiFirst),
    612                     MPFROMP(&fii)))
     618                    MPFROMP(&fii))) {
     619      Win_Error(hwndCnr, HWND_DESKTOP, pszSrcFile, __LINE__, "CM_INSERTDETAILFIELDINFO");
    613620      fSuccess = FALSE;
    614   }
    615   else
    616     fSuccess = FALSE;
     621    }
     622  }
    617623
    618624  if (fSuccess) {
     
    634640    if (!WinSendMsg(hwndCnr, CM_SETCNRINFO, MPFROMP(&cnri),
    635641                    MPFROMLONG(CMA_PFIELDINFOLAST | CMA_PFIELDINFOOBJECT |
    636                                CMA_XVERTSPLITBAR)))
     642                               CMA_XVERTSPLITBAR))) {
     643      Win_Error(hwndCnr, HWND_DESKTOP, pszSrcFile, __LINE__, "CM_SETCNRINFO");
    637644      fSuccess = FALSE;
     645    }
    638646  }
    639647
     
    682690          ULONG ealen;
    683691          USHORT len;
    684           CHAR *eaval;
    685           LONG retlen;
     692          CHAR *eaval;
     693          LONG retlen;
    686694
    687695          retlen = WinQueryWindowText(hwndMLE, sizeof(szSubject), szSubject);
     
    733741
    734742          CHAR longname[CCHMAXPATHCOMP];
    735         LONG retlen;
     743        LONG retlen;
    736744
    737745          *longname = 0;
     
    739747          longname[retlen + 1] = 0;
    740748          chop_at_crnl(longname);
    741           WinSetWindowText(hwndMLE, longname);
    742           pci->pszFileName = xrealloc(pci->pszFileName, sizeof(longname), pszSrcFile, __LINE__);
     749          WinSetWindowText(hwndMLE, longname);
     750          pci->pszFileName = xrealloc(pci->pszFileName, sizeof(longname), pszSrcFile, __LINE__);
    743751          return (MRESULT) WriteLongName(pci->pszFileName, longname);
    744752        }
    745         else {
    746           pci->pszFileName = pci->pszDisplayName;
    747           WinQueryWindowText(hwndMLE, sizeof(szData), szData);
    748           pci->pszFileName = xrealloc(pci->pszFileName, sizeof(szData), pszSrcFile, __LINE__);
     753        else {
     754          pci->pszFileName = pci->pszDisplayName;
     755          WinQueryWindowText(hwndMLE, sizeof(szData), szData);
     756          pci->pszFileName = xrealloc(pci->pszFileName, sizeof(szData), pszSrcFile, __LINE__);
    749757          if (strchr(szData, '?') ||
    750758              strchr(szData, '*') || IsRoot(pci->pszFileName))
    751759            return (MRESULT) FALSE;
    752           /* If the text changed, rename the file system object. */
     760          /* If the text changed, rename the file system object. */
    753761          chop_at_crnl(szData);
    754           bstrip(szData);
     762          bstrip(szData);
    755763          if (!IsFullName(szData))
    756764            Runtime_Error(pszSrcFile, __LINE__, "bad name");
     
    759767                                 FIL_QUERYFULLNAME,
    760768                                 testname, sizeof(testname)))
    761                 return FALSE;
     769                return FALSE;
    762770            if (DosQueryPathInfo(pci->pszFileName,
    763771                                 FIL_QUERYFULLNAME, szData, sizeof(szData)))
     
    936944{
    937945  WinCheckMenuItem(hwnd, IDM_SHOWLNAMES,
    938                    (dcd) ? dcd->detailslongname : detailslongname);
     946                   dcd ? dcd->detailslongname : detailslongname);
    939947  WinCheckMenuItem(hwnd, IDM_SHOWSUBJECT,
    940                    (dcd) ? dcd->detailssubject : detailssubject);
    941   WinCheckMenuItem(hwnd, IDM_SHOWEAS, (dcd) ? dcd->detailsea : detailsea);
     948                   dcd ? dcd->detailssubject : detailssubject);
     949  WinCheckMenuItem(hwnd, IDM_SHOWEAS, dcd ? dcd->detailsea : detailsea);
    942950  WinCheckMenuItem(hwnd, IDM_SHOWSIZE,
    943                    (dcd) ? dcd->detailssize : detailssize);
     951                   dcd ? dcd->detailssize : detailssize);
    944952  WinCheckMenuItem(hwnd, IDM_SHOWICON,
    945                    (dcd) ? dcd->detailsicon : detailsicon);
     953                   dcd ? dcd->detailsicon : detailsicon);
    946954  WinCheckMenuItem(hwnd, IDM_SHOWLWDATE,
    947                    (dcd) ? dcd->detailslwdate : detailslwdate);
     955                   dcd ? dcd->detailslwdate : detailslwdate);
    948956  WinCheckMenuItem(hwnd, IDM_SHOWLWTIME,
    949                    (dcd) ? dcd->detailslwtime : detailslwtime);
     957                   dcd ? dcd->detailslwtime : detailslwtime);
    950958  WinCheckMenuItem(hwnd, IDM_SHOWLADATE,
    951                    (dcd) ? dcd->detailsladate : detailsladate);
     959                   dcd ? dcd->detailsladate : detailsladate);
    952960  WinCheckMenuItem(hwnd, IDM_SHOWLATIME,
    953                    (dcd) ? dcd->detailslatime : detailslatime);
     961                   dcd ? dcd->detailslatime : detailslatime);
    954962  WinCheckMenuItem(hwnd, IDM_SHOWCRDATE,
    955                    (dcd) ? dcd->detailscrdate : detailscrdate);
     963                   dcd ? dcd->detailscrdate : detailscrdate);
    956964  WinCheckMenuItem(hwnd, IDM_SHOWCRTIME,
    957                    (dcd) ? dcd->detailscrtime : detailscrtime);
     965                   dcd ? dcd->detailscrtime : detailscrtime);
    958966  WinCheckMenuItem(hwnd, IDM_SHOWATTR,
    959                    (dcd) ? dcd->detailsattr : detailsattr);
     967                   dcd ? dcd->detailsattr : detailsattr);
    960968}
    961969
     
    975983  switch (cmd) {
    976984  case IDM_SHOWLNAMES:
    977     bool = (dcd) ? &dcd->detailslongname : &detailslongname;
     985    bool = dcd ? &dcd->detailslongname : &detailslongname;
    978986    strcpy(eos, "DetailsLongname");
    979987    break;
    980988  case IDM_SHOWSUBJECT:
    981     bool = (dcd) ? &dcd->detailssubject : &detailssubject;
     989    bool = dcd ? &dcd->detailssubject : &detailssubject;
    982990    strcpy(eos, "DetailsSubject");
    983991    break;
    984992  case IDM_SHOWEAS:
    985     bool = (dcd) ? &dcd->detailsea : &detailsea;
     993    bool = dcd ? &dcd->detailsea : &detailsea;
    986994    strcpy(eos, "DetailsEA");
    987995    break;
    988996  case IDM_SHOWSIZE:
    989     bool = (dcd) ? &dcd->detailssize : &detailssize;
     997    bool = dcd ? &dcd->detailssize : &detailssize;
    990998    strcpy(eos, "DetailsSize");
    991999    break;
    9921000  case IDM_SHOWICON:
    993     bool = (dcd) ? &dcd->detailsicon : &detailsicon;
     1001    bool = dcd ? &dcd->detailsicon : &detailsicon;
    9941002    strcpy(eos, "DetailsIcon");
    9951003    break;
    9961004  case IDM_SHOWLWDATE:
    997     bool = (dcd) ? &dcd->detailslwdate : &detailslwdate;
     1005    bool = dcd ? &dcd->detailslwdate : &detailslwdate;
    9981006    strcpy(eos, "DetailsLWDate");
    9991007    break;
    10001008  case IDM_SHOWLWTIME:
    1001     bool = (dcd) ? &dcd->detailslwtime : &detailslwtime;
     1009    bool = dcd ? &dcd->detailslwtime : &detailslwtime;
    10021010    strcpy(eos, "DetailsLWTime");
    10031011    break;
    10041012  case IDM_SHOWLADATE:
    1005     bool = (dcd) ? &dcd->detailsladate : &detailsladate;
     1013    bool = dcd ? &dcd->detailsladate : &detailsladate;
    10061014    strcpy(eos, "DetailsLADate");
    10071015    break;
    10081016  case IDM_SHOWLATIME:
    1009     bool = (dcd) ? &dcd->detailslatime : &detailslatime;
     1017    bool = dcd ? &dcd->detailslatime : &detailslatime;
    10101018    strcpy(eos, "DetailsLATime");
    10111019    break;
    10121020  case IDM_SHOWCRDATE:
    1013     bool = (dcd) ? &dcd->detailscrdate : &detailscrdate;
     1021    bool = dcd ? &dcd->detailscrdate : &detailscrdate;
    10141022    strcpy(eos, "DetailsCRDate");
    10151023    break;
    10161024  case IDM_SHOWCRTIME:
    1017     bool = (dcd) ? &dcd->detailscrtime : &detailscrtime;
     1025    bool = dcd ? &dcd->detailscrtime : &detailscrtime;
    10181026    strcpy(eos, "DetailsCRTime");
    10191027    break;
    10201028  case IDM_SHOWATTR:
    1021     bool = (dcd) ? &dcd->detailsattr : &detailsattr;
     1029    bool = dcd ? &dcd->detailsattr : &detailsattr;
    10221030    strcpy(eos, "DetailsAttr");
    10231031    break;
     
    13841392      // If window owned by some other process or some other thread?
    13851393      if (!IsFm2Window(h, 1)) {
    1386           QMSG qmsg;
     1394          QMSG qmsg;
    13871395          for (;;) {
    13881396            DosSleep(1);
  • trunk/dll/objcnr.c

    r731 r751  
    1515  03 Nov 06 SHL Renames
    1616  22 Mar 07 GKY Use QWL_USER
     17  01 Aug 07 SHL Rework to sync with CNRITEM mods
    1718
    1819***********************************************************************/
     
    9394    pciP = WinSendMsg(hwndCnr,
    9495                      CM_ALLOCRECORD,
    95                       MPFROMLONG(EXTRA_RECORD_BYTES2),
     96                      MPFROMLONG(EXTRA_RECORD_BYTES),
    9697                      MPFROMLONG(1L));
    9798    if (!pciP) {
     
    100101    }
    101102    pciP->pszFileName = xstrdup(filename, pszSrcFile, __LINE__);
    102     pciP->pszDispAttr = pciP->szDispAttr;
    103     *pciP->szDispAttr = 0;
    104     //pciP->pszSubject = pciP->szSubject;
    105     pciP->pszSubject = xstrdup(NullStr, pszSrcFile, __LINE__);  // 23 Jul 07 SHL
    106     //pciP->pszLongname = pciP->szLongname;
    107     pciP->pszLongname = xstrdup(NullStr, pszSrcFile, __LINE__);
     103    pciP->pszDispAttr = NullStr;
     104    pciP->pszSubject = NullStr;
     105    pciP->pszLongname = NullStr;
    108106    if (strlen(filename) < 4)
    109       pciP->pszFileName = pciP->pszFileName;
     107      pciP->pszDisplayName = pciP->pszFileName;
    110108    else {
    111109      p = strrchr(pciP->pszFileName, '\\');
     
    114112      else if (*(p + 1))
    115113        p++;
    116       pciP->pszFileName = p;
    117     }
    118     pciP->rc.pszIcon = pciP->pszFileName;
     114      pciP->pszDisplayName = p;
     115    }
     116    pciP->rc.pszIcon = pciP->pszDisplayName;
    119117    if (fForceUpper)
    120118      strupr(pciP->pszFileName);
  • trunk/dll/select.c

    r748 r751  
    2020  12 May 07 SHL Use dcd->ulItemsToUnHilite
    2121  14 Jun 07 SHL SelectAll: make odd expression go away
    22   01 Aug 07 SHL Clean up while auditing for CNRITEM sync
     22  02 Aug 07 SHL Sync with CNRITEM mods
    2323
    2424***********************************************************************/
     
    484484                 MPFROM2SHORT(0, CRA_SELECTED));
    485485      if (fSyncUpdates)
    486         WinSendMsg(hwndCnr, CM_REMOVERECORD, MPFROMP(&pci),
    487                    MPFROM2SHORT(1, CMA_FREE | CMA_INVALIDATE));
     486        RemoveCnrItems(hwndCnr, pci, 1, CMA_FREE | CMA_INVALIDATE);
    488487      else
    489         WinSendMsg(hwndCnr, CM_REMOVERECORD, MPFROMP(&pci),
    490                    MPFROM2SHORT(1, CMA_FREE));
     488        RemoveCnrItems(hwndCnr, pci, 1, CMA_FREE);
    491489      if (attribute == CRA_CURSORED)
    492490        break;
  • trunk/dll/treecnr.c

    r739 r751  
    3434  10 Jun 07 GKY Mouse button 3 white space click to fail silently
    3535  05 Jul 07 SHL Disable leftover debug code
     36  02 Aug 07 SHL Sync with CNRITEM mods
    3637
    3738***********************************************************************/
     
    697698      Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
    698699    else {
    699       WinSendMsg(dcd->hwndCnr,
    700                  CM_REMOVERECORD,
    701                  MPVOID,
    702                  MPFROM2SHORT(0, CMA_FREE | CMA_INVALIDATE | CMA_ERASE));
     700      RemoveCnrItems(dcd->hwndCnr, NULL, 0, CMA_FREE | CMA_INVALIDATE | CMA_ERASE);
    703701      WinSendMsg(dcd->hwndCnr,
    704702                 CM_SCROLLWINDOW, MPFROMSHORT(CMA_VERTICAL), MPFROMLONG(-1));
     
    17431741                break;
    17441742              }
    1745             }                           // for
    1746             WinSendMsg(hwnd,
    1747                        CM_REMOVERECORD,
    1748                        MPFROMP(&pciP),
    1749                        MPFROM2SHORT(1, CMA_FREE | CMA_INVALIDATE));
     1743            } // for
     1744            RemoveCnrItems(hwnd, pciP, 1, CMA_FREE | CMA_INVALIDATE);
    17501745            return 0;
    17511746          }
     
    19341929            if (!(driveflags[toupper(*pci->pszFileName) - 'A'] &
    19351930                  DRIVE_INCLUDEFILES))
    1936               WinSendMsg(hwnd,
    1937                          CM_REMOVERECORD,
    1938                          MPFROMP(&pci),
    1939                          MPFROM2SHORT(1, CMA_FREE | CMA_INVALIDATE));
     1931              RemoveCnrItems(hwnd, pci, 1, CMA_FREE | CMA_INVALIDATE);
    19401932            else {
    19411933
     
    19521944          if (!IsRoot(pci->pszFileName)) {
    19531945            NotifyError(pci->pszFileName, status);
    1954             WinSendMsg(hwnd,
    1955                        CM_REMOVERECORD,
    1956                        MPFROMP(&pci),
    1957                        MPFROM2SHORT(1, CMA_FREE | CMA_INVALIDATE));
     1946            RemoveCnrItems(hwnd, pci, 1, CMA_FREE | CMA_INVALIDATE);
    19581947          }
    19591948        }
     
    21912180            if (driveflags[info->device - 'A'] &
    21922181                (DRIVE_INVALID | DRIVE_IGNORE))
    2193               WinSendMsg(hwnd,
    2194                          CM_REMOVERECORD,
    2195                          MPFROMP(&pci), MPFROM2SHORT(1, CMA_FREE));
     2182              RemoveCnrItems(hwnd, pci, 1, CMA_FREE);
    21962183            else
    21972184              Flesh(hwnd, pci);
  • trunk/dll/update.c

    r730 r751  
    77
    88  Copyright (c) 1993-98 M. Kimes
    9   Copyright (c) 2003, 2006 Steven H. Levine
     9  Copyright (c) 2003, 2007 Steven H. Levine
    1010
    1111  12 Feb 03 SHL Standardize EA math
     
    1717  20 Feb 07 GKY Add SelectDriveIcon()
    1818  09 Mar 07 GKY Cleanup SelectDriveIcon using "driveflag =" from Steven
     19  02 Aug 07 SHL Sync with CNRITEM mods
    1920
    2021***********************************************************************/
     
    4243    UINT driveflag = driveflags[toupper(*pci->pszFileName) - 'A'];
    4344    *pci->pszFileName = toupper(*pci->pszFileName);
    44               if (isalpha(*pci->pszFileName) &&
    45                   toupper(*pci->pszFileName) > 'B') {
    46                 if (driveflag & DRIVE_CDROM)
     45              if (isalpha(*pci->pszFileName) &&
     46                  toupper(*pci->pszFileName) > 'B') {
     47                if (driveflag & DRIVE_CDROM)
    4748                  pci->rc.hptrIcon = hptrCDROM;
    4849                else
    4950                  pci->rc.hptrIcon =
    5051                     (driveflag & DRIVE_REMOVABLE) ? hptrRemovable
    51                     :(driveflag & DRIVE_VIRTUAL) ? hptrVirtual
    52                     :(driveflag & DRIVE_REMOTE) ? hptrRemote
    53                     :(driveflag & DRIVE_RAMDISK) ? hptrRamdisk
     52                    :(driveflag & DRIVE_VIRTUAL) ? hptrVirtual
     53                    :(driveflag & DRIVE_REMOTE) ? hptrRemote
     54                    :(driveflag & DRIVE_RAMDISK) ? hptrRamdisk
    5455                    :(driveflag & DRIVE_ZIPSTREAM) ? hptrZipstrm : hptrDrive;
    5556              }
    5657              else
    57                 pci->rc.hptrIcon = hptrFloppy;
    58                 return pci->rc.hptrIcon;
     58                pci->rc.hptrIcon = hptrFloppy;
     59                return pci->rc.hptrIcon;
    5960}
    6061PCNRITEM UpdateCnrRecord(HWND hwndCnr, CHAR * filename, BOOL partial,
     
    6465  FILEFINDBUF4 ffb;
    6566  HDIR hDir = HDIR_CREATE;
    66   ULONG nm = 1L;
     67  ULONG nm = 1;
    6768  ULONG oldemphasis = 0;
    6869  APIRET status;
     
    128129#endif
    129130      if ((!fForceUpper && !fForceLower && strcmp(pci->pszFileName, filename)) ||
    130           pci->cbFile != ffb.cbFile || pci->attrFile != ffb.attrFile ||
    131           pci->easize != CBLIST_TO_EASIZE(ffb.cbList) || pci->date.day !=
    132           ffb.fdateLastWrite.day || pci->date.month != ffb.fdateLastWrite.month ||
    133           pci->date.year != ffb.fdateLastWrite.year + 1980 || pci->time.seconds !=
    134           ffb.ftimeLastWrite.twosecs * 2 || pci->time.minutes != ffb.ftimeLastWrite.minutes ||
    135           pci->time.hours != ffb.ftimeLastWrite.hours || pci->ladate.day !=
    136           ffb.fdateLastAccess.day || pci->ladate.month != ffb.fdateLastAccess.month ||
    137           pci->ladate.year != ffb.fdateLastAccess.year + 1980 || pci->latime.seconds !=
    138           ffb.ftimeLastAccess.twosecs * 2 || pci->latime.minutes !=
    139           ffb.ftimeLastAccess.minutes || pci->latime.hours != ffb.ftimeLastAccess.hours) {      /* changed; update */
     131          pci->cbFile != ffb.cbFile || pci->attrFile != ffb.attrFile ||
     132          pci->easize != CBLIST_TO_EASIZE(ffb.cbList) || pci->date.day !=
     133          ffb.fdateLastWrite.day || pci->date.month != ffb.fdateLastWrite.month ||
     134          pci->date.year != ffb.fdateLastWrite.year + 1980 || pci->time.seconds !=
     135          ffb.ftimeLastWrite.twosecs * 2 || pci->time.minutes != ffb.ftimeLastWrite.minutes ||
     136          pci->time.hours != ffb.ftimeLastWrite.hours || pci->ladate.day !=
     137          ffb.fdateLastAccess.day || pci->ladate.month != ffb.fdateLastAccess.month ||
     138          pci->ladate.year != ffb.fdateLastAccess.year + 1980 || pci->latime.seconds !=
     139          ffb.ftimeLastAccess.twosecs * 2 || pci->latime.minutes !=
     140          ffb.ftimeLastAccess.minutes || pci->latime.hours != ffb.ftimeLastAccess.hours) {      /* changed; update */
    140141#ifdef DEBUG
    141142        updated = TRUE;
     
    144145        ffb.cchName = 0;
    145146        FillInRecordFromFFB(hwndCnr, pci, filename, &ffb, partial, dcd);
    146         if (strlen(pci->pszFileName) < 4)
    147         SelectDriveIcon(pci);
     147        if (strlen(pci->pszFileName) < 4)
     148        SelectDriveIcon(pci);
    148149        oldemphasis = pci->rc.flRecordAttr & (CRA_SELECTED | CRA_CURSORED);
    149150        if (oldemphasis)
     
    174175        pci = WinSendMsg(hwndCnr,
    175176                         CM_ALLOCRECORD,
    176                          MPFROMLONG(EXTRA_RECORD_BYTES), MPFROMLONG(1L));
     177                         MPFROMLONG(EXTRA_RECORD_BYTES), MPFROMLONG(1));
    177178        if (pci) {
    178179          *ffb.achName = 0;
     
    180181                                              pci,
    181182                                              filename, &ffb, partial, dcd);
    182           if (strlen(pci->pszFileName) < 4)
    183           SelectDriveIcon(pci);
     183          if (strlen(pci->pszFileName) < 4)
     184          SelectDriveIcon(pci);
    184185          memset(&ri, 0, sizeof(RECORDINSERT));
    185186          ri.cb = sizeof(RECORDINSERT);
     
    187188          ri.pRecordParent = (PRECORDCORE) NULL;
    188189          ri.zOrder = (USHORT) CMA_TOP;
    189           ri.cRecordsInsert = 1L;
     190          ri.cRecordsInsert = 1;
    190191          ri.fInvalidateRecord = TRUE;
    191192          if (WinSendMsg(hwndCnr,
     
    218219                               CM_ALLOCRECORD,
    219220                               MPFROMLONG(EXTRA_RECORD_BYTES),
    220                                MPFROMLONG(1L));
     221                               MPFROMLONG(1));
    221222              if (pci) {
    222223
     
    226227                FillInRecordFromFFB(hwndCnr,
    227228                                    pci, filename, &ffb, partial, dcd);
    228                 if (strlen(pci->pszFileName) < 4)
    229                 SelectDriveIcon(pci);
     229                if (strlen(pci->pszFileName) < 4)
     230                SelectDriveIcon(pci);
    230231                memset(&ri, 0, sizeof(RECORDINSERT));
    231232                ri.cb = sizeof(RECORDINSERT);
     
    233234                ri.pRecordParent = (PRECORDCORE) pciParent;
    234235                ri.zOrder = (USHORT) CMA_TOP;
    235                 ri.cRecordsInsert = 1L;
     236                ri.cRecordsInsert = 1;
    236237                ri.fInvalidateRecord = TRUE;
    237238                if (WinSendMsg(hwndCnr,
     
    263264        pci = WinSendMsg(hwndCnr,
    264265                         CM_ALLOCRECORD,
    265                          MPFROMLONG(EXTRA_RECORD_BYTES), MPFROMLONG(1L));
     266                         MPFROMLONG(EXTRA_RECORD_BYTES), MPFROMLONG(1));
    266267        if (pci) {
    267268
     
    273274                                              pci,
    274275                                              filename, &ffb, partial, dcd);
    275           if (strlen(pci->pszFileName) < 4)
    276           SelectDriveIcon(pci);
     276          if (strlen(pci->pszFileName) < 4)
     277          SelectDriveIcon(pci);
    277278          memset(&ri, 0, sizeof(RECORDINSERT));
    278279          ri.cb = sizeof(RECORDINSERT);
     
    280281          ri.pRecordParent = (PRECORDCORE) pciParent;
    281282          ri.zOrder = (USHORT) CMA_TOP;
    282           ri.cRecordsInsert = 1L;
     283          ri.cRecordsInsert = 1;
    283284          ri.fInvalidateRecord = TRUE;
    284285          if (WinSendMsg(hwndCnr,
     
    314315    if (dcd->type == DIR_FRAME)
    315316      dcd->ullTotalBytes -= pci->cbFile + pci->easize;
    316     WinSendMsg(hwndCnr,
    317                CM_REMOVERECORD,
    318                MPFROMP(&pci), MPFROM2SHORT(1, CMA_FREE | CMA_INVALIDATE));
    319     pci = (PCNRITEM) NULL;
     317    RemoveCnrItems(hwndCnr, pci, 1, CMA_FREE | CMA_INVALIDATE);
     318    pci = NULL;
    320319    PostMsg(hwndCnr, UM_RESCAN, MPVOID, MPVOID);
    321320  }
     
    339338  FILEFINDBUF4 ffb;
    340339  HDIR hDir;
    341   ULONG nm = 1L;
     340  ULONG nm = 1;
    342341  INT x;
    343342  INT numlist = 0;
     
    431430            FillInRecordFromFFB(hwndCnr,
    432431                                pci, filename[x], &ffb, partial, dcd);
    433             if (IsRoot(pci->pszFileName))
    434             SelectDriveIcon(pci);
     432            if (IsRoot(pci->pszFileName))
     433            SelectDriveIcon(pci);
    435434            WinSendMsg(hwndCnr,
    436435                       CM_SETRECORDEMPHASIS,
     
    447446            pci = WinSendMsg(hwndCnr,
    448447                             CM_ALLOCRECORD,
    449                              MPFROMLONG(EXTRA_RECORD_BYTES), MPFROMLONG(1L));
     448                             MPFROMLONG(EXTRA_RECORD_BYTES), MPFROMLONG(1));
    450449            if (pci) {
    451450              ret = TRUE;
     
    455454                                                  filename[x],
    456455                                                  &ffb, partial, dcd);
    457               if (strlen(pci->pszFileName) < 4)
    458               SelectDriveIcon(pci);
     456              if (strlen(pci->pszFileName) < 4)
     457              SelectDriveIcon(pci);
    459458              memset(&ri, 0, sizeof(RECORDINSERT));
    460459              ri.cb = sizeof(RECORDINSERT);
     
    462461              ri.pRecordParent = (PRECORDCORE) NULL;
    463462              ri.zOrder = (USHORT) CMA_TOP;
    464               ri.cRecordsInsert = 1L;
     463              ri.cRecordsInsert = 1;
    465464              ri.fInvalidateRecord = FALSE;
    466465              if (WinSendMsg(hwndCnr,
     
    475474              }
    476475              else
    477                 WinSendMsg(hwndCnr,
    478                            CM_FREERECORD, MPFROMP(&pci), MPFROMSHORT(1));
     476                FreeCnrItem(hwndCnr, pci);
    479477            }
    480478          }
     
    497495                                   CM_ALLOCRECORD,
    498496                                   MPFROMLONG(EXTRA_RECORD_BYTES),
    499                                    MPFROMLONG(1L));
     497                                   MPFROMLONG(1));
    500498                  if (pci) {
    501499
     
    509507                                                        filename[x],
    510508                                                        &ffb, partial, dcd);
    511                     if (strlen(pci->pszFileName) < 4)
    512                     SelectDriveIcon(pci);
     509                    if (strlen(pci->pszFileName) < 4)
     510                    SelectDriveIcon(pci);
    513511                    memset(&ri, 0, sizeof(RECORDINSERT));
    514512                    ri.cb = sizeof(RECORDINSERT);
     
    516514                    ri.pRecordParent = (PRECORDCORE) pciParent;
    517515                    ri.zOrder = (USHORT) CMA_TOP;
    518                     ri.cRecordsInsert = 1L;
     516                    ri.cRecordsInsert = 1;
    519517                    ri.fInvalidateRecord = FALSE;
    520518                    if (WinSendMsg(hwndCnr,
     
    529527                    }
    530528                    else
    531                       WinSendMsg(hwndCnr,
    532                                  CM_FREERECORD,
    533                                  MPFROMP(&pci), MPFROMSHORT(1));
     529                      FreeCnrItem(hwndCnr, pci);
    534530                  }
    535531                }
     
    544540                               CM_ALLOCRECORD,
    545541                               MPFROMLONG(EXTRA_RECORD_BYTES),
    546                                MPFROMLONG(1L));
     542                               MPFROMLONG(1));
    547543              if (pci) {
    548544
     
    556552                                                    filename[x],
    557553                                                    &ffb, partial, dcd);
    558                 if (strlen(pci->pszFileName) < 4)
    559                 SelectDriveIcon(pci);
     554                if (strlen(pci->pszFileName) < 4)
     555                SelectDriveIcon(pci);
    560556                memset(&ri, 0, sizeof(RECORDINSERT));
    561557                ri.cb = sizeof(RECORDINSERT);
     
    563559                ri.pRecordParent = (PRECORDCORE) pciParent;
    564560                ri.zOrder = (USHORT) CMA_TOP;
    565                 ri.cRecordsInsert = 1L;
     561                ri.cRecordsInsert = 1;
    566562                ri.fInvalidateRecord = FALSE;
    567563                if (WinSendMsg(hwndCnr,
     
    576572                }
    577573                else
    578                   WinSendMsg(hwndCnr,
    579                              CM_FREERECORD, MPFROMP(&pci), MPFROMSHORT(1));
     574                  FreeCnrItem(hwndCnr, pci);
    580575              }
    581576            }
     
    597592        if (dcd->type == DIR_FRAME)
    598593          dcd->ullTotalBytes -= (pci->cbFile + pci->easize);
    599         if (WinSendMsg(hwndCnr,
    600                        CM_REMOVERECORD,
    601                        MPFROMP(&pci),
    602                        MPFROM2SHORT(1,
    603                                     CMA_FREE | (numremain ==
    604                                                 1 ? CMA_INVALIDATE : 0)))) {
     594        // 02 Aug 07 SHL rc check was wrong
     595        if (RemoveCnrItems(hwndCnr, pci, 1,
     596                           CMA_FREE |
     597                             numremain == 1 ? CMA_INVALIDATE : 0) != -1) {
    605598          numremain--;
    606599          repos = TRUE;
    607600        }
    608601      }
    609     }                                   // for
     602    } // for x
    610603  }
    611604  if (repos || (pciList && numlist)) {
Note: See TracChangeset for help on using the changeset viewer.