Changeset 36 for trunk/dll/datamin.c


Ignore:
Timestamp:
Oct 17, 2002, 3:53:23 AM (23 years ago)
Author:
root
Message:

Handle large partitions

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/datamin.c

    r30 r36  
    1010
    1111  Revisions     14 Sep 02 SHL - Handle large partitions
     12                16 Oct 02 SHL - Handle large partitions better
    1213
    1314***********************************************************************/
     
    618619    case UM_PAINT:
    619620      {
    620         CHAR        s[90],tpm[38],*kfree,path[] = " :",
     621        CHAR        s[90],szFreeQty[38],*pszFreeUM,path[] = " :",
    621622                   *szBuf = NULL,*FSystem = NULL;
    622         ULONG       freebytes,percentfree,wasx,size;
    623          ULONG       cbPerUnit;
    624          UINT         cShift;
     623        float       fltFreeQty;
     624        ULONG       percentfree,wasx,size;
    625625        HPS         hps = (HPS)mp2;
    626626        FSALLOCATE  fsa;
     
    637637          if(!WinQueryWindowPos(hwndTemp,&swp))
    638638            return 0;
    639           *tpm = 0;
     639          *szFreeQty = 0;
    640640          DosError(FERR_DISABLEHARDERR);
    641641          if(!DosQueryFSInfo((id - MINI_DRIVEA) + 1,
     
    643643                             &fsa,
    644644                             sizeof(FSALLOCATE))) {
    645              // Scale to avoid overflow on large drives
    646              cbPerUnit = fsa.cSectorUnit * fsa.cbSector;
    647              for (cShift = 0; cbPerUnit && ~cbPerUnit & 1 && cShift < 20; cShift++)
    648                cbPerUnit >>= 1;
    649             freebytes = fsa.cUnitAvail * cbPerUnit;             // Scaled by cShift
    650             if (freebytes >= (1024 * 1024) >> cShift) {
    651               freebytes /= (1024 * 1024) >> cShift;
    652               kfree = "mb";
    653             }
    654             else if (freebytes << cShift >= 1024) {
    655               freebytes <<= cShift;
    656               freebytes /= 1024;
    657               kfree = "kb";
     645            fltFreeQty = (float)fsa.cUnitAvail * (fsa.cSectorUnit * fsa.cbSector);
     646            if (fltFreeQty >= (1024 * 1024)) {
     647              fltFreeQty /= (1024 * 1024);
     648              pszFreeUM = "mb";
     649            }
     650            else if (fltFreeQty >= 1024) {
     651              fltFreeQty /= 1024;
     652              pszFreeUM = "kb";
    658653            }
    659654            else
    660              {
    661                 freebytes <<= cShift;
    662               kfree = "b";
    663              }
     655            {
     656              pszFreeUM = "b";
     657            }
    664658            percentfree = (fsa.cUnit && fsa.cUnitAvail) ?
    665                           (fsa.cUnitAvail * 100) / fsa.cUnit : 0;
    666             commafmt(tpm,sizeof(tpm),freebytes);
     659                            (fsa.cUnitAvail * 100) / fsa.cUnit : 0;
     660            commafmt(szFreeQty,sizeof(szFreeQty),(ULONG)fltFreeQty);
    667661            *path = (CHAR)(id - MINI_DRIVEA) + 'A';
    668662            if(!DosAllocMem((PVOID)&szBuf,
     
    687681                    " %s %s%s (%lu%%) %s%s%s%s",
    688682                    path,
    689                     tpm,
    690                     kfree,
     683                    szFreeQty,
     684                    pszFreeUM,
    691685                    percentfree,
    692686                    GetPString(IDS_FREETEXT),
     
    870864    case UM_SETUP2:
    871865      {
    872         CHAR         s[134],tm[38],tpm[38],*tmk,*tpmk;
    873         FILEFINDBUF3 ffb;
    874         ULONG        nm = 1L;
    875         HDIR         hdir =  HDIR_CREATE;
    876         FSALLOCATE   fsa;
     866        CHAR            s[134],szFileQty[38],szFreeQty[38],*pszFileUM,*pszFreeUM;
     867        FILEFINDBUF3    ffb;
     868        ULONG           nm = 1L;
     869        float           fltFreeQty;
     870        HDIR            hdir = HDIR_CREATE;
     871        FSALLOCATE      fsa;
    877872
    878873        if(*SwapperDat) {
     
    883878            priority_bumped();
    884879            DosFindClose(hdir);
    885             *tm = *tpm = 0;
     880            *szFileQty = *szFreeQty = 0;
    886881            DosError(FERR_DISABLEHARDERR);
    887882            if(!DosQueryFSInfo(toupper(*SwapperDat) - '@',FSIL_ALLOC,
    888883                               &fsa,sizeof(FSALLOCATE))) {
    889               nm = fsa.cUnitAvail * (fsa.cSectorUnit * fsa.cbSector);
    890               if(nm > 1024 * 1024) {
    891                 tpmk = "mb";
    892                 commafmt(tpm,sizeof(tpm),nm / (1024 * 1024));
     884              fltFreeQty = fsa.cUnitAvail * (fsa.cSectorUnit * fsa.cbSector);
     885              if(fltFreeQty > 1024 * 1024) {
     886                pszFreeUM = "mb";
     887                fltFreeQty /= (1024 * 1024);
    893888              }
    894               else if(nm > 1024) {
    895                 tpmk = "kb";
    896                 commafmt(tpm,sizeof(tpm),nm / 1024);
     889              else if(fltFreeQty > 1024) {
     890                pszFreeUM = "kb";
     891                fltFreeQty /= 1024;
    897892              }
    898893              else {
    899                 tpmk = "b";
    900                 commafmt(tpm,sizeof(tpm),nm);
     894                pszFreeUM = "b";
    901895              }
     896              commafmt(szFreeQty,sizeof(szFreeQty),(ULONG)fltFreeQty);
    902897            }
    903898            if(ffb.cbFile > 1024 * 1024) {
    904               tmk = "mb";
    905               commafmt(tm,sizeof(tm),ffb.cbFile / (1024 * 1024));
     899              pszFileUM = "mb";
     900              commafmt(szFileQty,sizeof(szFileQty),ffb.cbFile / (1024 * 1024));
    906901            }
    907902            else if(ffb.cbFile > 1024) {
    908               tmk = "kb";
    909               commafmt(tm,sizeof(tm),ffb.cbFile / 1024);
     903              pszFileUM = "kb";
     904              commafmt(szFileQty,sizeof(szFileQty),ffb.cbFile / 1024);
    910905            }
    911906            else {
    912               tmk = "b";
    913               commafmt(tm,sizeof(tm),ffb.cbFile);
     907              pszFileUM = "b";
     908              commafmt(szFileQty,sizeof(szFileQty),ffb.cbFile);
    914909            }
    915910            sprintf(s," %s %s%s%s%s%s",
    916911                    GetPString(IDS_SWAPTITLETEXT),
    917                     tm,
    918                     tmk,
    919                     (*tpm) ? "/" : NullStr,
    920                     tpm,
    921                     (*tpm) ? tpmk : NullStr);
     912                    szFileQty,
     913                    pszFileUM,
     914                    (*szFreeQty) ? "/" : NullStr,
     915                    szFreeQty,
     916                    (*szFreeQty) ? pszFreeUM : NullStr);
    922917            WinSetDlgItemText(hwnd,
    923918                              MINI_SWAP,
     
    930925    case UM_SETUP3:
    931926      {
    932         CHAR  s[134],tm[38],tpm[38],*tpmk,*tmk;
     927        CHAR  s[134],tm[38],szQty[38],*pszUM,*tmk;
    933928        ULONG amem = 0;
    934929
    935930        if(!DosQuerySysInfo(QSV_TOTAVAILMEM,QSV_TOTAVAILMEM,
    936931                            (PVOID)&amem,(ULONG)sizeof(amem))) {
    937           *tm = *tpm = 0;
     932          *tm = *szQty = 0;
    938933          if(amem > 1024 * 1024) {
    939934            tmk = "mb";
     
    950945          if(!Dos16MemAvail(&amem)) {
    951946            if(amem > 1024 * 1024) {
    952               tpmk = "mb";
    953               commafmt(tpm,sizeof(tpm),amem / (1024 * 1024));
     947              pszUM = "mb";
     948              commafmt(szQty,sizeof(szQty),amem / (1024 * 1024));
    954949            }
    955950            else if(amem > 1024) {
    956               tpmk = "kb";
    957               commafmt(tpm,sizeof(tpm),amem / 1024);
     951              pszUM = "kb";
     952              commafmt(szQty,sizeof(szQty),amem / 1024);
    958953            }
    959954            else {
    960               tpmk = "b";
    961               commafmt(tpm,sizeof(tpm),amem);
     955              pszUM = "b";
     956              commafmt(szQty,sizeof(szQty),amem);
    962957            }
    963958          }
    964959          sprintf(s," %s%s%s%s%s%s",
    965960                  GetPString(IDS_MEMTITLETEXT),
    966                   tpm,
    967                   (*tpm) ? tpmk : NullStr,
    968                   (*tpm) ? "/" : NullStr,
     961                  szQty,
     962                  (*szQty) ? pszUM : NullStr,
     963                  (*szQty) ? "/" : NullStr,
    969964                  tm,
    970965                  tmk);
     
    994989    case UM_SETUP5:
    995990      {
    996         CHAR s[134],tm[38],tpm[38];
     991        CHAR s[134],tm[38],szQty[38];
    997992
    998993        if(fUseQProcStat && !noqproc) {
     
    10181013                ppi = (PPROCESSINFO)(ppi->ptiFirst + ppi->usThreadCount);
    10191014              }
    1020               *tpm = *tm = 0;
    1021               commafmt(tpm,sizeof(tpm),numprocs);
     1015              *szQty = *tm = 0;
     1016              commafmt(szQty,sizeof(szQty),numprocs);
    10221017              commafmt(tm,sizeof(tm),numthreads);
    10231018              sprintf(s,
    10241019                      " %s%s  %s%s",
    10251020                      GetPString(IDS_PROCSTITLETEXT),
    1026                       tpm,
     1021                      szQty,
    10271022                      GetPString(IDS_THRDSTITLETEXT),
    10281023                      tm);
     
    10371032        }
    10381033        else {
    1039           *tpm = 0;
    1040           commafmt(tpm,sizeof(tpm),
     1034          *szQty = 0;
     1035          commafmt(szQty,sizeof(szQty),
    10411036                   WinQuerySwitchList(WinQueryAnchorBlock(hwnd),(PSWBLOCK)0,0));
    10421037          sprintf(s,
    10431038                  " %s%s",
    10441039                  GetPString(IDS_TASKSTITLETEXT),
    1045                   tpm);
     1040                  szQty);
    10461041          WinSetDlgItemText(hwnd,
    10471042                            MINI_PROC,
Note: See TracChangeset for help on using the changeset viewer.